|
[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |