[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH V4 11/24] xen/mm: Make x86's XENMEM_resource_ioreq_server handling common
Hi Oleksandr, > -----Original Message----- > From: Xen-devel <xen-devel-bounces@xxxxxxxxxxxxxxxxxxxx> On Behalf Of > Oleksandr Tyshchenko > Sent: 2021年1月13日 5:52 > To: xen-devel@xxxxxxxxxxxxxxxxxxxx > Cc: Julien Grall <Julien.Grall@xxxxxxx>; Jan Beulich <jbeulich@xxxxxxxx>; > Andrew Cooper <andrew.cooper3@xxxxxxxxxx>; Roger Pau Monné > <roger.pau@xxxxxxxxxx>; Wei Liu <wl@xxxxxxx>; George Dunlap > <george.dunlap@xxxxxxxxxx>; Ian Jackson <iwj@xxxxxxxxxxxxxx>; Julien Grall > <julien@xxxxxxx>; Stefano Stabellini <sstabellini@xxxxxxxxxx>; Volodymyr > Babchuk <Volodymyr_Babchuk@xxxxxxxx>; Oleksandr Tyshchenko > <oleksandr_tyshchenko@xxxxxxxx> > Subject: [PATCH V4 11/24] xen/mm: Make x86's > XENMEM_resource_ioreq_server handling common > > From: Julien Grall <julien.grall@xxxxxxx> > > As x86 implementation of XENMEM_resource_ioreq_server can be > re-used on Arm later on, this patch makes it common and removes > arch_acquire_resource as unneeded. > > Also re-order #include-s alphabetically. > > This support is going to be used on Arm to be able run device > emulator outside of Xen hypervisor. > > Signed-off-by: Julien Grall <julien.grall@xxxxxxx> > Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx> > Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> > [On Arm only] > Tested-by: Wei Chen <Wei.Chen@xxxxxxx> > > --- > Please note, this is a split/cleanup/hardening of Julien's PoC: > "Add support for Guest IO forwarding to a device emulator" > > Changes RFC -> V1: > - no changes > > Changes V1 -> V2: > - update the author of a patch > > Changes V2 -> V3: > - don't wrap #include <xen/ioreq.h> > - limit the number of #ifdef-s > - re-order #include-s alphabetically > > Changes V3 -> V4: > - rebase > - Add Jan's R-b > --- > xen/arch/x86/mm.c | 44 --------------------------------- > xen/common/memory.c | 63 > +++++++++++++++++++++++++++++++++++++++--------- > xen/include/asm-arm/mm.h | 8 ------ > xen/include/asm-x86/mm.h | 4 --- > 4 files changed, 51 insertions(+), 68 deletions(-) > > diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c > index f6e128e..54ac398 100644 > --- a/xen/arch/x86/mm.c > +++ b/xen/arch/x86/mm.c > @@ -4587,50 +4587,6 @@ static int handle_iomem_range(unsigned long s, > unsigned long e, void *p) > return err || s > e ? err : _handle_iomem_range(s, e, p); > } > > -int arch_acquire_resource(struct domain *d, unsigned int type, > - unsigned int id, unsigned long frame, > - unsigned int nr_frames, xen_pfn_t mfn_list[]) > -{ > - int rc; > - > - switch ( type ) > - { > -#ifdef CONFIG_HVM > - case XENMEM_resource_ioreq_server: > - { > - ioservid_t ioservid = id; > - unsigned int i; > - > - rc = -EINVAL; > - if ( !is_hvm_domain(d) ) > - break; > - > - if ( id != (unsigned int)ioservid ) > - break; > - > - rc = 0; > - for ( i = 0; i < nr_frames; i++ ) > - { > - mfn_t mfn; > - > - rc = hvm_get_ioreq_server_frame(d, id, frame + i, &mfn); > - if ( rc ) > - break; > - > - mfn_list[i] = mfn_x(mfn); > - } > - break; > - } > -#endif > - > - default: > - rc = -EOPNOTSUPP; > - break; > - } > - > - return rc; > -} > - > long arch_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) > arg) > { > int rc; > diff --git a/xen/common/memory.c b/xen/common/memory.c > index b21b6c4..7e560b5 100644 > --- a/xen/common/memory.c > +++ b/xen/common/memory.c > @@ -8,22 +8,23 @@ > */ > > #include <xen/domain_page.h> > -#include <xen/types.h> > +#include <xen/errno.h> > +#include <xen/event.h> > +#include <xen/grant_table.h> > +#include <xen/guest_access.h> > +#include <xen/hypercall.h> > +#include <xen/iocap.h> > +#include <xen/ioreq.h> > #include <xen/lib.h> > +#include <xen/mem_access.h> > #include <xen/mm.h> > +#include <xen/numa.h> > +#include <xen/paging.h> > #include <xen/param.h> > #include <xen/perfc.h> > #include <xen/sched.h> > -#include <xen/event.h> > -#include <xen/paging.h> > -#include <xen/iocap.h> > -#include <xen/guest_access.h> > -#include <xen/hypercall.h> > -#include <xen/errno.h> > -#include <xen/numa.h> > -#include <xen/mem_access.h> > #include <xen/trace.h> > -#include <xen/grant_table.h> > +#include <xen/types.h> > #include <asm/current.h> > #include <asm/hardirq.h> > #include <asm/p2m.h> > @@ -1090,6 +1091,40 @@ static int acquire_grant_table(struct domain *d, > unsigned int id, > return 0; > } > > +static int acquire_ioreq_server(struct domain *d, > + unsigned int id, > + unsigned long frame, > + unsigned int nr_frames, > + xen_pfn_t mfn_list[]) > +{ > +#ifdef CONFIG_IOREQ_SERVER > + ioservid_t ioservid = id; > + unsigned int i; > + int rc; > + > + if ( !is_hvm_domain(d) ) > + return -EINVAL; > + > + if ( id != (unsigned int)ioservid ) > + return -EINVAL; > + > + for ( i = 0; i < nr_frames; i++ ) > + { > + mfn_t mfn; > + > + rc = hvm_get_ioreq_server_frame(d, id, frame + i, &mfn); > + if ( rc ) > + return rc; > + > + mfn_list[i] = mfn_x(mfn); > + } > + > + return 0; > +#else > + return -EOPNOTSUPP; > +#endif > +} > + > static int acquire_resource( > XEN_GUEST_HANDLE_PARAM(xen_mem_acquire_resource_t) arg) > { > @@ -1148,9 +1183,13 @@ static int acquire_resource( > mfn_list); > break; > > + case XENMEM_resource_ioreq_server: > + rc = acquire_ioreq_server(d, xmar.id, xmar.frame, xmar.nr_frames, > + mfn_list); > + break; > + > default: > - rc = arch_acquire_resource(d, xmar.type, xmar.id, xmar.frame, > - xmar.nr_frames, mfn_list); > + rc = -EOPNOTSUPP; > break; > } > > diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h > index f8ba49b..0b7de31 100644 > --- a/xen/include/asm-arm/mm.h > +++ b/xen/include/asm-arm/mm.h > @@ -358,14 +358,6 @@ static inline void put_page_and_type(struct page_info > *page) > > void clear_and_clean_page(struct page_info *page); > > -static inline > -int arch_acquire_resource(struct domain *d, unsigned int type, unsigned int > id, > - unsigned long frame, unsigned int nr_frames, > - xen_pfn_t mfn_list[]) > -{ > - return -EOPNOTSUPP; > -} > - > unsigned int arch_get_dma_bitsize(void); > This change could not be applied to the latest staging branch. > #endif /* __ARCH_ARM_MM__ */ > diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h > index deeba75..859214e 100644 > --- a/xen/include/asm-x86/mm.h > +++ b/xen/include/asm-x86/mm.h > @@ -639,8 +639,4 @@ static inline bool arch_mfn_in_directmap(unsigned long > mfn) > return mfn <= (virt_to_mfn(eva - 1) + 1); > } > > -int arch_acquire_resource(struct domain *d, unsigned int type, > - unsigned int id, unsigned long frame, > - unsigned int nr_frames, xen_pfn_t mfn_list[]); > - > #endif /* __ASM_X86_MM_H__ */ > -- > 2.7.4 >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |