xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Ian Campbell <Ian.Campbell@citrix.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: xen-devel <xen-devel@lists.xen.org>,
	"Tim Deegan (3P)" <Tim.Deegan@citrix.com>,
	Stefano Stabellini <Stefano.Stabellini@eu.citrix.com>
Subject: Re: [PATCH 3/5] xen: few more xen_ulong_t substitutions
Date: Wed, 8 Aug 2012 08:59:10 +0100	[thread overview]
Message-ID: <1344412750.11783.12.camel@dagon.hellion.org.uk> (raw)
In-Reply-To: <50212C2B02000078000933CE@nat28.tlf.novell.com>

On Tue, 2012-08-07 at 13:54 +0100, Jan Beulich wrote:
> >>> On 07.08.12 at 14:08, Stefano Stabellini <stefano.stabellini@eu.citrix.com> wrote:
> > On Mon, 6 Aug 2012, Jan Beulich wrote:
> >> >>> On 06.08.12 at 16:12, Stefano Stabellini <stefano.stabellini@eu.citrix.com>  wrote:
> >> > --- a/xen/include/public/physdev.h
> >> > +++ b/xen/include/public/physdev.h
> >> > @@ -124,7 +124,7 @@ DEFINE_XEN_GUEST_HANDLE(physdev_set_iobitmap_t);
> >> >  #define PHYSDEVOP_apic_write             9
> >> >  struct physdev_apic {
> >> >      /* IN */
> >> > -    unsigned long apic_physbase;
> >> > +    xen_ulong_t apic_physbase;
> >> >      uint32_t reg;
> >> >      /* IN or OUT */
> >> >      uint32_t value;
> >> >...
> > 
> > This change is actually not required, considering that ARM doesn't have
> > an APIC. I changed apic_physbase to xen_ulong_t only for consistency,
> > but it wouldn't make any difference for ARM (or x86).
> > If you think that it is better to keep it unsigned long, I'll remove
> > this chunk for the patch.
> 
> I'd prefer that. Also any others that you may not actually need
> to be converted.
> 
> Also, seems I was misremembering how PPC dealt with this - they
> indeed had xen_ulong_t defined to be a 64-bit value too.
> 
> > Considering that each field of a multicall_entry is usually passed as an
> > hypercall parameter, they should all remain unsigned long.
> 
> That'll give you subtle bugs I'm afraid: do_memory_op()'s
> encoding of a continuation start extent (into the 'cmd' value),
> for example, depends on being able to store the full value into
> the command field of the multicall structure. The limit checking
> of the permitted number of extents therefore is different
> between native (ULONG_MAX >> MEMOP_EXTENT_SHIFT) and
> compat (UINT_MAX >> MEMOP_EXTENT_SHIFT).

On compat this would be 2^(32-6) == 67 and a bit million extents. I
think we can live with this limit on 64bit ARM too.

We could have lived with it on 64bit X86 too but by the time we noticed
it was too late so we have to live with it.

>  I would
> neither find it very appealing to have do_memory_op() adjusted
> for dealing with this new special case, nor am I sure that's the
> only place your approach would cause problems if you excluded
> the multicall structure from the model change.

On the other hand it doesn't seem right for the multicall args to be
able to represent values which you couldn't pass to the regular
hypercall itself (since the 32 bit args are only 32 bit).

Perhaps if use of the upper portions for 32 bit guests were restricted
for the use of continuations only that might work -- it would rely on
the top half of the 64-bit x0 register surviving a trip back to 32 bit
mode and into hypervisor mode again. I think that can be expected (but
I'd have to double check a AArch64 docs to be sure). On the other-other
hand that would mean that a 32-on-32 guest would see different things to
a 32-on-64 guest which is bad.

I don't expect we will be able to get away with no compat layer what so
ever. At the minimum there will have to be compat hypercall entry points
which correctly extend the 32 bit arguments to 64 bit, and do the same
for the return value etc but if we can avoid the majority of the struct
munging (ideally completely avoiding the need for a hypercall arguments
translation area) then I think that is worth doing.

Ian.

  reply	other threads:[~2012-08-08  7:59 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-06 14:11 [PATCH 0/5] ARM hypercall ABI: 64 bit ready Stefano Stabellini
2012-08-06 14:12 ` [PATCH 1/5] xen: improve changes to xen_add_to_physmap Stefano Stabellini
2012-08-06 14:24   ` Konrad Rzeszutek Wilk
2012-08-06 14:38     ` Stefano Stabellini
2012-08-06 15:32   ` Jan Beulich
2012-08-06 15:43     ` Stefano Stabellini
2012-08-06 15:54       ` Jan Beulich
2012-08-07 12:27         ` Stefano Stabellini
2012-08-07 12:40           ` Jean Guyader
2012-08-07 13:18             ` Jan Beulich
2012-08-07 17:07               ` Stefano Stabellini
2012-08-08  7:14                 ` Jan Beulich
2012-08-08  7:45                   ` Ian Campbell
2012-08-08  8:49                     ` Jan Beulich
2012-08-08  9:51                       ` Stefano Stabellini
2012-08-08 10:03                         ` Jean Guyader
2012-08-08 10:08                           ` Stefano Stabellini
2012-08-08 14:20                           ` David Vrabel
2012-08-08 19:33                             ` Jean Guyader
2012-08-07 13:02           ` Jan Beulich
2012-08-07 15:24             ` Ian Jackson
2012-08-07 15:37               ` Jan Beulich
2012-08-11  1:33   ` Mukesh Rathor
2012-08-13 10:43     ` Stefano Stabellini
2012-08-06 14:12 ` [PATCH 2/5] xen/arm: introduce __lshrdi3 and __aeabi_llsr Stefano Stabellini
2012-08-09  9:16   ` Ian Campbell
2012-08-09  9:43     ` Stefano Stabellini
2012-08-06 14:12 ` [PATCH 3/5] xen: few more xen_ulong_t substitutions Stefano Stabellini
2012-08-06 15:38   ` Jan Beulich
2012-08-07 12:08     ` Stefano Stabellini
2012-08-07 12:36       ` Ian Campbell
2012-08-07 13:13         ` Jan Beulich
2012-08-07 13:30           ` Ian Campbell
2012-08-07 12:54       ` Jan Beulich
2012-08-08  7:59         ` Ian Campbell [this message]
2012-08-08 12:12         ` Stefano Stabellini
2012-08-08 12:17           ` Ian Campbell
2012-08-08 14:07           ` Jan Beulich
2012-08-08 15:01             ` Stefano Stabellini
2012-08-08 15:12               ` Jan Beulich
2012-08-08 15:55                 ` Stefano Stabellini
2012-08-06 14:12 ` [PATCH 4/5] xen: introduce XEN_GUEST_HANDLE_PARAM Stefano Stabellini
2012-08-06 15:43   ` Jan Beulich
2012-08-06 15:47     ` Ian Campbell
2012-08-06 15:58       ` Jan Beulich
2012-08-06 16:02         ` Stefano Stabellini
2012-08-07  6:24           ` Jan Beulich
2012-08-07 12:35             ` Stefano Stabellini
2012-08-07 12:39               ` Ian Campbell
2012-08-07 13:08               ` Jan Beulich
2012-08-07 18:09                 ` Stefano Stabellini
2012-08-08  7:48                 ` Ian Campbell
2012-08-08  8:54                   ` Jan Beulich
2012-08-06 14:12 ` [PATCH 5/5] xen: replace XEN_GUEST_HANDLE with XEN_GUEST_HANDLE_PARAM when appropriate Stefano Stabellini
2012-08-06 14:39 ` [PATCH 0/5] ARM hypercall ABI: 64 bit ready David Vrabel
2012-08-06 14:44   ` Stefano Stabellini
2012-08-06 14:49     ` Stefano Stabellini
2012-08-06 14:59     ` David Vrabel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1344412750.11783.12.camel@dagon.hellion.org.uk \
    --to=ian.campbell@citrix.com \
    --cc=JBeulich@suse.com \
    --cc=Stefano.Stabellini@eu.citrix.com \
    --cc=Tim.Deegan@citrix.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).