On Tue, Jan 10, 2017 at 04:56:41PM -0800, Bart Van Assche wrote: > Several RDMA drivers, e.g. drivers/infiniband/hw/qib, use the CPU to > transfer data between memory and PCIe adapter. Because of performance > reasons it is important that the CPU cache is not flushed when such > drivers transfer data. Make this possible by allowing these drivers to > override the dma_map_ops pointer. Additionally, introduce the function > set_dma_ops() that will be used by a later patch in this series. > > Signed-off-by: Bart Van Assche <bart.vanassche@xxxxxxxxxxx> > Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > Cc: Aurelien Jacquiot <a-jacquiot@xxxxxx> > Cc: Catalin Marinas <catalin.marinas@xxxxxxx> > Cc: Chris Zankel <chris@xxxxxxxxxx> > Cc: David Howells <dhowells@xxxxxxxxxx> > Cc: David S. Miller <davem@xxxxxxxxxxxxx> > Cc: Fenghua Yu <fenghua.yu@xxxxxxxxx> > Cc: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> > Cc: Geoff Levand <geoff@xxxxxxxxxxxxx> > Cc: H. Peter Anvin <hpa@xxxxxxxxx> > Cc: Haavard Skinnemoen <hskinnemoen@xxxxxxxxx> > Cc: Hans-Christian Egtvedt <egtvedt@xxxxxxxxxxxx> > Cc: Helge Deller <deller@xxxxxx> > Cc: Ingo Molnar <mingo@xxxxxxxxxx> > Cc: James E.J. Bottomley <jejb@xxxxxxxxxxxxxxxx> > Cc: Jesper Nilsson <jesper.nilsson@xxxxxxxx> > Cc: Joerg Roedel <joro@xxxxxxxxxx> > Cc: Jon Mason <jdmason@xxxxxxxx> > Cc: Jonas Bonn <jonas@xxxxxxxxxxxx> > Cc: Ley Foon Tan <lftan@xxxxxxxxxx> > Cc: Mark Salter <msalter@xxxxxxxxxx> > Cc: Max Filippov <jcmvbkbc@xxxxxxxxx> > Cc: Mikael Starvik <starvik@xxxxxxxx> > Cc: Muli Ben-Yehuda <mulix@xxxxxxxxx> > Cc: Rich Felker <dalias@xxxxxxxx> > Cc: Russell King <linux@xxxxxxxxxxxxxxx> > Cc: Stafford Horne <shorne@xxxxxxxxx> > Cc: Stefan Kristiansson <stefan.kristiansson@xxxxxxxxxxxxx> > Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > Cc: Tony Luck <tony.luck@xxxxxxxxx> > Cc: Will Deacon <will.deacon@xxxxxxx> > Cc: x86@xxxxxxxxxx > Cc: Yoshinori Sato <ysato@xxxxxxxxxxxxxxxxxxxx> > Cc: adi-buildroot-devel@xxxxxxxxxxxxxxxxxxxxx > Cc: iommu@xxxxxxxxxxxxxxxxxxxxxxxxxx > Cc: linux-alpha@xxxxxxxxxxxxxxx > Cc: linux-am33-list@xxxxxxxxxx > Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx > Cc: linux-c6x-dev@xxxxxxxxxxxxx > Cc: linux-cris-kernel@xxxxxxxx > Cc: linux-hexagon@xxxxxxxxxxxxxxx > Cc: linux-ia64@xxxxxxxxxxxxxxx > Cc: linux-m68k@xxxxxxxxxxxxxxxxxxxx > Cc: linux-metag@xxxxxxxxxxxxxxx > Cc: linux-mips@xxxxxxxxxxxxxx > Cc: linux-parisc@xxxxxxxxxxxxxxx > Cc: linux-pci@xxxxxxxxxxxxxxx > Cc: linux-rdma@xxxxxxxxxxxxxxx > Cc: linux-s390@xxxxxxxxxxxxxxx > Cc: linux-sh@xxxxxxxxxxxxxxx > Cc: linux-snps-arc@xxxxxxxxxxxxxxxxxxx > Cc: linux-xtensa@xxxxxxxxxxxxxxxx > Cc: linuxppc-dev@xxxxxxxxxxxxxxxx > Cc: nios2-dev@xxxxxxxxxxxxxxxxxxxxxx > Cc: openrisc@xxxxxxxxxxxxxxxxxxxx > Cc: sparclinux@xxxxxxxxxxxxxxx > Cc: uclinux-h8-devel@xxxxxxxxxxxxxxxxxxxx That's a crazy cc: list, you should break this up into smaller pieces, otherwise it's going to bounce... > diff --git a/include/linux/device.h b/include/linux/device.h > index 491b4c0ca633..c7cb225d36b0 100644 > --- a/include/linux/device.h > +++ b/include/linux/device.h > @@ -885,6 +885,8 @@ struct dev_links_info { > * a higher-level representation of the device. > */ > struct device { > + const struct dma_map_ops *dma_ops; /* See also get_dma_ops() */ > + > struct device *parent; > > struct device_private *p; Why not put this new pointer down with the other dma fields in this structure? Any specific reason it needs to be first? thanks, greg k-h