Message ID | 5323334F.90700@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, Mar 14, 2014 at 04:50:23PM +0000, Julien Grall wrote: > On 02/24/2014 08:49 PM, Stefano Stabellini wrote: > > On Mon, 24 Feb 2014, gregkh@linuxfoundation.org wrote: > > Julien is proposing to store the list of "safe" devices on an hash table > > in the Xen specific code (in arch/arm/xen/enlighten.c, see > > http://marc.info/?l=linux-kernel&m=139291370526082&w=2). > > Whenever Linux is about to do DMA, we would check in the hashtable to > > figure out whether we need to go through the swiotlb or we can simply > > use the native dma_ops. > > > > Ian and I were thinking that it would be much easier and faster to have > > a "xen_safe_device" parameter in struct device and just check for that. > > It doesn't actually need to be in struct device, it could simply be a > > flag in struct device_dma_parameters as Ian was suggesting. > > > > Julien, could you please come up with a simple patch to demonstrate the > > concept? > > Hello Stefano and Greg, > > Sorry for the late answer. I wrote a simple patch which depend on patch #1. > Let me know if it's the right direction. I have no context here, care to start the patch series over? thanks, greg k-h
diff --git a/arch/arm/include/asm/device.h b/arch/arm/include/asm/device.h index dc662fc..345a96e 100644 --- a/arch/arm/include/asm/device.h +++ b/arch/arm/include/asm/device.h @@ -17,6 +17,9 @@ struct dev_archdata { #ifdef CONFIG_ARM_DMA_USE_IOMMU struct dma_iommu_mapping *mapping; #endif +#ifdef CONFIG_XEN + bool is_protected; +#endif }; struct omap_device; diff --git a/arch/arm/include/asm/xen/dma-mapping.h b/arch/arm/include/asm/xen/dma-mapping.h index 002fc57..d6cc012 100644 --- a/arch/arm/include/asm/xen/dma-mapping.h +++ b/arch/arm/include/asm/xen/dma-mapping.h @@ -5,9 +5,21 @@ extern struct dma_map_ops *xen_dma_ops; +#ifdef CONFIG_XEN +static inline bool xen_is_protected_device(const struct device *dev) +{ + return dev->archdata.is_protected; +} +#else +static inline bool xen_is_protected_device(const struct device *dev) +{ + return 0; +} +#endif + static inline bool need_xen_dma_ops(struct device *dev) { - return xen_initial_domain(); + return xen_initial_domain() && !xen_is_protected_device(dev); } #endif /* _ASM_ARM_XEN_DMA_MAPPING_H */