[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v10 0/8] xen/arm: introduce GNTTABOP_cache_flush
Hi all, this patch series introduces a new hypercall to perform cache maintenance operations on behalf of the guest. It is useful for dom0 to be able to cache flush pages involved in a dma operation with non-coherent devices. It also removes XENFEAT_grant_map_identity as the feature is no longer necessary: it was used to achieve the same goal but the guest can now use the hypercall instead. Keeping the flag would also have a significant performance impact as a new p2m mapping gets created and then destroyed for every grant that is mapped and unmapped in dom0. Changes on v10: - fix coding style for comments; - move BUILD_BUG_ON closer to where it matters; - add a comment on dev_bus_addr; - remove comment on max GNTTABOP; - break long lines; - remove ref_count local variable; - use unsigned int* instead of grant_ref_t* as arguments. Changes in v9: - fix coding style for comments; - other style fixes; - fix whitespace indentation; - remove useless ASSERT; - add a comment on ARM callers assuming that these functions cannot fail; - grant_map_exists: calculate max iteration before the loop; - do_grant_table_op: avoid shifts, use masks instead; - set GNTTABOP_CONTINUATION_ARG_SHIFT to 12; - remove MAX_GRANT_ENTRIES_ITER_SHIFT, use GNTTABOP_CONTINUATION_ARG_SHIFT; - move GNTTABOP_CMD_MASK and GNTTABOP_CONTINUATION_ARG_SHIFT to grant_table.c. Changes in v8: - remove unused #include; - set max_nr_grant_frames as __initdata; - set max_grant_frames and max_maptrack_frames as __read_mostly; - respent coding style for comments; - remove MAX_MAPTRACK_TO_GRANTS_RATIO; - avoid security issues, use two separate opaque variables to store the input argument and the output argument; - fix return values of grant_map_exists; - rename CMD_MASK to GNTTABOP_CMD_MASK; - rename OPAQUE_CONTINUATION_ARG_SHIFT to GNTTABOP_CONTINUATION_ARG_SHIFT; - save in the opaque argument the shifted ref_count; - set GNTTABOP_CONTINUATION_ARG_SHIFT to 20 and MAX_GRANT_ENTRIES_ITER_SHIFT to 12, to cover the full grant_ref_t value range; - move GNTTABOP_CONTINUATION_ARG_SHIFT and GNTTABOP_CMD_MASK to include/xen/grant_table.h; - cmd &= GNTTABOP_CMD_MASK in the compat wrapper. Changes in v7: - remove 0 initializers; - make max_nr_grant_frames static; - remove preprocessors check on max_nr_grant_frames; - remove double black line; - introduce DEFAULT_MAX_MAPTRACK_FRAMES; - no long lines; - set the new variables independently if the old one is passed as argument; - return the called function's return value from clean_dcache_va_range; - remove warning message; - prefix second line of the warning with XENLOG_WARNING; - do not lower DEFAULT_MAX_NR_GRANT_FRAMES; - no long lines; - interrupt loops in grant_map_exists with more than 2048 iterations, create an hypercall continuation if necessary. Changes in v6: - change ordering of new options in xen-command-line.markdown; - initialize all options to 0, then set the defaults on an initcall depending on what options are used; - do not return int from flush_page_to_ram; - set DEFAULT_MAX_NR_GRANT_FRAMES to 10; - warn if max_grant_frames > 10. Changes in v5: - /max_nr_maptrack_frames/max_maptrack_frames/g; - deprecate gnttab_max_nr_frames; - introduce gnttab_max_frames; - rename the max_nr_grant_frames variable to max_grant_frames; - return int from flush_page_to_ram and *_dcache_va_range; - return int from invalidate_dcache_va_range; - make order an unsigned int; - add a comment on sub-page granularity support; - cache operations return error; - move the functions to xen/include/asm-x86/flushtlb.h; - make mfn unsigned long; - remove unhelpful error message; - handle errors returned by cache maintenance functions. Changes in v4: - add patch "xen: introduce gnttab_max_nr_maptrack_frames command line option"; - remove patch "introduce two different max_nr_dom0/domU_grant_frames parameters"; - rename *_xen_dcache_* operations to *_dcache_*; - implement the x86 cache maintenance functions using flush_area_local; - ASSERT(spin_is_locked); - return instead of break in grant_map_exists; - pass a pointer to __gnttab_cache_flush; - code style; - unsigned int iterator in gnttab_cache_flush; - return ret instead -ret; - cflush.offset >= PAGE_SIZE return -EINVAL; - revert "xen: introduce arch_grant_(un)map_page_identity" Changes in v3: - introduce two different max_nr_dom0/domU_grant_frames parameters; - x86: introduce more cache maintenance operations; - reduce the time the grant_table lock is held; - fix warning message; - s/EFAULT/EPERM; - s/llx/PRIx64; - check offset and size independetly before checking their sum; - rcu_lock_current_domain cannot fail; - s/ENOSYS/EOPNOTSUPP; - use clean_and_invalidate_xen_dcache_va_range to do both operations at once; - fold grant_map_exists in this patch; - support "count" argument; - make correspondent changes to compat/grant_table.c; - introduce GNTTAB_CACHE_SOURCE_GREF to select the type of input in the union; - rename size field to length; - make length and offset uint16_t; - only take spin_lock if d != owner. Changes in v2: - make grant_map_exists static; - remove the spin_lock in grant_map_exists; - move the hypercall to GNTTABOP; - do not check for mfn_to_page errors in GNTTABOP_cache_flush; - take a reference to the page in GNTTABOP_cache_flush; - replace printk with gdprintk in GNTTABOP_cache_flush; - split long line in GNTTABOP_cache_flush; - remove out label in GNTTABOP_cache_flush; - move rcu_lock_current_domain down before the loop in GNTTABOP_cache_flush; - take a spin_lock before calling grant_map_exists in GNTTABOP_cache_flush. Stefano Stabellini (8): xen: introduce gnttab_max_frames and gnttab_max_maptrack_frames command line options xen/arm: rename *_xen_dcache_* operations to *_dcache_* xen/arm: return int from *_dcache_va_range xen/arm: introduce invalidate_dcache_va_range xen/x86: introduce more cache maintenance operations xen/arm: introduce GNTTABOP_cache_flush Revert "xen/arm: introduce XENFEAT_grant_map_identity" Revert "xen: introduce arch_grant_(un)map_page_identity" docs/misc/xen-command-line.markdown | 17 ++- xen/arch/arm/domain.c | 2 +- xen/arch/arm/guestcopy.c | 2 +- xen/arch/arm/kernel.c | 2 +- xen/arch/arm/mm.c | 26 ++-- xen/arch/arm/p2m.c | 30 +--- xen/arch/arm/smpboot.c | 2 +- xen/arch/x86/mm.c | 2 +- xen/common/compat/grant_table.c | 27 ++-- xen/common/grant_table.c | 259 ++++++++++++++++++++++++++++------- xen/common/kernel.c | 2 - xen/drivers/passthrough/arm/smmu.c | 42 ++++++ xen/include/asm-arm/arm32/page.h | 7 +- xen/include/asm-arm/arm64/page.h | 7 +- xen/include/asm-arm/grant_table.h | 5 +- xen/include/asm-arm/p2m.h | 4 - xen/include/asm-arm/page.h | 56 ++++++-- xen/include/asm-x86/flushtlb.h | 15 ++ xen/include/asm-x86/p2m.h | 4 - xen/include/asm-x86/page.h | 3 - xen/include/public/features.h | 4 +- xen/include/public/grant_table.h | 24 ++++ xen/include/xen/grant_table.h | 4 +- xen/include/xlat.lst | 1 + 24 files changed, 411 insertions(+), 136 deletions(-) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |