* [RFC PATCH 1/15]: PVH xen: turn gdb_frames/gdt_ents into union
@ 2013-01-12 1:25 Mukesh Rathor
2013-01-14 11:18 ` Jan Beulich
2013-01-24 14:29 ` Tim Deegan
0 siblings, 2 replies; 11+ messages in thread
From: Mukesh Rathor @ 2013-01-12 1:25 UTC (permalink / raw)
To: Xen-devel
PVH only needs gdtaddr and gdtsz, so a union is created. There is no
functional code change in this patch.
Signed-off-by: Mukesh Rathor <mukesh.rathor@oracle.com>
diff -r bf249cd5f2c1 -r 278d7a933d88 tools/libxc/xc_domain_restore.c
--- a/tools/libxc/xc_domain_restore.c Tue Oct 30 18:12:11 2012 +0000
+++ b/tools/libxc/xc_domain_restore.c Fri Jan 11 16:19:40 2013 -0800
@@ -1933,15 +1933,15 @@ int xc_domain_restore(xc_interface *xch,
munmap(start_info, PAGE_SIZE);
}
/* Uncanonicalise each GDT frame number. */
- if ( GET_FIELD(ctxt, gdt_ents) > 8192 )
+ if ( GET_FIELD(ctxt, u.pv.gdt_ents) > 8192 )
{
ERROR("GDT entry count out of range");
goto out;
}
- for ( j = 0; (512*j) < GET_FIELD(ctxt, gdt_ents); j++ )
+ for ( j = 0; (512*j) < GET_FIELD(ctxt, u.pv.gdt_ents); j++ )
{
- pfn = GET_FIELD(ctxt, gdt_frames[j]);
+ pfn = GET_FIELD(ctxt, u.pv.gdt_frames[j]);
if ( (pfn >= dinfo->p2m_size) ||
(pfn_type[pfn] != XEN_DOMCTL_PFINFO_NOTAB) )
{
@@ -1949,7 +1949,7 @@ int xc_domain_restore(xc_interface *xch,
j, (unsigned long)pfn);
goto out;
}
- SET_FIELD(ctxt, gdt_frames[j], ctx->p2m[pfn]);
+ SET_FIELD(ctxt, u.pv.gdt_frames[j], ctx->p2m[pfn]);
}
/* Uncanonicalise the page table base pointer. */
pfn = UNFOLD_CR3(GET_FIELD(ctxt, ctrlreg[3]));
diff -r bf249cd5f2c1 -r 278d7a933d88 tools/libxc/xc_domain_save.c
--- a/tools/libxc/xc_domain_save.c Tue Oct 30 18:12:11 2012 +0000
+++ b/tools/libxc/xc_domain_save.c Fri Jan 11 16:19:40 2013 -0800
@@ -1889,15 +1889,15 @@ int xc_domain_save(xc_interface *xch, in
}
/* Canonicalise each GDT frame number. */
- for ( j = 0; (512*j) < GET_FIELD(&ctxt, gdt_ents); j++ )
+ for ( j = 0; (512*j) < GET_FIELD(&ctxt, u.pv.gdt_ents); j++ )
{
- mfn = GET_FIELD(&ctxt, gdt_frames[j]);
+ mfn = GET_FIELD(&ctxt, u.pv.gdt_frames[j]);
if ( !MFN_IS_IN_PSEUDOPHYS_MAP(mfn) )
{
ERROR("GDT frame is not in range of pseudophys map");
goto out;
}
- SET_FIELD(&ctxt, gdt_frames[j], mfn_to_pfn(mfn));
+ SET_FIELD(&ctxt, u.pv.gdt_frames[j], mfn_to_pfn(mfn));
}
/* Canonicalise the page table base pointer. */
diff -r bf249cd5f2c1 -r 278d7a933d88 xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c Tue Oct 30 18:12:11 2012 +0000
+++ b/xen/arch/x86/domain.c Fri Jan 11 16:19:40 2013 -0800
@@ -811,8 +811,8 @@ int arch_set_info_guest(
}
for ( i = 0; i < ARRAY_SIZE(v->arch.pv_vcpu.gdt_frames); ++i )
- fail |= v->arch.pv_vcpu.gdt_frames[i] != c(gdt_frames[i]);
- fail |= v->arch.pv_vcpu.gdt_ents != c(gdt_ents);
+ fail |= v->arch.pv_vcpu.gdt_frames[i] != c(u.pv.gdt_frames[i]);
+ fail |= v->arch.pv_vcpu.gdt_ents != c(u.pv.gdt_ents);
fail |= v->arch.pv_vcpu.ldt_base != c(ldt_base);
fail |= v->arch.pv_vcpu.ldt_ents != c(ldt_ents);
@@ -861,17 +861,17 @@ int arch_set_info_guest(
d->vm_assist = c(vm_assist);
if ( !compat )
- rc = (int)set_gdt(v, c.nat->gdt_frames, c.nat->gdt_ents);
+ rc = (int)set_gdt(v, c.nat->u.pv.gdt_frames, c.nat->u.pv.gdt_ents);
else
{
unsigned long gdt_frames[ARRAY_SIZE(v->arch.pv_vcpu.gdt_frames)];
- unsigned int n = (c.cmp->gdt_ents + 511) / 512;
+ unsigned int n = (c.cmp->u.pv.gdt_ents + 511) / 512;
if ( n > ARRAY_SIZE(v->arch.pv_vcpu.gdt_frames) )
return -EINVAL;
for ( i = 0; i < n; ++i )
- gdt_frames[i] = c.cmp->gdt_frames[i];
- rc = (int)set_gdt(v, gdt_frames, c.cmp->gdt_ents);
+ gdt_frames[i] = c.cmp->u.pv.gdt_frames[i];
+ rc = (int)set_gdt(v, gdt_frames, c.cmp->u.pv.gdt_ents);
}
if ( rc != 0 )
return rc;
diff -r bf249cd5f2c1 -r 278d7a933d88 xen/arch/x86/domctl.c
--- a/xen/arch/x86/domctl.c Tue Oct 30 18:12:11 2012 +0000
+++ b/xen/arch/x86/domctl.c Fri Jan 11 16:19:40 2013 -0800
@@ -1651,12 +1651,12 @@ void arch_get_info_guest(struct vcpu *v,
c(ldt_base = v->arch.pv_vcpu.ldt_base);
c(ldt_ents = v->arch.pv_vcpu.ldt_ents);
for ( i = 0; i < ARRAY_SIZE(v->arch.pv_vcpu.gdt_frames); ++i )
- c(gdt_frames[i] = v->arch.pv_vcpu.gdt_frames[i]);
- BUILD_BUG_ON(ARRAY_SIZE(c.nat->gdt_frames) !=
- ARRAY_SIZE(c.cmp->gdt_frames));
- for ( ; i < ARRAY_SIZE(c.nat->gdt_frames); ++i )
- c(gdt_frames[i] = 0);
- c(gdt_ents = v->arch.pv_vcpu.gdt_ents);
+ c(u.pv.gdt_frames[i] = v->arch.pv_vcpu.gdt_frames[i]);
+ BUILD_BUG_ON(ARRAY_SIZE(c.nat->u.pv.gdt_frames) !=
+ ARRAY_SIZE(c.cmp->u.pv.gdt_frames));
+ for ( ; i < ARRAY_SIZE(c.nat->u.pv.gdt_frames); ++i )
+ c(u.pv.gdt_frames[i] = 0);
+ c(u.pv.gdt_ents = v->arch.pv_vcpu.gdt_ents);
c(kernel_ss = v->arch.pv_vcpu.kernel_ss);
c(kernel_sp = v->arch.pv_vcpu.kernel_sp);
for ( i = 0; i < ARRAY_SIZE(v->arch.pv_vcpu.ctrlreg); ++i )
diff -r bf249cd5f2c1 -r 278d7a933d88 xen/include/public/arch-x86/xen.h
--- a/xen/include/public/arch-x86/xen.h Tue Oct 30 18:12:11 2012 +0000
+++ b/xen/include/public/arch-x86/xen.h Fri Jan 11 16:19:40 2013 -0800
@@ -157,7 +157,16 @@ struct vcpu_guest_context {
struct cpu_user_regs user_regs; /* User-level CPU registers */
struct trap_info trap_ctxt[256]; /* Virtual IDT */
unsigned long ldt_base, ldt_ents; /* LDT (linear address, # ents) */
- unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) */
+ union {
+ struct {
+ /* GDT (machine frames, # ents) */
+ unsigned long gdt_frames[16], gdt_ents;
+ } pv;
+ struct {
+ /* PVH: GDTR addr and size */
+ unsigned long gdtaddr, gdtsz;
+ } pvh;
+ } u;
unsigned long kernel_ss, kernel_sp; /* Virtual TSS (only SS1/SP1) */
/* NB. User pagetable on x86/64 is placed in ctrlreg[1]. */
unsigned long ctrlreg[8]; /* CR0-CR7 (control registers) */
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC PATCH 1/15]: PVH xen: turn gdb_frames/gdt_ents into union
2013-01-12 1:25 [RFC PATCH 1/15]: PVH xen: turn gdb_frames/gdt_ents into union Mukesh Rathor
@ 2013-01-14 11:18 ` Jan Beulich
2013-01-15 0:45 ` Mukesh Rathor
2013-01-24 14:29 ` Tim Deegan
1 sibling, 1 reply; 11+ messages in thread
From: Jan Beulich @ 2013-01-14 11:18 UTC (permalink / raw)
To: Mukesh Rathor; +Cc: xen-devel
>>> On 12.01.13 at 02:25, Mukesh Rathor <mukesh.rathor@oracle.com> wrote:
> --- a/xen/include/public/arch-x86/xen.h Tue Oct 30 18:12:11 2012 +0000
> +++ b/xen/include/public/arch-x86/xen.h Fri Jan 11 16:19:40 2013 -0800
> @@ -157,7 +157,16 @@ struct vcpu_guest_context {
> struct cpu_user_regs user_regs; /* User-level CPU registers */
> struct trap_info trap_ctxt[256]; /* Virtual IDT */
> unsigned long ldt_base, ldt_ents; /* LDT (linear address, # ents) */
> - unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) */
> + union {
> + struct {
> + /* GDT (machine frames, # ents) */
> + unsigned long gdt_frames[16], gdt_ents;
> + } pv;
> + struct {
> + /* PVH: GDTR addr and size */
> + unsigned long gdtaddr, gdtsz;
> + } pvh;
> + } u;
This, being a public header, needs a __XEN_INTERFACE_VERSION__
guard so that consumers updating the header (without updating
their interface version) would still build.
Jan
> unsigned long kernel_ss, kernel_sp; /* Virtual TSS (only SS1/SP1) */
> /* NB. User pagetable on x86/64 is placed in ctrlreg[1]. */
> unsigned long ctrlreg[8]; /* CR0-CR7 (control registers)
> */
>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC PATCH 1/15]: PVH xen: turn gdb_frames/gdt_ents into union
2013-01-14 11:18 ` Jan Beulich
@ 2013-01-15 0:45 ` Mukesh Rathor
0 siblings, 0 replies; 11+ messages in thread
From: Mukesh Rathor @ 2013-01-15 0:45 UTC (permalink / raw)
To: Jan Beulich; +Cc: xen-devel
On Mon, 14 Jan 2013 11:18:55 +0000
"Jan Beulich" <JBeulich@suse.com> wrote:
> >>> On 12.01.13 at 02:25, Mukesh Rathor <mukesh.rathor@oracle.com>
> >>> wrote:
> > --- a/xen/include/public/arch-x86/xen.h Tue Oct 30 18:12:11
> > 2012 +0000 +++ b/xen/include/public/arch-x86/xen.h Fri Jan
> > 11 16:19:40 2013 -0800 @@ -157,7 +157,16 @@ struct
> > vcpu_guest_context { struct cpu_user_regs user_regs; /*
> > User-level CPU registers */ struct trap_info
> > trap_ctxt[256]; /* Virtual IDT */ unsigned
> > long ldt_base, ldt_ents; /* LDT (linear address, # ents) */
> > - unsigned long gdt_frames[16], gdt_ents; /* GDT (machine
> > frames, # ents) */
> > + union {
> > + struct {
> > + /* GDT (machine frames, # ents) */
> > + unsigned long gdt_frames[16], gdt_ents;
> > + } pv;
> > + struct {
> > + /* PVH: GDTR addr and size */
> > + unsigned long gdtaddr, gdtsz;
> > + } pvh;
> > + } u;
>
> This, being a public header, needs a __XEN_INTERFACE_VERSION__
> guard so that consumers updating the header (without updating
> their interface version) would still build.
Done. Thanks.
+#if __XEN_INTERFACE_VERSION__ < 0x00040300
+ unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) */
+#else
union {
struct {
/* GDT (machine frames, # ents) */
@@ -167,6 +170,7 @@ struct vcpu_guest_context {
unsigned long gdtaddr, gdtsz;
} pvh;
} u;
+#endif
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC PATCH 1/15]: PVH xen: turn gdb_frames/gdt_ents into union
2013-01-12 1:25 [RFC PATCH 1/15]: PVH xen: turn gdb_frames/gdt_ents into union Mukesh Rathor
2013-01-14 11:18 ` Jan Beulich
@ 2013-01-24 14:29 ` Tim Deegan
2013-01-24 15:37 ` Jan Beulich
2013-01-25 2:04 ` Mukesh Rathor
1 sibling, 2 replies; 11+ messages in thread
From: Tim Deegan @ 2013-01-24 14:29 UTC (permalink / raw)
To: Mukesh Rathor; +Cc: Xen-devel
At 17:25 -0800 on 11 Jan (1357925122), Mukesh Rathor wrote:
> diff -r bf249cd5f2c1 -r 278d7a933d88 xen/include/public/arch-x86/xen.h
> --- a/xen/include/public/arch-x86/xen.h Tue Oct 30 18:12:11 2012 +0000
> +++ b/xen/include/public/arch-x86/xen.h Fri Jan 11 16:19:40 2013 -0800
> @@ -157,7 +157,16 @@ struct vcpu_guest_context {
> struct cpu_user_regs user_regs; /* User-level CPU registers */
> struct trap_info trap_ctxt[256]; /* Virtual IDT */
> unsigned long ldt_base, ldt_ents; /* LDT (linear address, # ents) */
> - unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) */
> + union {
> + struct {
> + /* GDT (machine frames, # ents) */
> + unsigned long gdt_frames[16], gdt_ents;
> + } pv;
> + struct {
> + /* PVH: GDTR addr and size */
> + unsigned long gdtaddr, gdtsz;
The GDT size is always 16 bits; I'd be inclined to make the addr
explicitly 64 bits too, to help out 32-bit toolstacks.
> + } pvh;
> + } u;
Also, would you consider renaming this as:
union {
struct {
/* GDT (machine frames, # ents) */
unsigned long frames[16], ents;
} pv;
struct {
/* PVH: GDTR addr and size */
unsigned long addr, sz;
} pvh;
} gdt;
? Then the calling code looks a little nicer.
Cheers,
Tim.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC PATCH 1/15]: PVH xen: turn gdb_frames/gdt_ents into union
2013-01-24 14:29 ` Tim Deegan
@ 2013-01-24 15:37 ` Jan Beulich
2013-01-24 15:45 ` Tim Deegan
2013-01-25 2:04 ` Mukesh Rathor
1 sibling, 1 reply; 11+ messages in thread
From: Jan Beulich @ 2013-01-24 15:37 UTC (permalink / raw)
To: Tim Deegan; +Cc: xen-devel
>>> On 24.01.13 at 15:29, Tim Deegan <tim@xen.org> wrote:
> At 17:25 -0800 on 11 Jan (1357925122), Mukesh Rathor wrote:
>> diff -r bf249cd5f2c1 -r 278d7a933d88 xen/include/public/arch-x86/xen.h
>> --- a/xen/include/public/arch-x86/xen.h Tue Oct 30 18:12:11 2012 +0000
>> +++ b/xen/include/public/arch-x86/xen.h Fri Jan 11 16:19:40 2013 -0800
>> @@ -157,7 +157,16 @@ struct vcpu_guest_context {
>> struct cpu_user_regs user_regs; /* User-level CPU registers
> */
>> struct trap_info trap_ctxt[256]; /* Virtual IDT
> */
>> unsigned long ldt_base, ldt_ents; /* LDT (linear address, # ents)
> */
>> - unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents)
> */
>> + union {
>> + struct {
>> + /* GDT (machine frames, # ents) */
>> + unsigned long gdt_frames[16], gdt_ents;
>> + } pv;
>> + struct {
>> + /* PVH: GDTR addr and size */
>> + unsigned long gdtaddr, gdtsz;
>
> The GDT size is always 16 bits; I'd be inclined to make the addr
> explicitly 64 bits too, to help out 32-bit toolstacks.
>
>> + } pvh;
>> + } u;
>
> Also, would you consider renaming this as:
>
> union {
> struct {
> /* GDT (machine frames, # ents) */
> unsigned long frames[16], ents;
> } pv;
> struct {
> /* PVH: GDTR addr and size */
> unsigned long addr, sz;
> } pvh;
> } gdt;
>
> ? Then the calling code looks a little nicer.
Did you overlook that it is a public header that gets modified
here?
Jan
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC PATCH 1/15]: PVH xen: turn gdb_frames/gdt_ents into union
2013-01-24 15:37 ` Jan Beulich
@ 2013-01-24 15:45 ` Tim Deegan
2013-01-24 15:54 ` Jan Beulich
0 siblings, 1 reply; 11+ messages in thread
From: Tim Deegan @ 2013-01-24 15:45 UTC (permalink / raw)
To: Jan Beulich; +Cc: xen-devel
At 15:37 +0000 on 24 Jan (1359041870), Jan Beulich wrote:
> >>> On 24.01.13 at 15:29, Tim Deegan <tim@xen.org> wrote:
> > At 17:25 -0800 on 11 Jan (1357925122), Mukesh Rathor wrote:
> >> diff -r bf249cd5f2c1 -r 278d7a933d88 xen/include/public/arch-x86/xen.h
> >> --- a/xen/include/public/arch-x86/xen.h Tue Oct 30 18:12:11 2012 +0000
> >> +++ b/xen/include/public/arch-x86/xen.h Fri Jan 11 16:19:40 2013 -0800
> >> @@ -157,7 +157,16 @@ struct vcpu_guest_context {
> >> struct cpu_user_regs user_regs; /* User-level CPU registers
> > */
> >> struct trap_info trap_ctxt[256]; /* Virtual IDT
> > */
> >> unsigned long ldt_base, ldt_ents; /* LDT (linear address, # ents)
> > */
> >> - unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents)
> > */
> >> + union {
> >> + struct {
> >> + /* GDT (machine frames, # ents) */
> >> + unsigned long gdt_frames[16], gdt_ents;
> >> + } pv;
> >> + struct {
> >> + /* PVH: GDTR addr and size */
> >> + unsigned long gdtaddr, gdtsz;
> >
> > The GDT size is always 16 bits; I'd be inclined to make the addr
> > explicitly 64 bits too, to help out 32-bit toolstacks.
> >
> >> + } pvh;
> >> + } u;
> >
> > Also, would you consider renaming this as:
> >
> > union {
> > struct {
> > /* GDT (machine frames, # ents) */
> > unsigned long frames[16], ents;
> > } pv;
> > struct {
> > /* PVH: GDTR addr and size */
> > unsigned long addr, sz;
> > } pvh;
> > } gdt;
> >
> > ? Then the calling code looks a little nicer.
>
> Did you overlook that it is a public header that gets modified
> here?
No, but you already pointed that out so I didn't feel the need to. I'm
just suggesting that if we're going to change the naming here, we can
change it to something nicer.
Tim.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC PATCH 1/15]: PVH xen: turn gdb_frames/gdt_ents into union
2013-01-24 15:45 ` Tim Deegan
@ 2013-01-24 15:54 ` Jan Beulich
2013-01-24 16:18 ` Tim Deegan
0 siblings, 1 reply; 11+ messages in thread
From: Jan Beulich @ 2013-01-24 15:54 UTC (permalink / raw)
To: Tim Deegan; +Cc: xen-devel
>>> On 24.01.13 at 16:45, Tim Deegan <tim@xen.org> wrote:
> At 15:37 +0000 on 24 Jan (1359041870), Jan Beulich wrote:
>> >>> On 24.01.13 at 15:29, Tim Deegan <tim@xen.org> wrote:
>> > At 17:25 -0800 on 11 Jan (1357925122), Mukesh Rathor wrote:
>> >> diff -r bf249cd5f2c1 -r 278d7a933d88 xen/include/public/arch-x86/xen.h
>> >> --- a/xen/include/public/arch-x86/xen.h Tue Oct 30 18:12:11 2012 +0000
>> >> +++ b/xen/include/public/arch-x86/xen.h Fri Jan 11 16:19:40 2013 -0800
>> >> @@ -157,7 +157,16 @@ struct vcpu_guest_context {
>> >> struct cpu_user_regs user_regs; /* User-level CPU registers
>
>> > */
>> >> struct trap_info trap_ctxt[256]; /* Virtual IDT
>
>> > */
>> >> unsigned long ldt_base, ldt_ents; /* LDT (linear address, #
> ents)
>> > */
>> >> - unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents)
>
>> > */
>> >> + union {
>> >> + struct {
>> >> + /* GDT (machine frames, # ents) */
>> >> + unsigned long gdt_frames[16], gdt_ents;
>> >> + } pv;
>> >> + struct {
>> >> + /* PVH: GDTR addr and size */
>> >> + unsigned long gdtaddr, gdtsz;
>> >
>> > The GDT size is always 16 bits; I'd be inclined to make the addr
>> > explicitly 64 bits too, to help out 32-bit toolstacks.
>> >
>> >> + } pvh;
>> >> + } u;
>> >
>> > Also, would you consider renaming this as:
>> >
>> > union {
>> > struct {
>> > /* GDT (machine frames, # ents) */
>> > unsigned long frames[16], ents;
>> > } pv;
>> > struct {
>> > /* PVH: GDTR addr and size */
>> > unsigned long addr, sz;
>> > } pvh;
>> > } gdt;
>> >
>> > ? Then the calling code looks a little nicer.
>>
>> Did you overlook that it is a public header that gets modified
>> here?
>
> No, but you already pointed that out so I didn't feel the need to. I'm
> just suggesting that if we're going to change the naming here, we can
> change it to something nicer.
But we shouldn't change names or types here arbitrarily. It's
one thing if something truly needs fixing, but another if it's merely
cosmetic.
Jan
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC PATCH 1/15]: PVH xen: turn gdb_frames/gdt_ents into union
2013-01-24 15:54 ` Jan Beulich
@ 2013-01-24 16:18 ` Tim Deegan
0 siblings, 0 replies; 11+ messages in thread
From: Tim Deegan @ 2013-01-24 16:18 UTC (permalink / raw)
To: Jan Beulich; +Cc: xen-devel
At 15:54 +0000 on 24 Jan (1359042878), Jan Beulich wrote:
> >>> On 24.01.13 at 16:45, Tim Deegan <tim@xen.org> wrote:
> > At 15:37 +0000 on 24 Jan (1359041870), Jan Beulich wrote:
> >> >>> On 24.01.13 at 15:29, Tim Deegan <tim@xen.org> wrote:
> >> > At 17:25 -0800 on 11 Jan (1357925122), Mukesh Rathor wrote:
> >> >> diff -r bf249cd5f2c1 -r 278d7a933d88 xen/include/public/arch-x86/xen.h
> >> >> --- a/xen/include/public/arch-x86/xen.h Tue Oct 30 18:12:11 2012 +0000
> >> >> +++ b/xen/include/public/arch-x86/xen.h Fri Jan 11 16:19:40 2013 -0800
> >> >> @@ -157,7 +157,16 @@ struct vcpu_guest_context {
> >> >> struct cpu_user_regs user_regs; /* User-level CPU registers
> >
> >> > */
> >> >> struct trap_info trap_ctxt[256]; /* Virtual IDT
> >
> >> > */
> >> >> unsigned long ldt_base, ldt_ents; /* LDT (linear address, #
> > ents)
> >> > */
> >> >> - unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents)
> >
> >> > */
> >> >> + union {
> >> >> + struct {
> >> >> + /* GDT (machine frames, # ents) */
> >> >> + unsigned long gdt_frames[16], gdt_ents;
> >> >> + } pv;
> >> >> + struct {
> >> >> + /* PVH: GDTR addr and size */
> >> >> + unsigned long gdtaddr, gdtsz;
> >> >
> >> > The GDT size is always 16 bits; I'd be inclined to make the addr
> >> > explicitly 64 bits too, to help out 32-bit toolstacks.
> >> >
> >> >> + } pvh;
> >> >> + } u;
> >> >
> >> > Also, would you consider renaming this as:
> >> >
> >> > union {
> >> > struct {
> >> > /* GDT (machine frames, # ents) */
> >> > unsigned long frames[16], ents;
> >> > } pv;
> >> > struct {
> >> > /* PVH: GDTR addr and size */
> >> > unsigned long addr, sz;
> >> > } pvh;
> >> > } gdt;
> >> >
> >> > ? Then the calling code looks a little nicer.
> >>
> >> Did you overlook that it is a public header that gets modified
> >> here?
> >
> > No, but you already pointed that out so I didn't feel the need to. I'm
> > just suggesting that if we're going to change the naming here, we can
> > change it to something nicer.
>
> But we shouldn't change names or types here arbitrarily. It's
> one thing if something truly needs fixing, but another if it's merely
> cosmetic.
My comment about types was about a field that is added _in this patch_!
Likewise the renaming -- this patch already requires callers to
s/gdt_frames/u.pv.gdt_frames/g. Making it so users have to do
s/gdt_frames/gdt.pv.frames/g doesn't make that any worse.
Tim.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC PATCH 1/15]: PVH xen: turn gdb_frames/gdt_ents into union
2013-01-24 14:29 ` Tim Deegan
2013-01-24 15:37 ` Jan Beulich
@ 2013-01-25 2:04 ` Mukesh Rathor
2013-01-25 9:38 ` Tim Deegan
1 sibling, 1 reply; 11+ messages in thread
From: Mukesh Rathor @ 2013-01-25 2:04 UTC (permalink / raw)
To: Tim Deegan; +Cc: Xen-devel
On Thu, 24 Jan 2013 14:29:32 +0000
Tim Deegan <tim@xen.org> wrote:
> At 17:25 -0800 on 11 Jan (1357925122), Mukesh Rathor wrote:
> > diff -r bf249cd5f2c1 -r 278d7a933d88
> > xen/include/public/arch-x86/xen.h ---
> > a/xen/include/public/arch-x86/xen.h Tue Oct 30 18:12:11 2012
> > +0000 +++ b/xen/include/public/arch-x86/xen.h Fri Jan 11
> > 16:19:40 2013 -0800 @@ -157,7 +157,16 @@ struct vcpu_guest_context
> > { struct cpu_user_regs user_regs; /* User-level CPU
> > registers */ struct trap_info trap_ctxt[256]; /* Virtual
> > IDT */ unsigned long ldt_base, ldt_ents; /*
> > LDT (linear address, # ents) */
> > - unsigned long gdt_frames[16], gdt_ents; /* GDT (machine
> > frames, # ents) */
> > + union {
> > + struct {
> > + /* GDT (machine frames, # ents) */
> > + unsigned long gdt_frames[16], gdt_ents;
> > + } pv;
> > + struct {
> > + /* PVH: GDTR addr and size */
> > + unsigned long gdtaddr, gdtsz;
>
> The GDT size is always 16 bits; I'd be inclined to make the addr
> explicitly 64 bits too, to help out 32-bit toolstacks.
>
> > + } pvh;
> > + } u;
>
> Also, would you consider renaming this as:
>
> union {
> struct {
> /* GDT (machine frames, # ents) */
> unsigned long frames[16], ents;
> } pv;
> struct {
> /* PVH: GDTR addr and size */
> unsigned long addr, sz;
> } pvh;
> } gdt;
>
> ? Then the calling code looks a little nicer.
Initially, I had it called gdt, but during code review of linux
patch (exact same change there), it was suggested to change it. Also,
I really dont' like field names likes "addr" or "sz". I really don't
wanna grep or cscope for them.
Thanks
Mukesh
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC PATCH 1/15]: PVH xen: turn gdb_frames/gdt_ents into union
2013-01-25 2:04 ` Mukesh Rathor
@ 2013-01-25 9:38 ` Tim Deegan
2013-01-25 10:23 ` Jan Beulich
0 siblings, 1 reply; 11+ messages in thread
From: Tim Deegan @ 2013-01-25 9:38 UTC (permalink / raw)
To: Mukesh Rathor; +Cc: Xen-devel
At 18:04 -0800 on 24 Jan (1359050661), Mukesh Rathor wrote:
> Initially, I had it called gdt, but during code review of linux
> patch (exact same change there), it was suggested to change it.
Huh. Fair enough, I guess.
> Also, I really dont' like field names likes "addr" or "sz". I really
> don't wanna grep or cscope for them.
I'm fairly strongly in the other camp -- I almost never find myself
grepping for leaf-node names, but having unions called 'u' and repeating
type or scope information in names both annoy the crap out of me. :)
Anyway, it seems like Jan agrees with you on the naming, so I'll let it
slide. Can I suggest you call the new fields gdt_addr and gdt_sz, to
match the underscores in the existing fields?
Tim.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFC PATCH 1/15]: PVH xen: turn gdb_frames/gdt_ents into union
2013-01-25 9:38 ` Tim Deegan
@ 2013-01-25 10:23 ` Jan Beulich
0 siblings, 0 replies; 11+ messages in thread
From: Jan Beulich @ 2013-01-25 10:23 UTC (permalink / raw)
To: Mukesh Rathor, Tim Deegan; +Cc: xen-devel
>>> On 25.01.13 at 10:38, Tim Deegan <tim@xen.org> wrote:
> At 18:04 -0800 on 24 Jan (1359050661), Mukesh Rathor wrote:
>> Also, I really dont' like field names likes "addr" or "sz". I really
>> don't wanna grep or cscope for them.
>
> I'm fairly strongly in the other camp -- I almost never find myself
> grepping for leaf-node names, but having unions called 'u' and repeating
> type or scope information in names both annoy the crap out of me. :)
>
> Anyway, it seems like Jan agrees with you on the naming, so I'll let it
> slide. Can I suggest you call the new fields gdt_addr and gdt_sz, to
> match the underscores in the existing fields?
Actually I don't really. I prefer short field names (namely
without them repeating containing structure's names), and
consider the ones with extra prefixes or suffixes relics from
the K&R days.
As to "u" for unions, I think that's the closest we can get to
short of not naming them at all (which C89 doesn' allow). I
would even be tempted to introduce an abstraction to make
them unnamed conditionally (i.e. when a capable compiler is
being detected).
Jan
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2013-01-25 10:23 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-01-12 1:25 [RFC PATCH 1/15]: PVH xen: turn gdb_frames/gdt_ents into union Mukesh Rathor
2013-01-14 11:18 ` Jan Beulich
2013-01-15 0:45 ` Mukesh Rathor
2013-01-24 14:29 ` Tim Deegan
2013-01-24 15:37 ` Jan Beulich
2013-01-24 15:45 ` Tim Deegan
2013-01-24 15:54 ` Jan Beulich
2013-01-24 16:18 ` Tim Deegan
2013-01-25 2:04 ` Mukesh Rathor
2013-01-25 9:38 ` Tim Deegan
2013-01-25 10:23 ` Jan Beulich
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.