[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] Is: PVH + ARM new hypercalls. Was: Re: [PATCH]: PVH: specify xen features strings cleany for PVH



On Fri, Jan 25, 2013 at 10:43:41AM +0000, Ian Campbell wrote:
> On Fri, 2013-01-25 at 10:27 +0000, Jan Beulich wrote:
> > >>> On 25.01.13 at 11:11, Ian Campbell <Ian.Campbell@xxxxxxxxxx> wrote:
> > > On Fri, 2013-01-25 at 08:02 +0000, Jan Beulich wrote:
> > >> >>> On 25.01.13 at 00:13, Mukesh Rathor <mukesh.rathor@xxxxxxxxxx> wrote:
> > >> > This is on top of what konrad already has in his linux tree so he
> > >> > can just apply it. Here's the final version of the file, just in case:
> > >> 
> > >> Looks okay to me, and I don't mind whether this
> > >> 
> > >> >         ELFNOTE(Xen, XEN_ELFNOTE_FEATURES,       .ascii 
> > >> > "!writable_page_tables|pae_pgdir_above_4gb"; .asciz PVH_FEATURES_STR);
> > >> 
> > >> is done using the .ascii/.asciz or the simpler string concatenation
> > >> way, as long as the latter works.
> > > 
> > > String concat in gas doesn't work like in C, you get a \0 at the join...
> > 
> > But this is going through the C preprocessor, and that one,
> > according to all I know, ought to concatenate adjacent strings.
> 
> I don't think so, turning
>         "Foo" "Bar"
> into
>         "FooBar"
> happens at the C level not the CPP level.
> 
>         #define FOO(x) x
>         FOO(.asciz "Foo" "Bar")
>         
>         #define CAT(x,y) x y
>         FOO(.asciz CAT("Foo","Bar"))
>         
>         #define CAT2(x,y) x #y
>         FOO(CAT2(.asciz, Foo Bar))
> will produce
>         .asciz "Foo" "Bar"
>         .asciz "Foo" "Bar"
>         .asciz "Foo Bar"
> 
> (where FOO(x) ~= ELFNOTE(..., x))
> 
> The third form might be an alternative fix to this issue but I don't
> think it is any better than the .ascii/.asciz solution.

OK. So I stuck Mukesh's patch in the tree along with yours:

http://git.kernel.org/?p=linux/kernel/git/konrad/xen.git;a=shortlog;h=refs/heads/stable/pvh.v7

and all of that on top of v3.8-rc5:

http://git.kernel.org/?p=linux/kernel/git/konrad/xen.git;a=shortlog;h=refs/heads/linux-next

We still have a couple of weeks before we have to make the
go/no-go decision on the the new hypercalls:


#define XENMEM_add_to_physmap_range 23
struct xen_add_to_physmap_range {
    /* IN */
    /* Which domain to change the mapping for. */
    domid_t domid;
    uint16_t space; /* => enum phys_map_space */

    /* Number of pages to go through */
    uint16_t size;
    domid_t foreign_domid; /* IFF gmfn_foreign */

    /* Indexes into space being mapped. */
    GUEST_HANDLE(xen_ulong_t) idxs;

    /* GPFN in domid where the source mapping page should appear. */
    GUEST_HANDLE(xen_pfn_t) gpfns;

    /* OUT */

    /* Per index error code. */
    GUEST_HANDLE(int) errs;
};


/*
 * Unmaps the page appearing at a particular GPFN from the specified guest's
 * pseudophysical address space.
 * arg == addr of xen_remove_from_physmap_t.
 */
#define XENMEM_remove_from_physmap      15
struct xen_remove_from_physmap {
    /* Which domain to change the mapping for. */
    domid_t domid;

    /* GPFN of the current mapping of the page. */
    xen_pfn_t gpfn;
};
DEFINE_GUEST_HANDLE_STRUCT(xen_remove_from_physmap);


/*
 * Returns the location in virtual address space of the machine_to_phys
 * mapping table. Architectures which do not have a m2p table, or which do not
 * map it by default into guest address space, do not implement this command.
 * arg == addr of xen_machphys_mapping_t.
 */
#define XENMEM_machphys_mapping     12
struct xen_machphys_mapping {
    xen_ulong_t v_start, v_end; /* Start and end virtual addresses.   */
    xen_ulong_t max_mfn;        /* Maximum MFN that can be looked up. */
};


#define PHYSDEVOP_map_iomem        30
struct physdev_map_iomem {
    /* IN */
    uint64_t first_gfn;
    uint64_t first_mfn;
    uint32_t nr_mfns;
    uint32_t add_mapping; /* 1 == add mapping;  0 == unmap */

};

and the modification to one:

commit 50c0b3df91be7a440b50ee7d74fd2042bca173fd
Author: Mukesh Rathor <mukesh.rathor@xxxxxxxxxx>
Date:   Mon Oct 22 11:37:57 2012 -0400

    xen/pvh: Extend vcpu_guest_context, p2m, event, and XenBus.
    
    Make gdt_frames[]/gdt_ents into a union with {gdtaddr, gdtsz},
    as PVH only needs to send down gdtaddr and gdtsz in the
    vcpu_guest_context structure..
    
    For interrupts, PVH uses native_irq_ops so we can skip most of the
    PV ones. In the future we can support the pirq_eoi_map..
    Also VCPU hotplug is currently not available for PVH.
    
    For events (and IRQs) we follow what PVHVM does - so use callback
    vector.  Lastly, for XenBus we use the same logic that is used in
    the PVHVM case.
    
    Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
    Signed-off-by: Mukesh Rathor <mukesh.rathor@xxxxxxxxxx>
    [v2: Rebased it]
    [v3: Move 64-bit ifdef and based on Stefan add extra comments.]
    [v4: Rebased it once more]
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>

diff --git a/arch/x86/include/asm/xen/interface.h 
b/arch/x86/include/asm/xen/interface.h
index fd9cb76..20e738a 100644
--- a/arch/x86/include/asm/xen/interface.h
+++ b/arch/x86/include/asm/xen/interface.h
@@ -145,7 +145,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 {
+               /* PV: 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)  */
> 
> Ian.
> 
> 
> _______________________________________________
> 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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.