[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v6 04/16] x86/hvm: restrict port numbers to uint16_t and sizes to unsigned int
Building on the previous patch, this patch restricts portio port numbers to uint16_t in registration/relocate calls and portio_action_t. It also changes portio sizes to unsigned int which then allows the io_handler size field to reduce to an unsigned int. Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx> Cc: Keir Fraser <keir@xxxxxxx> Cc: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/hvm/hvm.c | 6 +++--- xen/arch/x86/hvm/i8254.c | 8 ++++---- xen/arch/x86/hvm/intercept.c | 4 ++-- xen/arch/x86/hvm/pmtimer.c | 4 ++-- xen/arch/x86/hvm/rtc.c | 2 +- xen/arch/x86/hvm/stdvga.c | 2 +- xen/arch/x86/hvm/vpic.c | 4 ++-- xen/include/asm-x86/hvm/io.h | 20 ++++++++++---------- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index f0cf064..2bd7d45 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -559,7 +559,7 @@ static int hvm_add_ioreq_gmfn( } static int hvm_print_line( - int dir, uint32_t port, uint32_t bytes, uint32_t *val) + int dir, uint16_t port, unsigned int bytes, uint32_t *val) { struct domain *cd = current->domain; char c = *val; @@ -585,7 +585,7 @@ static int hvm_print_line( } static int hvm_access_cf8( - int dir, uint32_t port, uint32_t bytes, uint32_t *val) + int dir, uint16_t port, unsigned int bytes, uint32_t *val) { struct domain *d = current->domain; @@ -597,7 +597,7 @@ static int hvm_access_cf8( } static int handle_pvh_io( - int dir, uint32_t port, uint32_t bytes, uint32_t *val) + int dir, uint16_t port, unsigned int bytes, uint32_t *val) { struct domain *currd = current->domain; diff --git a/xen/arch/x86/hvm/i8254.c b/xen/arch/x86/hvm/i8254.c index 36a0a53..5a47580 100644 --- a/xen/arch/x86/hvm/i8254.c +++ b/xen/arch/x86/hvm/i8254.c @@ -50,9 +50,9 @@ #define RW_STATE_WORD1 4 static int handle_pit_io( - int dir, uint32_t port, uint32_t bytes, uint32_t *val); + int dir, uint16_t port, unsigned int bytes, uint32_t *val); static int handle_speaker_io( - int dir, uint32_t port, uint32_t bytes, uint32_t *val); + int dir, uint16_t port, unsigned int bytes, uint32_t *val); #define get_guest_time(v) \ (is_hvm_vcpu(v) ? hvm_get_guest_time(v) : (u64)get_s_time()) @@ -479,7 +479,7 @@ void pit_deinit(struct domain *d) /* the intercept action for PIT DM retval:0--not handled; 1--handled */ static int handle_pit_io( - int dir, uint32_t port, uint32_t bytes, uint32_t *val) + int dir, uint16_t port, unsigned int bytes, uint32_t *val) { struct PITState *vpit = vcpu_vpit(current); @@ -522,7 +522,7 @@ static uint32_t speaker_ioport_read( } static int handle_speaker_io( - int dir, uint32_t port, uint32_t bytes, uint32_t *val) + int dir, uint16_t port, uint32_t bytes, uint32_t *val) { struct PITState *vpit = vcpu_vpit(current); diff --git a/xen/arch/x86/hvm/intercept.c b/xen/arch/x86/hvm/intercept.c index cc44733..52879ff 100644 --- a/xen/arch/x86/hvm/intercept.c +++ b/xen/arch/x86/hvm/intercept.c @@ -369,7 +369,7 @@ int hvm_io_intercept(ioreq_t *p, int type) } void register_io_handler( - struct domain *d, unsigned long addr, unsigned long size, + struct domain *d, unsigned long addr, unsigned int size, void *action, int type) { struct hvm_io_handler *handler = d->arch.hvm_domain.io_handler; @@ -386,7 +386,7 @@ void register_io_handler( void relocate_io_handler( struct domain *d, unsigned long old_addr, unsigned long new_addr, - unsigned long size, int type) + unsigned int size, int type) { struct hvm_io_handler *handler = d->arch.hvm_domain.io_handler; int i; diff --git a/xen/arch/x86/hvm/pmtimer.c b/xen/arch/x86/hvm/pmtimer.c index 6ad2797..8b531d9 100644 --- a/xen/arch/x86/hvm/pmtimer.c +++ b/xen/arch/x86/hvm/pmtimer.c @@ -142,7 +142,7 @@ static void pmt_timer_callback(void *opaque) /* Handle port I/O to the PM1a_STS and PM1a_EN registers */ static int handle_evt_io( - int dir, uint32_t port, uint32_t bytes, uint32_t *val) + int dir, uint16_t port, unsigned int bytes, uint32_t *val) { struct vcpu *v = current; PMTState *s = &v->domain->arch.hvm_domain.pl_time.vpmt; @@ -205,7 +205,7 @@ static int handle_evt_io( /* Handle port I/O to the TMR_VAL register */ static int handle_pmt_io( - int dir, uint32_t port, uint32_t bytes, uint32_t *val) + int dir, uint16_t port, unsigned int bytes, uint32_t *val) { struct vcpu *v = current; PMTState *s = &v->domain->arch.hvm_domain.pl_time.vpmt; diff --git a/xen/arch/x86/hvm/rtc.c b/xen/arch/x86/hvm/rtc.c index 3448971..fde120b 100644 --- a/xen/arch/x86/hvm/rtc.c +++ b/xen/arch/x86/hvm/rtc.c @@ -697,7 +697,7 @@ static uint32_t rtc_ioport_read(RTCState *s, uint32_t addr) } static int handle_rtc_io( - int dir, uint32_t port, uint32_t bytes, uint32_t *val) + int dir, uint16_t port, unsigned int bytes, uint32_t *val) { struct RTCState *vrtc = vcpu_vrtc(current); diff --git a/xen/arch/x86/hvm/stdvga.c b/xen/arch/x86/hvm/stdvga.c index 13d1029..98308cd 100644 --- a/xen/arch/x86/hvm/stdvga.c +++ b/xen/arch/x86/hvm/stdvga.c @@ -173,7 +173,7 @@ static void stdvga_out(uint32_t port, uint32_t bytes, uint32_t val) } static int stdvga_intercept_pio( - int dir, uint32_t port, uint32_t bytes, uint32_t *val) + int dir, uint16_t port, unsigned int bytes, uint32_t *val) { struct hvm_hw_stdvga *s = ¤t->domain->arch.hvm_domain.stdvga; diff --git a/xen/arch/x86/hvm/vpic.c b/xen/arch/x86/hvm/vpic.c index 8eea061..909b9d0 100644 --- a/xen/arch/x86/hvm/vpic.c +++ b/xen/arch/x86/hvm/vpic.c @@ -324,7 +324,7 @@ static uint32_t vpic_ioport_read(struct hvm_hw_vpic *vpic, uint32_t addr) } static int vpic_intercept_pic_io( - int dir, uint32_t port, uint32_t bytes, uint32_t *val) + int dir, uint16_t port, unsigned int bytes, uint32_t *val) { struct hvm_hw_vpic *vpic; @@ -346,7 +346,7 @@ static int vpic_intercept_pic_io( } static int vpic_intercept_elcr_io( - int dir, uint32_t port, uint32_t bytes, uint32_t *val) + int dir, uint16_t port, unsigned int bytes, uint32_t *val) { struct hvm_hw_vpic *vpic; uint32_t data; diff --git a/xen/include/asm-x86/hvm/io.h b/xen/include/asm-x86/hvm/io.h index d1d79dc..ca6958b 100644 --- a/xen/include/asm-x86/hvm/io.h +++ b/xen/include/asm-x86/hvm/io.h @@ -41,12 +41,12 @@ typedef int (*hvm_mmio_write_t)(struct vcpu *v, typedef int (*hvm_mmio_check_t)(struct vcpu *v, unsigned long addr); typedef int (*portio_action_t)( - int dir, uint32_t port, uint32_t bytes, uint32_t *val); + int dir, uint16_t port, unsigned int bytes, uint32_t *val); typedef int (*mmio_action_t)(ioreq_t *); struct io_handler { int type; + unsigned int size; unsigned long addr; - unsigned long size; union { portio_action_t portio; mmio_action_t mmio; @@ -75,11 +75,11 @@ extern const struct hvm_mmio_ops iommu_mmio_ops; int hvm_io_intercept(ioreq_t *p, int type); void register_io_handler( - struct domain *d, unsigned long addr, unsigned long size, + struct domain *d, unsigned long addr, unsigned int size, void *action, int type); void relocate_io_handler( struct domain *d, unsigned long old_addr, unsigned long new_addr, - unsigned long size, int type); + unsigned int size, int type); static inline int hvm_portio_intercept(ioreq_t *p) { @@ -96,17 +96,17 @@ int hvm_mmio_intercept(ioreq_t *p); int hvm_buffered_io_send(ioreq_t *p); static inline void register_portio_handler( - struct domain *d, unsigned long addr, - unsigned long size, portio_action_t action) + struct domain *d, uint16_t port, unsigned int size, + portio_action_t action) { - register_io_handler(d, addr, size, action, HVM_PORTIO); + register_io_handler(d, port, size, action, HVM_PORTIO); } static inline void relocate_portio_handler( - struct domain *d, unsigned long old_addr, unsigned long new_addr, - unsigned long size) + struct domain *d, uint16_t old_port, uint16_t new_port, + unsigned int size) { - relocate_io_handler(d, old_addr, new_addr, size, HVM_PORTIO); + relocate_io_handler(d, old_port, new_port, size, HVM_PORTIO); } static inline void register_buffered_io_handler( -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |