|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 24/45] xen: arm: add register_t type, native register size for the hypervisor
At 15:56 +0000 on 23 Jan (1358956590), Ian Campbell wrote:
> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
Acked-by: Tim Deegan <tim@xxxxxxx>
This is mostly a matter of coding taste, so I'd like Stefano's ack/nack
here as well.
Tim.
> ---
> I can't decide between this, unsigned long or just using vaddr_t
> here.
> ---
> xen/arch/arm/domain_build.c | 2 +-
> xen/arch/arm/smpboot.c | 2 +-
> xen/arch/arm/traps.c | 44 ++++++++++++++++++++++--------------------
> xen/arch/arm/vgic.c | 18 ++++++++--------
> xen/arch/arm/vpl011.c | 6 ++--
> xen/arch/arm/vtimer.c | 6 ++--
> xen/include/asm-arm/regs.h | 2 +-
> xen/include/asm-arm/types.h | 4 +++
> 8 files changed, 45 insertions(+), 39 deletions(-)
>
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index 7403f1a..30d014a 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -268,7 +268,7 @@ static int prepare_dtb(struct domain *d, struct
> kernel_info *kinfo)
>
> static void dtb_load(struct kernel_info *kinfo)
> {
> - void * __user dtb_virt = (void *)(u32)kinfo->dtb_paddr;
> + void * __user dtb_virt = (void *)(register_t)kinfo->dtb_paddr;
>
> raw_copy_to_guest(dtb_virt, kinfo->fdt, fdt_totalsize(kinfo->fdt));
> xfree(kinfo->fdt);
> diff --git a/xen/arch/arm/smpboot.c b/xen/arch/arm/smpboot.c
> index 8956ead..5234d14 100644
> --- a/xen/arch/arm/smpboot.c
> +++ b/xen/arch/arm/smpboot.c
> @@ -143,7 +143,7 @@ void __cpuinit start_secondary(unsigned long
> boot_phys_offset,
> set_processor_id(cpuid);
>
> /* Setup Hyp vector base */
> - WRITE_CP32((uint32_t) hyp_traps_vector, HVBAR);
> + WRITE_CP32((register_t) hyp_traps_vector, HVBAR);
>
> mmu_init_secondary_cpu();
> enable_vfp();
> diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
> index 0a1c483..b9282b0 100644
> --- a/xen/arch/arm/traps.c
> +++ b/xen/arch/arm/traps.c
> @@ -73,7 +73,7 @@ static void print_xen_info(void)
> debug, print_tainted(taint_str));
> }
>
> -uint32_t *select_user_reg(struct cpu_user_regs *regs, int reg)
> +register_t *select_user_reg(struct cpu_user_regs *regs, int reg)
> {
> BUG_ON( !guest_mode(regs) );
>
> @@ -86,20 +86,20 @@ uint32_t *select_user_reg(struct cpu_user_regs *regs, int
> reg)
>
> switch ( reg ) {
> case 0 ... 7: /* Unbanked registers */
> - BUILD_BUG_ON(REGOFFS(r0) + 7*sizeof(uint32_t) != REGOFFS(r7));
> + BUILD_BUG_ON(REGOFFS(r0) + 7*sizeof(register_t) != REGOFFS(r7));
> return ®s->r0 + reg;
> case 8 ... 12: /* Register banked in FIQ mode */
> - BUILD_BUG_ON(REGOFFS(r8_fiq) + 4*sizeof(uint32_t) !=
> REGOFFS(r12_fiq));
> + BUILD_BUG_ON(REGOFFS(r8_fiq) + 4*sizeof(register_t) !=
> REGOFFS(r12_fiq));
> if ( fiq_mode(regs) )
> return ®s->r8_fiq + reg - 8;
> else
> return ®s->r8 + reg - 8;
> case 13 ... 14: /* Banked SP + LR registers */
> - BUILD_BUG_ON(REGOFFS(sp_fiq) + 1*sizeof(uint32_t) !=
> REGOFFS(lr_fiq));
> - BUILD_BUG_ON(REGOFFS(sp_irq) + 1*sizeof(uint32_t) !=
> REGOFFS(lr_irq));
> - BUILD_BUG_ON(REGOFFS(sp_svc) + 1*sizeof(uint32_t) !=
> REGOFFS(lr_svc));
> - BUILD_BUG_ON(REGOFFS(sp_abt) + 1*sizeof(uint32_t) !=
> REGOFFS(lr_abt));
> - BUILD_BUG_ON(REGOFFS(sp_und) + 1*sizeof(uint32_t) !=
> REGOFFS(lr_und));
> + BUILD_BUG_ON(REGOFFS(sp_fiq) + 1*sizeof(register_t) !=
> REGOFFS(lr_fiq));
> + BUILD_BUG_ON(REGOFFS(sp_irq) + 1*sizeof(register_t) !=
> REGOFFS(lr_irq));
> + BUILD_BUG_ON(REGOFFS(sp_svc) + 1*sizeof(register_t) !=
> REGOFFS(lr_svc));
> + BUILD_BUG_ON(REGOFFS(sp_abt) + 1*sizeof(register_t) !=
> REGOFFS(lr_abt));
> + BUILD_BUG_ON(REGOFFS(sp_und) + 1*sizeof(register_t) !=
> REGOFFS(lr_und));
> switch ( regs->cpsr & PSR_MODE_MASK )
> {
> case PSR_MODE_USR:
> @@ -320,11 +320,11 @@ static void show_guest_stack(struct cpu_user_regs *regs)
> printk("GUEST STACK GOES HERE\n");
> }
>
> -#define STACK_BEFORE_EXCEPTION(regs) ((uint32_t*)(regs)->sp)
> +#define STACK_BEFORE_EXCEPTION(regs) ((register_t*)(regs)->sp)
>
> static void show_trace(struct cpu_user_regs *regs)
> {
> - uint32_t *frame, next, addr, low, high;
> + register_t *frame, next, addr, low, high;
>
> printk("Xen call trace:\n ");
>
> @@ -332,7 +332,7 @@ static void show_trace(struct cpu_user_regs *regs)
> print_symbol(" %s\n ", regs->pc);
>
> /* Bounds for range of valid frame pointer. */
> - low = (uint32_t)(STACK_BEFORE_EXCEPTION(regs)/* - 2*/);
> + low = (register_t)(STACK_BEFORE_EXCEPTION(regs)/* - 2*/);
> high = (low & ~(STACK_SIZE - 1)) +
> (STACK_SIZE - sizeof(struct cpu_info));
>
> @@ -361,7 +361,7 @@ static void show_trace(struct cpu_user_regs *regs)
> break;
> {
> /* Ordinary stack frame. */
> - frame = (uint32_t *)next;
> + frame = (register_t *)next;
> next = frame[-1];
> addr = frame[0];
> }
> @@ -369,7 +369,7 @@ static void show_trace(struct cpu_user_regs *regs)
> printk("[<%p>]", _p(addr));
> print_symbol(" %s\n ", addr);
>
> - low = (uint32_t)&frame[1];
> + low = (register_t)&frame[1];
> }
>
> printk("\n");
> @@ -377,7 +377,7 @@ static void show_trace(struct cpu_user_regs *regs)
>
> void show_stack(struct cpu_user_regs *regs)
> {
> - uint32_t *stack = STACK_BEFORE_EXCEPTION(regs), addr;
> + register_t *stack = STACK_BEFORE_EXCEPTION(regs), addr;
> int i;
>
> if ( guest_mode(regs) )
> @@ -491,20 +491,22 @@ static arm_hypercall_t arm_hypercall_table[] = {
>
> static void do_debug_trap(struct cpu_user_regs *regs, unsigned int code)
> {
> - uint32_t reg, *r;
> + register_t *r;
> + uint32_t reg;
> uint32_t domid = current->domain->domain_id;
> switch ( code ) {
> case 0xe0 ... 0xef:
> reg = code - 0xe0;
> r = select_user_reg(regs, reg);
> - printk("DOM%d: R%d = %#010"PRIx32" at %#010"PRIx32"\n",
> + printk("DOM%d: R%d = 0x%"PRIregister" at 0x%"PRIvaddr"\n",
> domid, reg, *r, regs->pc);
> break;
> case 0xfd:
> - printk("DOM%d: Reached %#010"PRIx32"\n", domid, regs->pc);
> + printk("DOM%d: Reached %"PRIvaddr"\n", domid, regs->pc);
> break;
> case 0xfe:
> - printk("%c", (char)(regs->r0 & 0xff));
> + r = select_user_reg(regs, 0);
> + printk("%c", (char)(*r & 0xff));
> break;
> case 0xff:
> printk("DOM%d: DEBUG\n", domid);
> @@ -566,7 +568,7 @@ static void do_cp15_32(struct cpu_user_regs *regs,
> union hsr hsr)
> {
> struct hsr_cp32 cp32 = hsr.cp32;
> - uint32_t *r = select_user_reg(regs, cp32.reg);
> + uint32_t *r = (uint32_t*)select_user_reg(regs, cp32.reg);
>
> if ( !cp32.ccvalid ) {
> dprintk(XENLOG_ERR, "cp_15(32): need to handle invalid condition
> codes\n");
> @@ -612,7 +614,7 @@ static void do_cp15_32(struct cpu_user_regs *regs,
> BUG_ON(!vtimer_emulate(regs, hsr));
> break;
> default:
> - printk("%s p15, %d, r%d, cr%d, cr%d, %d @ %#08x\n",
> + printk("%s p15, %d, r%d, cr%d, cr%d, %d @ 0x%"PRIregister"\n",
> cp32.read ? "mrc" : "mcr",
> cp32.op1, cp32.reg, cp32.crn, cp32.crm, cp32.op2, regs->pc);
> panic("unhandled 32-bit CP15 access %#x\n", hsr.bits &
> HSR_CP32_REGS_MASK);
> @@ -642,7 +644,7 @@ static void do_cp15_64(struct cpu_user_regs *regs,
> BUG_ON(!vtimer_emulate(regs, hsr));
> break;
> default:
> - printk("%s p15, %d, r%d, r%d, cr%d @ %#08x\n",
> + printk("%s p15, %d, r%d, r%d, cr%d @ 0x%"PRIregister"\n",
> cp64.read ? "mrrc" : "mcrr",
> cp64.op1, cp64.reg1, cp64.reg2, cp64.crm, regs->pc);
> panic("unhandled 64-bit CP15 access %#x\n", hsr.bits &
> HSR_CP64_REGS_MASK);
> diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c
> index 39b9775..57147d5 100644
> --- a/xen/arch/arm/vgic.c
> +++ b/xen/arch/arm/vgic.c
> @@ -160,7 +160,7 @@ static int vgic_distr_mmio_read(struct vcpu *v,
> mmio_info_t *info)
> {
> struct hsr_dabt dabt = info->dabt;
> struct cpu_user_regs *regs = guest_cpu_user_regs();
> - uint32_t *r = select_user_reg(regs, dabt.reg);
> + register_t *r = select_user_reg(regs, dabt.reg);
> struct vgic_irq_rank *rank;
> int offset = (int)(info->gpa - VGIC_DISTR_BASE_ADDRESS);
> int gicd_reg = REG(offset);
> @@ -372,7 +372,7 @@ static int vgic_distr_mmio_write(struct vcpu *v,
> mmio_info_t *info)
> {
> struct hsr_dabt dabt = info->dabt;
> struct cpu_user_regs *regs = guest_cpu_user_regs();
> - uint32_t *r = select_user_reg(regs, dabt.reg);
> + register_t *r = select_user_reg(regs, dabt.reg);
> struct vgic_irq_rank *rank;
> int offset = (int)(info->gpa - VGIC_DISTR_BASE_ADDRESS);
> int gicd_reg = REG(offset);
> @@ -421,13 +421,13 @@ static int vgic_distr_mmio_write(struct vcpu *v,
> mmio_info_t *info)
>
> case GICD_ISPENDR ... GICD_ISPENDRN:
> if ( dabt.size != 0 && dabt.size != 2 ) goto bad_width;
> - printk("vGICD: unhandled %s write %#"PRIx32" to ISPENDR%d\n",
> + printk("vGICD: unhandled %s write %#"PRIregister" to ISPENDR%d\n",
> dabt.size ? "word" : "byte", *r, gicd_reg - GICD_ISPENDR);
> return 0;
>
> case GICD_ICPENDR ... GICD_ICPENDRN:
> if ( dabt.size != 0 && dabt.size != 2 ) goto bad_width;
> - printk("vGICD: unhandled %s write %#"PRIx32" to ICPENDR%d\n",
> + printk("vGICD: unhandled %s write %#"PRIregister" to ICPENDR%d\n",
> dabt.size ? "word" : "byte", *r, gicd_reg - GICD_ICPENDR);
> return 0;
>
> @@ -499,19 +499,19 @@ static int vgic_distr_mmio_write(struct vcpu *v,
> mmio_info_t *info)
>
> case GICD_SGIR:
> if ( dabt.size != 2 ) goto bad_width;
> - printk("vGICD: unhandled write %#"PRIx32" to ICFGR%d\n",
> + printk("vGICD: unhandled write %#"PRIregister" to ICFGR%d\n",
> *r, gicd_reg - GICD_ICFGR);
> return 0;
>
> case GICD_CPENDSGIR ... GICD_CPENDSGIRN:
> if ( dabt.size != 0 && dabt.size != 2 ) goto bad_width;
> - printk("vGICD: unhandled %s write %#"PRIx32" to ICPENDSGIR%d\n",
> + printk("vGICD: unhandled %s write %#"PRIregister" to ICPENDSGIR%d\n",
> dabt.size ? "word" : "byte", *r, gicd_reg - GICD_CPENDSGIR);
> return 0;
>
> case GICD_SPENDSGIR ... GICD_SPENDSGIRN:
> if ( dabt.size != 0 && dabt.size != 2 ) goto bad_width;
> - printk("vGICD: unhandled %s write %#"PRIx32" to ISPENDSGIR%d\n",
> + printk("vGICD: unhandled %s write %#"PRIregister" to ISPENDSGIR%d\n",
> dabt.size ? "word" : "byte", *r, gicd_reg - GICD_SPENDSGIR);
> return 0;
>
> @@ -537,13 +537,13 @@ static int vgic_distr_mmio_write(struct vcpu *v,
> mmio_info_t *info)
> goto write_ignore;
>
> default:
> - printk("vGICD: unhandled write r%d=%"PRIx32" offset %#08x\n",
> + printk("vGICD: unhandled write r%d=%"PRIregister" offset %#08x\n",
> dabt.reg, *r, offset);
> return 0;
> }
>
> bad_width:
> - printk("vGICD: bad write width %d r%d=%"PRIx32" offset %#08x\n",
> + printk("vGICD: bad write width %d r%d=%"PRIregister" offset %#08x\n",
> dabt.size, dabt.reg, *r, offset);
> domain_crash_synchronous();
> return 0;
> diff --git a/xen/arch/arm/vpl011.c b/xen/arch/arm/vpl011.c
> index 7dcee90..db5094e 100644
> --- a/xen/arch/arm/vpl011.c
> +++ b/xen/arch/arm/vpl011.c
> @@ -92,7 +92,7 @@ static int uart0_mmio_read(struct vcpu *v, mmio_info_t
> *info)
> {
> struct hsr_dabt dabt = info->dabt;
> struct cpu_user_regs *regs = guest_cpu_user_regs();
> - uint32_t *r = select_user_reg(regs, dabt.reg);
> + register_t *r = select_user_reg(regs, dabt.reg);
> int offset = (int)(info->gpa - UART0_START);
>
> switch ( offset )
> @@ -114,7 +114,7 @@ static int uart0_mmio_write(struct vcpu *v, mmio_info_t
> *info)
> {
> struct hsr_dabt dabt = info->dabt;
> struct cpu_user_regs *regs = guest_cpu_user_regs();
> - uint32_t *r = select_user_reg(regs, dabt.reg);
> + register_t *r = select_user_reg(regs, dabt.reg);
> int offset = (int)(info->gpa - UART0_START);
>
> switch ( offset )
> @@ -127,7 +127,7 @@ static int uart0_mmio_write(struct vcpu *v, mmio_info_t
> *info)
> /* Silently ignore */
> return 1;
> default:
> - printk("VPL011: unhandled write r%d=%"PRIx32" offset %#08x\n",
> + printk("VPL011: unhandled write r%d=%"PRIregister" offset %#08x\n",
> dabt.reg, *r, offset);
> domain_crash_synchronous();
> }
> diff --git a/xen/arch/arm/vtimer.c b/xen/arch/arm/vtimer.c
> index 3616879..288c27e 100644
> --- a/xen/arch/arm/vtimer.c
> +++ b/xen/arch/arm/vtimer.c
> @@ -93,7 +93,7 @@ static int vtimer_emulate_32(struct cpu_user_regs *regs,
> union hsr hsr)
> {
> struct vcpu *v = current;
> struct hsr_cp32 cp32 = hsr.cp32;
> - uint32_t *r = select_user_reg(regs, cp32.reg);
> + uint32_t *r = (uint32_t *)select_user_reg(regs, cp32.reg);
> s_time_t now;
>
> switch ( hsr.bits & HSR_CP32_REGS_MASK )
> @@ -145,8 +145,8 @@ static int vtimer_emulate_64(struct cpu_user_regs *regs,
> union hsr hsr)
> {
> struct vcpu *v = current;
> struct hsr_cp64 cp64 = hsr.cp64;
> - uint32_t *r1 = select_user_reg(regs, cp64.reg1);
> - uint32_t *r2 = select_user_reg(regs, cp64.reg2);
> + uint32_t *r1 = (uint32_t *)select_user_reg(regs, cp64.reg1);
> + uint32_t *r2 = (uint32_t *)select_user_reg(regs, cp64.reg2);
> uint64_t ticks;
> s_time_t now;
>
> diff --git a/xen/include/asm-arm/regs.h b/xen/include/asm-arm/regs.h
> index 7486944..a723f92 100644
> --- a/xen/include/asm-arm/regs.h
> +++ b/xen/include/asm-arm/regs.h
> @@ -34,7 +34,7 @@
> * Returns a pointer to the given register value in regs, taking the
> * processor mode (CPSR) into account.
> */
> -extern uint32_t *select_user_reg(struct cpu_user_regs *regs, int reg);
> +extern register_t *select_user_reg(struct cpu_user_regs *regs, int reg);
>
> #endif /* __ARM_REGS_H__ */
> /*
> diff --git a/xen/include/asm-arm/types.h b/xen/include/asm-arm/types.h
> index d3e16d8..9ca32f1 100644
> --- a/xen/include/asm-arm/types.h
> +++ b/xen/include/asm-arm/types.h
> @@ -41,6 +41,8 @@ typedef u32 vaddr_t;
> typedef u64 paddr_t;
> #define INVALID_PADDR (~0ULL)
> #define PRIpaddr "016llx"
> +typedef u32 register_t;
> +#define PRIregister "x"
> #elif defined (CONFIG_ARM_64)
> typedef signed long s64;
> typedef unsigned long u64;
> @@ -49,6 +51,8 @@ typedef u64 vaddr_t;
> typedef u64 paddr_t;
> #define INVALID_PADDR (~0UL)
> #define PRIpaddr "016lx"
> +typedef u64 register_t;
> +#define PRIregister "lx"
> #endif
>
> typedef unsigned long size_t;
> --
> 1.7.2.5
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |