|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [V10 PATCH 12/23] PVH xen: Support privileged op emulation for PVH
On Thu, 8 Aug 2013 15:18:56 +0100
George Dunlap <George.Dunlap@xxxxxxxxxxxxx> wrote:
> On Thu, Aug 8, 2013 at 2:59 AM, Mukesh Rathor
> <mukesh.rathor@xxxxxxxxxx> wrote:
> > On Wed, 7 Aug 2013 14:49:50 +0100
> > George Dunlap <dunlapg@xxxxxxxxx> wrote:
> >
> >> On Wed, Jul 24, 2013 at 2:59 AM, Mukesh Rathor
> >> <mukesh.rathor@xxxxxxxxxx> wrote:
.......
> The problem I have is that you still pass in *both* the value of
> regs->$SEGMENT_REGISTER, *and* an enum of a segment register, and use
> one in one case, and another in a different case. That's just a
> really ugly interface.
>
> What I'd like to see is for read_descriptor_sel() to *just* take
> which_sel (perhaps renamed sreg or something, since it's referring to
> a segment register), and in the PV case, read the appropriate segment
> register, then calling read_descriptor(). Then you don't have this
> crazy thing where you set two variables (sel and which_cs) all over
> the place.
Hmm... lemme make sure I understand precisely, what you mean is
something like:
static int read_descriptor_sel(enum x86_segment which_sel,
struct vcpu *v,
const struct cpu_user_regs *regs,
unsigned long *base,
unsigned long *limit,
unsigned int *ar,
unsigned int vm86attr)
{
uint sel;
if (!pvh)
{
sel = read_pv_segreg(which_sel)
return read_descriptor(sel, v, regs, base, limit, ar, vm86attr);
}
}
where read_pv_segreg() has one long case statment:
case x86_seg_cs
return read_segment_register(v, regs, cs);
case x86_seg_cs
return read_segment_register(v, regs, ds);
.....
Then emulate_privileged_op() will not be setting data_sel, but
only which_sel, except for one place:
....
if ( lm_ovr == lm_seg_none || data_sel < 4 )
{
switch ( lm_ovr )
{
case lm_seg_none:
...
That sounds like a good change to me. Jan, you OK with this?
-mukesh
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |