Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
But in b44_init(), there is no device instances. -- Original -- From: "Christoph Hellwig"<h...@lst.de>; Date: Fri, Nov 10, 2017 08:30 PM To: "Huacai Chen"<che...@lemote.com>; Cc: "Christoph Hellwig"<h...@lst.de>; "Marek Szyprowski"<m.szyprow...@samsung.com>; "Robin Murphy"<robin.mur...@arm.com>; "Andrew Morton"<a...@linux-foundation.org>; "Fuxin Zhang"<zhan...@lemote.com>; "linux-kernel"<linux-kernel@vger.kernel.org>; "Ralf Baechle"<r...@linux-mips.org>; "James Hogan"<james.ho...@imgtec.com>; "linux-mips"<linux-m...@linux-mips.org>; "James E . J . Bottomley"<j...@linux.vnet.ibm.com>; "Martin K . Petersen"<martin.peter...@oracle.com>; "linux-scsi"<linux-s...@vger.kernel.org>; "stable"<sta...@vger.kernel.org>; "Michael S . Tsirkin"<m...@redhat.com>; "Pawel Osciak"<pa...@osciak.com>; "Kyungmin Park"<kyungmin.p...@samsung.com>; "Michael Chan"<michael.c...@broadcom.com>; "Benjamin Herrenschmidt"<b...@kernel.crashing.org>; "Ivan Mikhaylov"<i...@ru.ibm.com>; "Tariq Toukan"<tar...@mellanox.com>; "Andy Gross"<agr...@codeaurora.org>; "Mark A . Greer"<mgr...@animalcreek.com>; "Robert Baldyga"<r.bald...@hackerion.com>; Subject: Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment() > diff --git a/drivers/net/ethernet/broadcom/b44.c > b/drivers/net/ethernet/broadcom/b44.c > index a1125d1..2f6ffe5 100644 > --- a/drivers/net/ethernet/broadcom/b44.c > +++ b/drivers/net/ethernet/broadcom/b44.c > @@ -2344,6 +2344,10 @@ static int b44_init_one(struct ssb_device *sdev, > struct net_device *dev; > struct b44 *bp; > int err; > + unsigned int dma_desc_align_size = > dma_get_cache_alignment(sdev->dma_dev); > + > + /* Setup paramaters for syncing RX/TX DMA descriptors */ > + dma_desc_sync_size = max_t(unsigned int, dma_desc_align_size, > sizeof(struct dma_desc)); > > instance++; > > @@ -2587,12 +2591,8 @@ static inline void b44_pci_exit(void) > > static int __init b44_init(void) > { > - unsigned int dma_desc_align_size = dma_get_cache_alignment(); > int err; > > - /* Setup paramaters for syncing RX/TX DMA descriptors */ > - dma_desc_sync_size = max_t(unsigned int, dma_desc_align_size, > sizeof(struct dma_desc)); > - This looks wrong - you override a global variable for each probed device.
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
But in b44_init(), there is no device instances. -- Original -- From: "Christoph Hellwig"; Date: Fri, Nov 10, 2017 08:30 PM To: "Huacai Chen"; Cc: "Christoph Hellwig"; "Marek Szyprowski"; "Robin Murphy"; "Andrew Morton"; "Fuxin Zhang"; "linux-kernel"; "Ralf Baechle"; "James Hogan"; "linux-mips"; "James E . J . Bottomley"; "Martin K . Petersen"; "linux-scsi"; "stable"; "Michael S . Tsirkin"; "Pawel Osciak"; "Kyungmin Park"; "Michael Chan"; "Benjamin Herrenschmidt"; "Ivan Mikhaylov"; "Tariq Toukan"; "Andy Gross"; "Mark A . Greer"; "Robert Baldyga"; Subject: Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment() > diff --git a/drivers/net/ethernet/broadcom/b44.c > b/drivers/net/ethernet/broadcom/b44.c > index a1125d1..2f6ffe5 100644 > --- a/drivers/net/ethernet/broadcom/b44.c > +++ b/drivers/net/ethernet/broadcom/b44.c > @@ -2344,6 +2344,10 @@ static int b44_init_one(struct ssb_device *sdev, > struct net_device *dev; > struct b44 *bp; > int err; > + unsigned int dma_desc_align_size = > dma_get_cache_alignment(sdev->dma_dev); > + > + /* Setup paramaters for syncing RX/TX DMA descriptors */ > + dma_desc_sync_size = max_t(unsigned int, dma_desc_align_size, > sizeof(struct dma_desc)); > > instance++; > > @@ -2587,12 +2591,8 @@ static inline void b44_pci_exit(void) > > static int __init b44_init(void) > { > - unsigned int dma_desc_align_size = dma_get_cache_alignment(); > int err; > > - /* Setup paramaters for syncing RX/TX DMA descriptors */ > - dma_desc_sync_size = max_t(unsigned int, dma_desc_align_size, > sizeof(struct dma_desc)); > - This looks wrong - you override a global variable for each probed device.
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
> diff --git a/drivers/net/ethernet/broadcom/b44.c > b/drivers/net/ethernet/broadcom/b44.c > index a1125d1..2f6ffe5 100644 > --- a/drivers/net/ethernet/broadcom/b44.c > +++ b/drivers/net/ethernet/broadcom/b44.c > @@ -2344,6 +2344,10 @@ static int b44_init_one(struct ssb_device *sdev, > struct net_device *dev; > struct b44 *bp; > int err; > + unsigned int dma_desc_align_size = > dma_get_cache_alignment(sdev->dma_dev); > + > + /* Setup paramaters for syncing RX/TX DMA descriptors */ > + dma_desc_sync_size = max_t(unsigned int, dma_desc_align_size, > sizeof(struct dma_desc)); > > instance++; > > @@ -2587,12 +2591,8 @@ static inline void b44_pci_exit(void) > > static int __init b44_init(void) > { > - unsigned int dma_desc_align_size = dma_get_cache_alignment(); > int err; > > - /* Setup paramaters for syncing RX/TX DMA descriptors */ > - dma_desc_sync_size = max_t(unsigned int, dma_desc_align_size, > sizeof(struct dma_desc)); > - This looks wrong - you override a global variable for each probed device.
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
> diff --git a/drivers/net/ethernet/broadcom/b44.c > b/drivers/net/ethernet/broadcom/b44.c > index a1125d1..2f6ffe5 100644 > --- a/drivers/net/ethernet/broadcom/b44.c > +++ b/drivers/net/ethernet/broadcom/b44.c > @@ -2344,6 +2344,10 @@ static int b44_init_one(struct ssb_device *sdev, > struct net_device *dev; > struct b44 *bp; > int err; > + unsigned int dma_desc_align_size = > dma_get_cache_alignment(sdev->dma_dev); > + > + /* Setup paramaters for syncing RX/TX DMA descriptors */ > + dma_desc_sync_size = max_t(unsigned int, dma_desc_align_size, > sizeof(struct dma_desc)); > > instance++; > > @@ -2587,12 +2591,8 @@ static inline void b44_pci_exit(void) > > static int __init b44_init(void) > { > - unsigned int dma_desc_align_size = dma_get_cache_alignment(); > int err; > > - /* Setup paramaters for syncing RX/TX DMA descriptors */ > - dma_desc_sync_size = max_t(unsigned int, dma_desc_align_size, > sizeof(struct dma_desc)); > - This looks wrong - you override a global variable for each probed device.
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
Looks like there hasn't been much interest in reworking this to make stable backporting easier. I can apply patch 1 to the dma-mapping tree if that's still the plan, but for the other patches I'd need ACKs from the other maintainers.
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
Looks like there hasn't been much interest in reworking this to make stable backporting easier. I can apply patch 1 to the dma-mapping tree if that's still the plan, but for the other patches I'd need ACKs from the other maintainers.
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
Only patch 4 can be merged to stable, please ignore cc-stable in the rest. -- Original -- From: "Christoph Hellwig"<h...@lst.de>; Date: Fri, Nov 3, 2017 01:14 PM To: "陈华才"<che...@lemote.com>; Cc: "Marek Szyprowski"<m.szyprow...@samsung.com>; "Christoph Hellwig"<h...@lst.de>; "Robin Murphy"<robin.mur...@arm.com>; "Andrew Morton"<a...@linux-foundation.org>; "Fuxin Zhang"<zhan...@lemote.com>; "linux-kernel"<linux-kernel@vger.kernel.org>; "Ralf Baechle"<r...@linux-mips.org>; "JamesHogan"<james.ho...@imgtec.com>; "linux-mips"<linux-m...@linux-mips.org>; "James E . J .Bottomley"<j...@linux.vnet.ibm.com>; "Martin K . Petersen"<martin.peter...@oracle.com>; "linux-scsi"<linux-s...@vger.kernel.org>; "stable"<sta...@vger.kernel.org>; "Michael S . Tsirkin"<m...@redhat.com>; "Pawel Osciak"<pa...@osciak.com>; "Kyungmin Park"<kyungmin.p...@samsung.com>; "Michael Chan"<michael.c...@broadcom.com>; "Benjamin Herrenschmidt"<b...@kernel.crashing.org>; "Ivan Mikhaylov"<i...@ru.ibm.com>; "Tariq Toukan"<tar...@mellanox.com>; "Andy Gross"<agr...@codeaurora.org>; "Mark A . Greer"<mgr...@animalcreek.com>; "RobertBaldyga"<r.bald...@hackerion.com>; Subject: Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment() I can queue 1 up in the dma-mapping tree, and if I get reviews for the mips and scsi bits I'd be happy to queue those up as well. But I think you'd be better off moving patches 3 and 4 to the front without the dma_get_cache_alignment prototype change so that they can be merged to stable.
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
Only patch 4 can be merged to stable, please ignore cc-stable in the rest. -- Original -- From: "Christoph Hellwig"; Date: Fri, Nov 3, 2017 01:14 PM To: "陈华才"; Cc: "Marek Szyprowski"; "Christoph Hellwig"; "Robin Murphy"; "Andrew Morton"; "Fuxin Zhang"; "linux-kernel"; "Ralf Baechle"; "JamesHogan"; "linux-mips"; "James E . J .Bottomley"; "Martin K . Petersen"; "linux-scsi"; "stable"; "Michael S . Tsirkin"; "Pawel Osciak"; "Kyungmin Park"; "Michael Chan"; "Benjamin Herrenschmidt"; "Ivan Mikhaylov"; "Tariq Toukan"; "Andy Gross"; "Mark A . Greer"; "RobertBaldyga"; Subject: Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment() I can queue 1 up in the dma-mapping tree, and if I get reviews for the mips and scsi bits I'd be happy to queue those up as well. But I think you'd be better off moving patches 3 and 4 to the front without the dma_get_cache_alignment prototype change so that they can be merged to stable.
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
I can queue 1 up in the dma-mapping tree, and if I get reviews for the mips and scsi bits I'd be happy to queue those up as well. But I think you'd be better off moving patches 3 and 4 to the front without the dma_get_cache_alignment prototype change so that they can be merged to stable.
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
I can queue 1 up in the dma-mapping tree, and if I get reviews for the mips and scsi bits I'd be happy to queue those up as well. But I think you'd be better off moving patches 3 and 4 to the front without the dma_get_cache_alignment prototype change so that they can be merged to stable.
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
Why this is still un-merged? Should I remove the cc-stable and resend this series? Huacai -- Original -- From: "陈华才"<che...@lemote.com>; Date: Thu, Oct 26, 2017 02:33 PM To: "Marek Szyprowski"<m.szyprow...@samsung.com>; "Christoph Hellwig"<h...@lst.de>; Cc: "Robin Murphy"<robin.mur...@arm.com>; "Andrew Morton"<a...@linux-foundation.org>; "Fuxin Zhang"<zhan...@lemote.com>; "linux-kernel"<linux-kernel@vger.kernel.org>; "Ralf Baechle"<r...@linux-mips.org>; "JamesHogan"<james.ho...@imgtec.com>; "linux-mips"<linux-m...@linux-mips.org>; "James E . J .Bottomley"<j...@linux.vnet.ibm.com>; "Martin K . Petersen"<martin.peter...@oracle.com>; "linux-scsi"<linux-s...@vger.kernel.org>; "stable"<sta...@vger.kernel.org>; "Michael S . Tsirkin"<m...@redhat.com>; "Pawel Osciak"<pa...@osciak.com>; "Kyungmin Park"<kyungmin.p...@samsung.com>; "Michael Chan"<michael.c...@broadcom.com>; "Benjamin Herrenschmidt"<b...@kernel.crashing.org>; "Ivan Mikhaylov"<i...@ru.ibm.com>; "Tariq Toukan"<tar...@mellanox.com>; "Andy Gross"<agr...@codeaurora.org>; "Mark A . Greer"<mgr...@animalcreek.com>; "RobertBaldyga"<r.bald...@hackerion.com>; Subject: Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment() Maybe my first version is suitable for stable. Huacai -- Original -- From: "Marek Szyprowski"<m.szyprow...@samsung.com>; Date: Wed, Oct 25, 2017 03:21 PM To: "陈华才"<che...@lemote.com>; "Christoph Hellwig"<h...@lst.de>; Cc: "Robin Murphy"<robin.mur...@arm.com>; "Andrew Morton"<a...@linux-foundation.org>; "Fuxin Zhang"<zhan...@lemote.com>; "linux-kernel"<linux-kernel@vger.kernel.org>; "Ralf Baechle"<r...@linux-mips.org>; "JamesHogan"<james.ho...@imgtec.com>; "linux-mips"<linux-m...@linux-mips.org>; "James E . J .Bottomley"<j...@linux.vnet.ibm.com>; "Martin K . Petersen"<martin.peter...@oracle.com>; "linux-scsi"<linux-s...@vger.kernel.org>; "stable"<sta...@vger.kernel.org>; "Michael S . Tsirkin"<m...@redhat.com>; "Pawel Osciak"<pa...@osciak.com>; "Kyungmin Park"<kyungmin.p...@samsung.com>; "Michael Chan"<michael.c...@broadcom.com>; "Benjamin Herrenschmidt"<b...@kernel.crashing.org>; "Ivan Mikhaylov"<i...@ru.ibm.com>; "Tariq Toukan"<tar...@mellanox.com>; "Andy Gross"<agr...@codeaurora.org>; "Mark A . Greer"<mgr...@animalcreek.com>; "RobertBaldyga"<r.bald...@hackerion.com>; Subject: Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment() Hi Huacai, On 2017-10-25 03:22, 陈华才 wrote: > Hi, Marek > > Patch3 is needed for stable, but Patch3 depend on Patch1 and Patch2. Then patch #3 has to be reworked. First change scsi to align the block queue to dma_get_cache_alignment(). This will be safe in all cases and it will not hurt memory usage that much. Such version can be applied first and sent to stable without any dependencies. Please also describe deeply why such change is needed and what issues can be observed without it, on which systems. Then as an optimization add support for per-device cache_alignment (patches #1 and #2). I'm still not convinced that it makes sense to align DMA structures to values less than L1 cache line size. It might hurt performance, because cache coherency has its cost and it is also relevant to multi-core/smp access to any objects that are in the same l1 cache line. Memory savings that might be the results of such lower alignment are probably negligible. > > Huacai > > > -- Original -- > From: "Marek Szyprowski"<m.szyprow...@samsung.com>; > Date: Tue, Oct 24, 2017 09:30 PM > To: "Huacai Chen"<che...@lemote.com>; "Christoph Hellwig"<h...@lst.de>; > Cc: "Robin Murphy"<robin.mur...@arm.com>; "Andrew > Morton"<a...@linux-foundation.org>; "Fuxin Zhang"<zhan...@lemote.com>; > "linux-kernel"<linux-kernel@vger.kernel.org>; "Ralf > Baechle"<r...@linux-mips.org>; "JamesHogan"<james.ho...@imgtec.com>; > "linux-mips"<linux-m...@linux-mips.org>; "James E . J > .Bottomley"
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
Why this is still un-merged? Should I remove the cc-stable and resend this series? Huacai -- Original -- From: "陈华才"; Date: Thu, Oct 26, 2017 02:33 PM To: "Marek Szyprowski"; "Christoph Hellwig"; Cc: "Robin Murphy"; "Andrew Morton"; "Fuxin Zhang"; "linux-kernel"; "Ralf Baechle"; "JamesHogan"; "linux-mips"; "James E . J .Bottomley"; "Martin K . Petersen"; "linux-scsi"; "stable"; "Michael S . Tsirkin"; "Pawel Osciak"; "Kyungmin Park"; "Michael Chan"; "Benjamin Herrenschmidt"; "Ivan Mikhaylov"; "Tariq Toukan"; "Andy Gross"; "Mark A . Greer"; "RobertBaldyga"; Subject: Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment() Maybe my first version is suitable for stable. Huacai -- Original -- From: "Marek Szyprowski"; Date: Wed, Oct 25, 2017 03:21 PM To: "陈华才"; "Christoph Hellwig"; Cc: "Robin Murphy"; "Andrew Morton"; "Fuxin Zhang"; "linux-kernel"; "Ralf Baechle"; "JamesHogan"; "linux-mips"; "James E . J .Bottomley"; "Martin K . Petersen"; "linux-scsi"; "stable"; "Michael S . Tsirkin"; "Pawel Osciak"; "Kyungmin Park"; "Michael Chan"; "Benjamin Herrenschmidt"; "Ivan Mikhaylov"; "Tariq Toukan"; "Andy Gross"; "Mark A . Greer"; "RobertBaldyga"; Subject: Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment() Hi Huacai, On 2017-10-25 03:22, 陈华才 wrote: > Hi, Marek > > Patch3 is needed for stable, but Patch3 depend on Patch1 and Patch2. Then patch #3 has to be reworked. First change scsi to align the block queue to dma_get_cache_alignment(). This will be safe in all cases and it will not hurt memory usage that much. Such version can be applied first and sent to stable without any dependencies. Please also describe deeply why such change is needed and what issues can be observed without it, on which systems. Then as an optimization add support for per-device cache_alignment (patches #1 and #2). I'm still not convinced that it makes sense to align DMA structures to values less than L1 cache line size. It might hurt performance, because cache coherency has its cost and it is also relevant to multi-core/smp access to any objects that are in the same l1 cache line. Memory savings that might be the results of such lower alignment are probably negligible. > > Huacai > > > -- Original -- > From: "Marek Szyprowski"; > Date: Tue, Oct 24, 2017 09:30 PM > To: "Huacai Chen"; "Christoph Hellwig"; > Cc: "Robin Murphy"; "Andrew > Morton"; "Fuxin Zhang"; > "linux-kernel"; "Ralf > Baechle"; "JamesHogan"; > "linux-mips"; "James E . J > .Bottomley"; "Martin K . > Petersen"; > "linux-scsi"; "stable"; > "Michael S . Tsirkin"; "Pawel Osciak"; > "Kyungmin Park"; "Michael > Chan"; "Benjamin > Herrenschmidt"; "Ivan Mikhaylov"; > "Tariq Toukan"; "Andy Gross"; > "Mark A . Greer"; "Robert > Baldyga"; > Subject: Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment() > > > Hi Huacai, > > On 2017-10-23 09:12, Huacai Chen wrote: >> Make dma_get_cache_alignment() to accept a 'dev' argument. As a result, >> it can return different alignments due to different devices' I/O cache >> coherency. >> >> Currently, ARM/ARM64 and MIPS support coherent & noncoherent devices >> co-exist. This may be extended in the future, so add a new function >> pointer (i.e, get_cache_alignment) in 'struct dma_map_ops' as a generic >> solution. >> >> Cc: sta...@vger.kernel.org > I don't think this change should go to stable. > >> Cc: Michael S. Tsirkin >> Cc: Pawel Osciak >> Cc: Marek Szyprowski >> Cc: Kyungmin Park >> Cc: Michael Chan >> Cc: Benjamin Herrenschmidt >> Cc: Ivan Mikhaylov >> Cc: Tariq Toukan >> Cc: Andy Gross >> Cc: Mark A. Greer >> Cc: Robert Baldyga >> Cc: Marek Szyprowski >> Signed-off-by: Huacai Chen >> --- >>drivers/infiniband/hw/mthca/mthca_main.c | 2 +- >>drivers/media/v4l2-core/videobuf2-dma-contig.c | 2 +- >>dr
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
Maybe my first version is suitable for stable. Huacai -- Original -- From: "Marek Szyprowski"<m.szyprow...@samsung.com>; Date: Wed, Oct 25, 2017 03:21 PM To: "陈华才"<che...@lemote.com>; "Christoph Hellwig"<h...@lst.de>; Cc: "Robin Murphy"<robin.mur...@arm.com>; "Andrew Morton"<a...@linux-foundation.org>; "Fuxin Zhang"<zhan...@lemote.com>; "linux-kernel"<linux-kernel@vger.kernel.org>; "Ralf Baechle"<r...@linux-mips.org>; "JamesHogan"<james.ho...@imgtec.com>; "linux-mips"<linux-m...@linux-mips.org>; "James E . J .Bottomley"<j...@linux.vnet.ibm.com>; "Martin K . Petersen"<martin.peter...@oracle.com>; "linux-scsi"<linux-s...@vger.kernel.org>; "stable"<sta...@vger.kernel.org>; "Michael S . Tsirkin"<m...@redhat.com>; "Pawel Osciak"<pa...@osciak.com>; "Kyungmin Park"<kyungmin.p...@samsung.com>; "Michael Chan"<michael.c...@broadcom.com>; "Benjamin Herrenschmidt"<b...@kernel.crashing.org>; "Ivan Mikhaylov"<i...@ru.ibm.com>; "Tariq Toukan"<tar...@mellanox.com>; "Andy Gross"<agr...@codeaurora.org>; "Mark A . Greer"<mgr...@animalcreek.com>; "RobertBaldyga"<r.bald...@hackerion.com>; Subject: Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment() Hi Huacai, On 2017-10-25 03:22, 陈华才 wrote: > Hi, Marek > > Patch3 is needed for stable, but Patch3 depend on Patch1 and Patch2. Then patch #3 has to be reworked. First change scsi to align the block queue to dma_get_cache_alignment(). This will be safe in all cases and it will not hurt memory usage that much. Such version can be applied first and sent to stable without any dependencies. Please also describe deeply why such change is needed and what issues can be observed without it, on which systems. Then as an optimization add support for per-device cache_alignment (patches #1 and #2). I'm still not convinced that it makes sense to align DMA structures to values less than L1 cache line size. It might hurt performance, because cache coherency has its cost and it is also relevant to multi-core/smp access to any objects that are in the same l1 cache line. Memory savings that might be the results of such lower alignment are probably negligible. > > Huacai > > > -- Original -- > From: "Marek Szyprowski"<m.szyprow...@samsung.com>; > Date: Tue, Oct 24, 2017 09:30 PM > To: "Huacai Chen"<che...@lemote.com>; "Christoph Hellwig"<h...@lst.de>; > Cc: "Robin Murphy"<robin.mur...@arm.com>; "Andrew > Morton"<a...@linux-foundation.org>; "Fuxin Zhang"<zhan...@lemote.com>; > "linux-kernel"<linux-kernel@vger.kernel.org>; "Ralf > Baechle"<r...@linux-mips.org>; "JamesHogan"<james.ho...@imgtec.com>; > "linux-mips"<linux-m...@linux-mips.org>; "James E . J > .Bottomley"<j...@linux.vnet.ibm.com>; "Martin K . > Petersen"<martin.peter...@oracle.com>; > "linux-scsi"<linux-s...@vger.kernel.org>; "stable"<sta...@vger.kernel.org>; > "Michael S . Tsirkin"<m...@redhat.com>; "Pawel Osciak"<pa...@osciak.com>; > "Kyungmin Park"<kyungmin.p...@samsung.com>; "Michael > Chan"<michael.c...@broadcom.com>; "Benjamin > Herrenschmidt"<b...@kernel.crashing.org>; "Ivan Mikhaylov"<i...@ru.ibm.com>; > "Tariq Toukan"<tar...@mellanox.com>; "Andy Gross"<agr...@codeaurora.org>; > "Mark A . Greer"<mgr...@animalcreek.com>; "Robert > Baldyga"<r.bald...@hackerion.com>; > Subject: Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment() > > > Hi Huacai, > > On 2017-10-23 09:12, Huacai Chen wrote: >> Make dma_get_cache_alignment() to accept a 'dev' argument. As a result, >> it can return different alignments due to different devices' I/O cache >> coherency. >> >> Currently, ARM/ARM64 and MIPS support coherent & noncoherent devices >> co-exist. This may be extended in the future, so add a new function >> pointer (i.e, get_cache_alignment) in 'struct dma_map_ops' as a generic >> solution. >> >> Cc: sta...@vger.kernel.org > I don't think this change should go to stable. > >> Cc: Michael S. Tsirkin <m...@redhat.com> >> Cc: Pawel Osciak
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
Maybe my first version is suitable for stable. Huacai -- Original -- From: "Marek Szyprowski"; Date: Wed, Oct 25, 2017 03:21 PM To: "陈华才"; "Christoph Hellwig"; Cc: "Robin Murphy"; "Andrew Morton"; "Fuxin Zhang"; "linux-kernel"; "Ralf Baechle"; "JamesHogan"; "linux-mips"; "James E . J .Bottomley"; "Martin K . Petersen"; "linux-scsi"; "stable"; "Michael S . Tsirkin"; "Pawel Osciak"; "Kyungmin Park"; "Michael Chan"; "Benjamin Herrenschmidt"; "Ivan Mikhaylov"; "Tariq Toukan"; "Andy Gross"; "Mark A . Greer"; "RobertBaldyga"; Subject: Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment() Hi Huacai, On 2017-10-25 03:22, 陈华才 wrote: > Hi, Marek > > Patch3 is needed for stable, but Patch3 depend on Patch1 and Patch2. Then patch #3 has to be reworked. First change scsi to align the block queue to dma_get_cache_alignment(). This will be safe in all cases and it will not hurt memory usage that much. Such version can be applied first and sent to stable without any dependencies. Please also describe deeply why such change is needed and what issues can be observed without it, on which systems. Then as an optimization add support for per-device cache_alignment (patches #1 and #2). I'm still not convinced that it makes sense to align DMA structures to values less than L1 cache line size. It might hurt performance, because cache coherency has its cost and it is also relevant to multi-core/smp access to any objects that are in the same l1 cache line. Memory savings that might be the results of such lower alignment are probably negligible. > > Huacai > > > -- Original -- > From: "Marek Szyprowski"; > Date: Tue, Oct 24, 2017 09:30 PM > To: "Huacai Chen"; "Christoph Hellwig"; > Cc: "Robin Murphy"; "Andrew > Morton"; "Fuxin Zhang"; > "linux-kernel"; "Ralf > Baechle"; "JamesHogan"; > "linux-mips"; "James E . J > .Bottomley"; "Martin K . > Petersen"; > "linux-scsi"; "stable"; > "Michael S . Tsirkin"; "Pawel Osciak"; > "Kyungmin Park"; "Michael > Chan"; "Benjamin > Herrenschmidt"; "Ivan Mikhaylov"; > "Tariq Toukan"; "Andy Gross"; > "Mark A . Greer"; "Robert > Baldyga"; > Subject: Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment() > > > Hi Huacai, > > On 2017-10-23 09:12, Huacai Chen wrote: >> Make dma_get_cache_alignment() to accept a 'dev' argument. As a result, >> it can return different alignments due to different devices' I/O cache >> coherency. >> >> Currently, ARM/ARM64 and MIPS support coherent & noncoherent devices >> co-exist. This may be extended in the future, so add a new function >> pointer (i.e, get_cache_alignment) in 'struct dma_map_ops' as a generic >> solution. >> >> Cc: sta...@vger.kernel.org > I don't think this change should go to stable. > >> Cc: Michael S. Tsirkin >> Cc: Pawel Osciak >> Cc: Marek Szyprowski >> Cc: Kyungmin Park >> Cc: Michael Chan >> Cc: Benjamin Herrenschmidt >> Cc: Ivan Mikhaylov >> Cc: Tariq Toukan >> Cc: Andy Gross >> Cc: Mark A. Greer >> Cc: Robert Baldyga >> Cc: Marek Szyprowski >> Signed-off-by: Huacai Chen >> --- >>drivers/infiniband/hw/mthca/mthca_main.c | 2 +- >>drivers/media/v4l2-core/videobuf2-dma-contig.c | 2 +- >>drivers/net/ethernet/broadcom/b44.c| 8 +- >>drivers/net/ethernet/ibm/emac/core.c | 32 +++-- >>drivers/net/ethernet/ibm/emac/core.h | 14 +- >>drivers/net/ethernet/mellanox/mlx4/main.c | 2 +- >>drivers/spi/spi-qup.c | 4 +- >>drivers/tty/serial/mpsc.c | 179 >> + >>drivers/tty/serial/samsung.c | 14 +- >>include/linux/dma-mapping.h| 17 ++- > For videobuf2-dma-contig, serial/samsung and dma-mapping.h: > > Acked-by: Marek Szyprowski > > >>10 files changed, 150 insertions(+), 124 deletions(-) >> >> diff --git a/drivers/infiniband/hw/mthca/mthca_main.c >> b/drivers/infiniband/hw/mthca/mthca_main.c >> index e36a9bc..078fe8d 100644 >> --- a/drivers/infiniband/hw/mthca/
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
Hi Huacai, On 2017-10-25 03:22, 陈华才 wrote: Hi, Marek Patch3 is needed for stable, but Patch3 depend on Patch1 and Patch2. Then patch #3 has to be reworked. First change scsi to align the block queue to dma_get_cache_alignment(). This will be safe in all cases and it will not hurt memory usage that much. Such version can be applied first and sent to stable without any dependencies. Please also describe deeply why such change is needed and what issues can be observed without it, on which systems. Then as an optimization add support for per-device cache_alignment (patches #1 and #2). I'm still not convinced that it makes sense to align DMA structures to values less than L1 cache line size. It might hurt performance, because cache coherency has its cost and it is also relevant to multi-core/smp access to any objects that are in the same l1 cache line. Memory savings that might be the results of such lower alignment are probably negligible. Huacai -- Original -- From: "Marek Szyprowski"<m.szyprow...@samsung.com>; Date: Tue, Oct 24, 2017 09:30 PM To: "Huacai Chen"<che...@lemote.com>; "Christoph Hellwig"<h...@lst.de>; Cc: "Robin Murphy"<robin.mur...@arm.com>; "Andrew Morton"<a...@linux-foundation.org>; "Fuxin Zhang"<zhan...@lemote.com>; "linux-kernel"<linux-kernel@vger.kernel.org>; "Ralf Baechle"<r...@linux-mips.org>; "JamesHogan"<james.ho...@imgtec.com>; "linux-mips"<linux-m...@linux-mips.org>; "James E . J .Bottomley"<j...@linux.vnet.ibm.com>; "Martin K . Petersen"<martin.peter...@oracle.com>; "linux-scsi"<linux-s...@vger.kernel.org>; "stable"<sta...@vger.kernel.org>; "Michael S . Tsirkin"<m...@redhat.com>; "Pawel Osciak"<pa...@osciak.com>; "Kyungmin Park"<kyungmin.p...@samsung.com>; "Michael Chan"<michael.c...@broadcom.com>; "Benjamin Herrenschmidt"<b...@kernel.crashing.org>; "Ivan Mikhaylov"<i...@ru.ibm.com>; "Tariq Toukan"<tar...@mellanox.com>; "Andy Gross"<agr...@codeaurora.org>; "Mark A . Greer"<mgr...@animalcreek.com>; "Robert Baldyga"<r.bald...@hackerion.com>; Subject: Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment() Hi Huacai, On 2017-10-23 09:12, Huacai Chen wrote: Make dma_get_cache_alignment() to accept a 'dev' argument. As a result, it can return different alignments due to different devices' I/O cache coherency. Currently, ARM/ARM64 and MIPS support coherent & noncoherent devices co-exist. This may be extended in the future, so add a new function pointer (i.e, get_cache_alignment) in 'struct dma_map_ops' as a generic solution. Cc: sta...@vger.kernel.org I don't think this change should go to stable. Cc: Michael S. Tsirkin <m...@redhat.com> Cc: Pawel Osciak <pa...@osciak.com> Cc: Marek Szyprowski <m.szyprow...@samsung.com> Cc: Kyungmin Park <kyungmin.p...@samsung.com> Cc: Michael Chan <michael.c...@broadcom.com> Cc: Benjamin Herrenschmidt <b...@kernel.crashing.org> Cc: Ivan Mikhaylov <i...@ru.ibm.com> Cc: Tariq Toukan <tar...@mellanox.com> Cc: Andy Gross <agr...@codeaurora.org> Cc: Mark A. Greer <mgr...@animalcreek.com> Cc: Robert Baldyga <r.bald...@hackerion.com> Cc: Marek Szyprowski <m.szyprow...@samsung.com> Signed-off-by: Huacai Chen <che...@lemote.com> --- drivers/infiniband/hw/mthca/mthca_main.c | 2 +- drivers/media/v4l2-core/videobuf2-dma-contig.c | 2 +- drivers/net/ethernet/broadcom/b44.c| 8 +- drivers/net/ethernet/ibm/emac/core.c | 32 +++-- drivers/net/ethernet/ibm/emac/core.h | 14 +- drivers/net/ethernet/mellanox/mlx4/main.c | 2 +- drivers/spi/spi-qup.c | 4 +- drivers/tty/serial/mpsc.c | 179 + drivers/tty/serial/samsung.c | 14 +- include/linux/dma-mapping.h| 17 ++- For videobuf2-dma-contig, serial/samsung and dma-mapping.h: Acked-by: Marek Szyprowski <m.szyprow...@samsung.com> 10 files changed, 150 insertions(+), 124 deletions(-) diff --git a/drivers/infiniband/hw/mthca/mthca_main.c b/drivers/infiniband/hw/mthca/mthca_main.c index e36a9bc..078fe8d 100644 --- a/drivers/infiniband/hw/mthca/mthca_main.c +++ b/drivers/infiniband/hw/mthca/mthca_main.c @@ -416,7 +416,7 @@ static int mthca_init_icm(struct mthca_dev *mdev, /* CPU writes to non-reserved MTTs, while HCA might DMA to reserved mtts */ mdev->limits.reserved_mtts = ALIGN(mdev->limits.reserved_mtts * mdev->limits.mtt_seg_size, -
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
Hi Huacai, On 2017-10-25 03:22, 陈华才 wrote: Hi, Marek Patch3 is needed for stable, but Patch3 depend on Patch1 and Patch2. Then patch #3 has to be reworked. First change scsi to align the block queue to dma_get_cache_alignment(). This will be safe in all cases and it will not hurt memory usage that much. Such version can be applied first and sent to stable without any dependencies. Please also describe deeply why such change is needed and what issues can be observed without it, on which systems. Then as an optimization add support for per-device cache_alignment (patches #1 and #2). I'm still not convinced that it makes sense to align DMA structures to values less than L1 cache line size. It might hurt performance, because cache coherency has its cost and it is also relevant to multi-core/smp access to any objects that are in the same l1 cache line. Memory savings that might be the results of such lower alignment are probably negligible. Huacai -- Original -- From: "Marek Szyprowski"; Date: Tue, Oct 24, 2017 09:30 PM To: "Huacai Chen"; "Christoph Hellwig"; Cc: "Robin Murphy"; "Andrew Morton"; "Fuxin Zhang"; "linux-kernel"; "Ralf Baechle"; "JamesHogan"; "linux-mips"; "James E . J .Bottomley"; "Martin K . Petersen"; "linux-scsi"; "stable"; "Michael S . Tsirkin"; "Pawel Osciak"; "Kyungmin Park"; "Michael Chan"; "Benjamin Herrenschmidt"; "Ivan Mikhaylov"; "Tariq Toukan"; "Andy Gross"; "Mark A . Greer"; "Robert Baldyga"; Subject: Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment() Hi Huacai, On 2017-10-23 09:12, Huacai Chen wrote: Make dma_get_cache_alignment() to accept a 'dev' argument. As a result, it can return different alignments due to different devices' I/O cache coherency. Currently, ARM/ARM64 and MIPS support coherent & noncoherent devices co-exist. This may be extended in the future, so add a new function pointer (i.e, get_cache_alignment) in 'struct dma_map_ops' as a generic solution. Cc: sta...@vger.kernel.org I don't think this change should go to stable. Cc: Michael S. Tsirkin Cc: Pawel Osciak Cc: Marek Szyprowski Cc: Kyungmin Park Cc: Michael Chan Cc: Benjamin Herrenschmidt Cc: Ivan Mikhaylov Cc: Tariq Toukan Cc: Andy Gross Cc: Mark A. Greer Cc: Robert Baldyga Cc: Marek Szyprowski Signed-off-by: Huacai Chen --- drivers/infiniband/hw/mthca/mthca_main.c | 2 +- drivers/media/v4l2-core/videobuf2-dma-contig.c | 2 +- drivers/net/ethernet/broadcom/b44.c| 8 +- drivers/net/ethernet/ibm/emac/core.c | 32 +++-- drivers/net/ethernet/ibm/emac/core.h | 14 +- drivers/net/ethernet/mellanox/mlx4/main.c | 2 +- drivers/spi/spi-qup.c | 4 +- drivers/tty/serial/mpsc.c | 179 + drivers/tty/serial/samsung.c | 14 +- include/linux/dma-mapping.h| 17 ++- For videobuf2-dma-contig, serial/samsung and dma-mapping.h: Acked-by: Marek Szyprowski 10 files changed, 150 insertions(+), 124 deletions(-) diff --git a/drivers/infiniband/hw/mthca/mthca_main.c b/drivers/infiniband/hw/mthca/mthca_main.c index e36a9bc..078fe8d 100644 --- a/drivers/infiniband/hw/mthca/mthca_main.c +++ b/drivers/infiniband/hw/mthca/mthca_main.c @@ -416,7 +416,7 @@ static int mthca_init_icm(struct mthca_dev *mdev, /* CPU writes to non-reserved MTTs, while HCA might DMA to reserved mtts */ mdev->limits.reserved_mtts = ALIGN(mdev->limits.reserved_mtts * mdev->limits.mtt_seg_size, - dma_get_cache_alignment()) / mdev->limits.mtt_seg_size; + dma_get_cache_alignment(>pdev->dev)) / mdev->limits.mtt_seg_size; mdev->mr_table.mtt_table = mthca_alloc_icm_table(mdev, init_hca->mtt_base, mdev->limits.mtt_seg_size, diff --git a/drivers/media/v4l2-core/videobuf2-dma-contig.c b/drivers/media/v4l2-core/videobuf2-dma-contig.c index 9f389f3..1f6a9b7 100644 --- a/drivers/media/v4l2-core/videobuf2-dma-contig.c +++ b/drivers/media/v4l2-core/videobuf2-dma-contig.c @@ -484,7 +484,7 @@ static void *vb2_dc_get_userptr(struct device *dev, unsigned long vaddr, int ret = 0; struct sg_table *sgt; unsigned long contig_size; - unsigned long dma_align = dma_get_cache_alignment(); + unsigned long dma_align = dma_get_cache_alignment(dev); /* Only cache aligned DMA transfers are reliable */ if (!IS_ALIGNED(vaddr | size, dma_align)) { diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/eth
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
Hi, Marek Patch3 is needed for stable, but Patch3 depend on Patch1 and Patch2. Huacai -- Original -- From: "Marek Szyprowski"<m.szyprow...@samsung.com>; Date: Tue, Oct 24, 2017 09:30 PM To: "Huacai Chen"<che...@lemote.com>; "Christoph Hellwig"<h...@lst.de>; Cc: "Robin Murphy"<robin.mur...@arm.com>; "Andrew Morton"<a...@linux-foundation.org>; "Fuxin Zhang"<zhan...@lemote.com>; "linux-kernel"<linux-kernel@vger.kernel.org>; "Ralf Baechle"<r...@linux-mips.org>; "JamesHogan"<james.ho...@imgtec.com>; "linux-mips"<linux-m...@linux-mips.org>; "James E . J .Bottomley"<j...@linux.vnet.ibm.com>; "Martin K . Petersen"<martin.peter...@oracle.com>; "linux-scsi"<linux-s...@vger.kernel.org>; "stable"<sta...@vger.kernel.org>; "Michael S . Tsirkin"<m...@redhat.com>; "Pawel Osciak"<pa...@osciak.com>; "Kyungmin Park"<kyungmin.p...@samsung.com>; "Michael Chan"<michael.c...@broadcom.com>; "Benjamin Herrenschmidt"<b...@kernel.crashing.org>; "Ivan Mikhaylov"<i...@ru.ibm.com>; "Tariq Toukan"<tar...@mellanox.com>; "Andy Gross"<agr...@codeaurora.org>; "Mark A . Greer"<mgr...@animalcreek.com>; "Robert Baldyga"<r.bald...@hackerion.com>; Subject: Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment() Hi Huacai, On 2017-10-23 09:12, Huacai Chen wrote: > Make dma_get_cache_alignment() to accept a 'dev' argument. As a result, > it can return different alignments due to different devices' I/O cache > coherency. > > Currently, ARM/ARM64 and MIPS support coherent & noncoherent devices > co-exist. This may be extended in the future, so add a new function > pointer (i.e, get_cache_alignment) in 'struct dma_map_ops' as a generic > solution. > > Cc: sta...@vger.kernel.org I don't think this change should go to stable. > Cc: Michael S. Tsirkin <m...@redhat.com> > Cc: Pawel Osciak <pa...@osciak.com> > Cc: Marek Szyprowski <m.szyprow...@samsung.com> > Cc: Kyungmin Park <kyungmin.p...@samsung.com> > Cc: Michael Chan <michael.c...@broadcom.com> > Cc: Benjamin Herrenschmidt <b...@kernel.crashing.org> > Cc: Ivan Mikhaylov <i...@ru.ibm.com> > Cc: Tariq Toukan <tar...@mellanox.com> > Cc: Andy Gross <agr...@codeaurora.org> > Cc: Mark A. Greer <mgr...@animalcreek.com> > Cc: Robert Baldyga <r.bald...@hackerion.com> > Cc: Marek Szyprowski <m.szyprow...@samsung.com> > Signed-off-by: Huacai Chen <che...@lemote.com> > --- > drivers/infiniband/hw/mthca/mthca_main.c | 2 +- > drivers/media/v4l2-core/videobuf2-dma-contig.c | 2 +- > drivers/net/ethernet/broadcom/b44.c| 8 +- > drivers/net/ethernet/ibm/emac/core.c | 32 +++-- > drivers/net/ethernet/ibm/emac/core.h | 14 +- > drivers/net/ethernet/mellanox/mlx4/main.c | 2 +- > drivers/spi/spi-qup.c | 4 +- > drivers/tty/serial/mpsc.c | 179 > + > drivers/tty/serial/samsung.c | 14 +- > include/linux/dma-mapping.h| 17 ++- For videobuf2-dma-contig, serial/samsung and dma-mapping.h: Acked-by: Marek Szyprowski <m.szyprow...@samsung.com> > 10 files changed, 150 insertions(+), 124 deletions(-) > > diff --git a/drivers/infiniband/hw/mthca/mthca_main.c > b/drivers/infiniband/hw/mthca/mthca_main.c > index e36a9bc..078fe8d 100644 > --- a/drivers/infiniband/hw/mthca/mthca_main.c > +++ b/drivers/infiniband/hw/mthca/mthca_main.c > @@ -416,7 +416,7 @@ static int mthca_init_icm(struct mthca_dev *mdev, > > /* CPU writes to non-reserved MTTs, while HCA might DMA to reserved > mtts */ > mdev->limits.reserved_mtts = ALIGN(mdev->limits.reserved_mtts * > mdev->limits.mtt_seg_size, > -dma_get_cache_alignment()) / > mdev->limits.mtt_seg_size; > + > dma_get_cache_alignment(>pdev->dev)) / mdev->limits.mtt_seg_size; > > mdev->mr_table.mtt_table = mthca_alloc_icm_table(mdev, > init_hca->mtt_base, > > mdev->limits.mtt_seg_size, > diff --git a/drivers/media/v4l2-core/videobuf2-dma-contig.c > b/drivers/media/v4l2-core/videobuf2-dma-contig.c > index 9f389f3..1f6a9b7 100644 > --- a/drivers/media/v4l2-core/videobuf2-dma-contig.c > +++ b/drivers/media/v4l2
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
Hi, Marek Patch3 is needed for stable, but Patch3 depend on Patch1 and Patch2. Huacai -- Original -- From: "Marek Szyprowski"; Date: Tue, Oct 24, 2017 09:30 PM To: "Huacai Chen"; "Christoph Hellwig"; Cc: "Robin Murphy"; "Andrew Morton"; "Fuxin Zhang"; "linux-kernel"; "Ralf Baechle"; "JamesHogan"; "linux-mips"; "James E . J .Bottomley"; "Martin K . Petersen"; "linux-scsi"; "stable"; "Michael S . Tsirkin"; "Pawel Osciak"; "Kyungmin Park"; "Michael Chan"; "Benjamin Herrenschmidt"; "Ivan Mikhaylov"; "Tariq Toukan"; "Andy Gross"; "Mark A . Greer"; "Robert Baldyga"; Subject: Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment() Hi Huacai, On 2017-10-23 09:12, Huacai Chen wrote: > Make dma_get_cache_alignment() to accept a 'dev' argument. As a result, > it can return different alignments due to different devices' I/O cache > coherency. > > Currently, ARM/ARM64 and MIPS support coherent & noncoherent devices > co-exist. This may be extended in the future, so add a new function > pointer (i.e, get_cache_alignment) in 'struct dma_map_ops' as a generic > solution. > > Cc: sta...@vger.kernel.org I don't think this change should go to stable. > Cc: Michael S. Tsirkin > Cc: Pawel Osciak > Cc: Marek Szyprowski > Cc: Kyungmin Park > Cc: Michael Chan > Cc: Benjamin Herrenschmidt > Cc: Ivan Mikhaylov > Cc: Tariq Toukan > Cc: Andy Gross > Cc: Mark A. Greer > Cc: Robert Baldyga > Cc: Marek Szyprowski > Signed-off-by: Huacai Chen > --- > drivers/infiniband/hw/mthca/mthca_main.c | 2 +- > drivers/media/v4l2-core/videobuf2-dma-contig.c | 2 +- > drivers/net/ethernet/broadcom/b44.c| 8 +- > drivers/net/ethernet/ibm/emac/core.c | 32 +++-- > drivers/net/ethernet/ibm/emac/core.h | 14 +- > drivers/net/ethernet/mellanox/mlx4/main.c | 2 +- > drivers/spi/spi-qup.c | 4 +- > drivers/tty/serial/mpsc.c | 179 > + > drivers/tty/serial/samsung.c | 14 +- > include/linux/dma-mapping.h| 17 ++- For videobuf2-dma-contig, serial/samsung and dma-mapping.h: Acked-by: Marek Szyprowski > 10 files changed, 150 insertions(+), 124 deletions(-) > > diff --git a/drivers/infiniband/hw/mthca/mthca_main.c > b/drivers/infiniband/hw/mthca/mthca_main.c > index e36a9bc..078fe8d 100644 > --- a/drivers/infiniband/hw/mthca/mthca_main.c > +++ b/drivers/infiniband/hw/mthca/mthca_main.c > @@ -416,7 +416,7 @@ static int mthca_init_icm(struct mthca_dev *mdev, > > /* CPU writes to non-reserved MTTs, while HCA might DMA to reserved > mtts */ > mdev->limits.reserved_mtts = ALIGN(mdev->limits.reserved_mtts * > mdev->limits.mtt_seg_size, > -dma_get_cache_alignment()) / > mdev->limits.mtt_seg_size; > + > dma_get_cache_alignment(>pdev->dev)) / mdev->limits.mtt_seg_size; > > mdev->mr_table.mtt_table = mthca_alloc_icm_table(mdev, > init_hca->mtt_base, > > mdev->limits.mtt_seg_size, > diff --git a/drivers/media/v4l2-core/videobuf2-dma-contig.c > b/drivers/media/v4l2-core/videobuf2-dma-contig.c > index 9f389f3..1f6a9b7 100644 > --- a/drivers/media/v4l2-core/videobuf2-dma-contig.c > +++ b/drivers/media/v4l2-core/videobuf2-dma-contig.c > @@ -484,7 +484,7 @@ static void *vb2_dc_get_userptr(struct device *dev, > unsigned long vaddr, > int ret = 0; > struct sg_table *sgt; > unsigned long contig_size; > - unsigned long dma_align = dma_get_cache_alignment(); > + unsigned long dma_align = dma_get_cache_alignment(dev); > > /* Only cache aligned DMA transfers are reliable */ > if (!IS_ALIGNED(vaddr | size, dma_align)) { > diff --git a/drivers/net/ethernet/broadcom/b44.c > b/drivers/net/ethernet/broadcom/b44.c > index a1125d1..2f6ffe5 100644 > --- a/drivers/net/ethernet/broadcom/b44.c > +++ b/drivers/net/ethernet/broadcom/b44.c > @@ -2344,6 +2344,10 @@ static int b44_init_one(struct ssb_device *sdev, > struct net_device *dev; > struct b44 *bp; > int err; > + unsigned int dma_desc_align_size = > dma_get_cache_alignment(sdev->dma_dev); > + > + /* Setup paramaters for syncing RX/TX DMA descriptors */ > + dma_desc_sync_size = max_t(unsigned int, dma_desc_align_si
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
On Mon, Oct 23, 2017 at 03:12:44PM +0800, Huacai Chen wrote: > Make dma_get_cache_alignment() to accept a 'dev' argument. As a result, > it can return different alignments due to different devices' I/O cache > coherency. > > Currently, ARM/ARM64 and MIPS support coherent & noncoherent devices > co-exist. This may be extended in the future, so add a new function > pointer (i.e, get_cache_alignment) in 'struct dma_map_ops' as a generic > solution. > > Cc: sta...@vger.kernel.org > Cc: Michael S. Tsirkin> Cc: Pawel Osciak > Cc: Marek Szyprowski > Cc: Kyungmin Park > Cc: Michael Chan > Cc: Benjamin Herrenschmidt > Cc: Ivan Mikhaylov > Cc: Tariq Toukan > Cc: Andy Gross > Cc: Mark A. Greer > Cc: Robert Baldyga > Cc: Marek Szyprowski > Signed-off-by: Huacai Chen > --- For the mpsc stuff: Acked-by: Mark Greer
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
On Mon, Oct 23, 2017 at 03:12:44PM +0800, Huacai Chen wrote: > Make dma_get_cache_alignment() to accept a 'dev' argument. As a result, > it can return different alignments due to different devices' I/O cache > coherency. > > Currently, ARM/ARM64 and MIPS support coherent & noncoherent devices > co-exist. This may be extended in the future, so add a new function > pointer (i.e, get_cache_alignment) in 'struct dma_map_ops' as a generic > solution. > > Cc: sta...@vger.kernel.org > Cc: Michael S. Tsirkin > Cc: Pawel Osciak > Cc: Marek Szyprowski > Cc: Kyungmin Park > Cc: Michael Chan > Cc: Benjamin Herrenschmidt > Cc: Ivan Mikhaylov > Cc: Tariq Toukan > Cc: Andy Gross > Cc: Mark A. Greer > Cc: Robert Baldyga > Cc: Marek Szyprowski > Signed-off-by: Huacai Chen > --- For the mpsc stuff: Acked-by: Mark Greer
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
Hi Huacai, On 2017-10-23 09:12, Huacai Chen wrote: Make dma_get_cache_alignment() to accept a 'dev' argument. As a result, it can return different alignments due to different devices' I/O cache coherency. Currently, ARM/ARM64 and MIPS support coherent & noncoherent devices co-exist. This may be extended in the future, so add a new function pointer (i.e, get_cache_alignment) in 'struct dma_map_ops' as a generic solution. Cc: sta...@vger.kernel.org I don't think this change should go to stable. Cc: Michael S. TsirkinCc: Pawel Osciak Cc: Marek Szyprowski Cc: Kyungmin Park Cc: Michael Chan Cc: Benjamin Herrenschmidt Cc: Ivan Mikhaylov Cc: Tariq Toukan Cc: Andy Gross Cc: Mark A. Greer Cc: Robert Baldyga Cc: Marek Szyprowski Signed-off-by: Huacai Chen --- drivers/infiniband/hw/mthca/mthca_main.c | 2 +- drivers/media/v4l2-core/videobuf2-dma-contig.c | 2 +- drivers/net/ethernet/broadcom/b44.c| 8 +- drivers/net/ethernet/ibm/emac/core.c | 32 +++-- drivers/net/ethernet/ibm/emac/core.h | 14 +- drivers/net/ethernet/mellanox/mlx4/main.c | 2 +- drivers/spi/spi-qup.c | 4 +- drivers/tty/serial/mpsc.c | 179 + drivers/tty/serial/samsung.c | 14 +- include/linux/dma-mapping.h| 17 ++- For videobuf2-dma-contig, serial/samsung and dma-mapping.h: Acked-by: Marek Szyprowski 10 files changed, 150 insertions(+), 124 deletions(-) diff --git a/drivers/infiniband/hw/mthca/mthca_main.c b/drivers/infiniband/hw/mthca/mthca_main.c index e36a9bc..078fe8d 100644 --- a/drivers/infiniband/hw/mthca/mthca_main.c +++ b/drivers/infiniband/hw/mthca/mthca_main.c @@ -416,7 +416,7 @@ static int mthca_init_icm(struct mthca_dev *mdev, /* CPU writes to non-reserved MTTs, while HCA might DMA to reserved mtts */ mdev->limits.reserved_mtts = ALIGN(mdev->limits.reserved_mtts * mdev->limits.mtt_seg_size, - dma_get_cache_alignment()) / mdev->limits.mtt_seg_size; + dma_get_cache_alignment(>pdev->dev)) / mdev->limits.mtt_seg_size; mdev->mr_table.mtt_table = mthca_alloc_icm_table(mdev, init_hca->mtt_base, mdev->limits.mtt_seg_size, diff --git a/drivers/media/v4l2-core/videobuf2-dma-contig.c b/drivers/media/v4l2-core/videobuf2-dma-contig.c index 9f389f3..1f6a9b7 100644 --- a/drivers/media/v4l2-core/videobuf2-dma-contig.c +++ b/drivers/media/v4l2-core/videobuf2-dma-contig.c @@ -484,7 +484,7 @@ static void *vb2_dc_get_userptr(struct device *dev, unsigned long vaddr, int ret = 0; struct sg_table *sgt; unsigned long contig_size; - unsigned long dma_align = dma_get_cache_alignment(); + unsigned long dma_align = dma_get_cache_alignment(dev); /* Only cache aligned DMA transfers are reliable */ if (!IS_ALIGNED(vaddr | size, dma_align)) { diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/ethernet/broadcom/b44.c index a1125d1..2f6ffe5 100644 --- a/drivers/net/ethernet/broadcom/b44.c +++ b/drivers/net/ethernet/broadcom/b44.c @@ -2344,6 +2344,10 @@ static int b44_init_one(struct ssb_device *sdev, struct net_device *dev; struct b44 *bp; int err; + unsigned int dma_desc_align_size = dma_get_cache_alignment(sdev->dma_dev); + + /* Setup paramaters for syncing RX/TX DMA descriptors */ + dma_desc_sync_size = max_t(unsigned int, dma_desc_align_size, sizeof(struct dma_desc)); instance++; @@ -2587,12 +2591,8 @@ static inline void b44_pci_exit(void) static int __init b44_init(void) { - unsigned int dma_desc_align_size = dma_get_cache_alignment(); int err; - /* Setup paramaters for syncing RX/TX DMA descriptors */ - dma_desc_sync_size = max_t(unsigned int, dma_desc_align_size, sizeof(struct dma_desc)); - err = b44_pci_init(); if (err) return err; diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c index 7feff24..8dcebb2 100644 --- a/drivers/net/ethernet/ibm/emac/core.c +++ b/drivers/net/ethernet/ibm/emac/core.c @@ -1030,8 +1030,9 @@ static int emac_set_mac_address(struct net_device *ndev, void *sa) static int emac_resize_rx_ring(struct emac_instance *dev, int new_mtu) { - int rx_sync_size = emac_rx_sync_size(new_mtu); - int rx_skb_size = emac_rx_skb_size(new_mtu); + struct device *dma_dev = >ofdev->dev; + int rx_skb_size =
Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
Hi Huacai, On 2017-10-23 09:12, Huacai Chen wrote: Make dma_get_cache_alignment() to accept a 'dev' argument. As a result, it can return different alignments due to different devices' I/O cache coherency. Currently, ARM/ARM64 and MIPS support coherent & noncoherent devices co-exist. This may be extended in the future, so add a new function pointer (i.e, get_cache_alignment) in 'struct dma_map_ops' as a generic solution. Cc: sta...@vger.kernel.org I don't think this change should go to stable. Cc: Michael S. Tsirkin Cc: Pawel Osciak Cc: Marek Szyprowski Cc: Kyungmin Park Cc: Michael Chan Cc: Benjamin Herrenschmidt Cc: Ivan Mikhaylov Cc: Tariq Toukan Cc: Andy Gross Cc: Mark A. Greer Cc: Robert Baldyga Cc: Marek Szyprowski Signed-off-by: Huacai Chen --- drivers/infiniband/hw/mthca/mthca_main.c | 2 +- drivers/media/v4l2-core/videobuf2-dma-contig.c | 2 +- drivers/net/ethernet/broadcom/b44.c| 8 +- drivers/net/ethernet/ibm/emac/core.c | 32 +++-- drivers/net/ethernet/ibm/emac/core.h | 14 +- drivers/net/ethernet/mellanox/mlx4/main.c | 2 +- drivers/spi/spi-qup.c | 4 +- drivers/tty/serial/mpsc.c | 179 + drivers/tty/serial/samsung.c | 14 +- include/linux/dma-mapping.h| 17 ++- For videobuf2-dma-contig, serial/samsung and dma-mapping.h: Acked-by: Marek Szyprowski 10 files changed, 150 insertions(+), 124 deletions(-) diff --git a/drivers/infiniband/hw/mthca/mthca_main.c b/drivers/infiniband/hw/mthca/mthca_main.c index e36a9bc..078fe8d 100644 --- a/drivers/infiniband/hw/mthca/mthca_main.c +++ b/drivers/infiniband/hw/mthca/mthca_main.c @@ -416,7 +416,7 @@ static int mthca_init_icm(struct mthca_dev *mdev, /* CPU writes to non-reserved MTTs, while HCA might DMA to reserved mtts */ mdev->limits.reserved_mtts = ALIGN(mdev->limits.reserved_mtts * mdev->limits.mtt_seg_size, - dma_get_cache_alignment()) / mdev->limits.mtt_seg_size; + dma_get_cache_alignment(>pdev->dev)) / mdev->limits.mtt_seg_size; mdev->mr_table.mtt_table = mthca_alloc_icm_table(mdev, init_hca->mtt_base, mdev->limits.mtt_seg_size, diff --git a/drivers/media/v4l2-core/videobuf2-dma-contig.c b/drivers/media/v4l2-core/videobuf2-dma-contig.c index 9f389f3..1f6a9b7 100644 --- a/drivers/media/v4l2-core/videobuf2-dma-contig.c +++ b/drivers/media/v4l2-core/videobuf2-dma-contig.c @@ -484,7 +484,7 @@ static void *vb2_dc_get_userptr(struct device *dev, unsigned long vaddr, int ret = 0; struct sg_table *sgt; unsigned long contig_size; - unsigned long dma_align = dma_get_cache_alignment(); + unsigned long dma_align = dma_get_cache_alignment(dev); /* Only cache aligned DMA transfers are reliable */ if (!IS_ALIGNED(vaddr | size, dma_align)) { diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/ethernet/broadcom/b44.c index a1125d1..2f6ffe5 100644 --- a/drivers/net/ethernet/broadcom/b44.c +++ b/drivers/net/ethernet/broadcom/b44.c @@ -2344,6 +2344,10 @@ static int b44_init_one(struct ssb_device *sdev, struct net_device *dev; struct b44 *bp; int err; + unsigned int dma_desc_align_size = dma_get_cache_alignment(sdev->dma_dev); + + /* Setup paramaters for syncing RX/TX DMA descriptors */ + dma_desc_sync_size = max_t(unsigned int, dma_desc_align_size, sizeof(struct dma_desc)); instance++; @@ -2587,12 +2591,8 @@ static inline void b44_pci_exit(void) static int __init b44_init(void) { - unsigned int dma_desc_align_size = dma_get_cache_alignment(); int err; - /* Setup paramaters for syncing RX/TX DMA descriptors */ - dma_desc_sync_size = max_t(unsigned int, dma_desc_align_size, sizeof(struct dma_desc)); - err = b44_pci_init(); if (err) return err; diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c index 7feff24..8dcebb2 100644 --- a/drivers/net/ethernet/ibm/emac/core.c +++ b/drivers/net/ethernet/ibm/emac/core.c @@ -1030,8 +1030,9 @@ static int emac_set_mac_address(struct net_device *ndev, void *sa) static int emac_resize_rx_ring(struct emac_instance *dev, int new_mtu) { - int rx_sync_size = emac_rx_sync_size(new_mtu); - int rx_skb_size = emac_rx_skb_size(new_mtu); + struct device *dma_dev = >ofdev->dev; + int rx_skb_size = emac_rx_skb_size(dma_dev, new_mtu); + int rx_sync_size = emac_rx_sync_size(dma_dev, new_mtu); int i, ret = 0; int mr1_jumbo_bit_change = 0; @@ -1074,7 +1075,7 @@ static int emac_resize_rx_ring(struct emac_instance *dev, int new_mtu) BUG_ON(!dev->rx_skb[i]);
[PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
Make dma_get_cache_alignment() to accept a 'dev' argument. As a result, it can return different alignments due to different devices' I/O cache coherency. Currently, ARM/ARM64 and MIPS support coherent & noncoherent devices co-exist. This may be extended in the future, so add a new function pointer (i.e, get_cache_alignment) in 'struct dma_map_ops' as a generic solution. Cc: sta...@vger.kernel.org Cc: Michael S. TsirkinCc: Pawel Osciak Cc: Marek Szyprowski Cc: Kyungmin Park Cc: Michael Chan Cc: Benjamin Herrenschmidt Cc: Ivan Mikhaylov Cc: Tariq Toukan Cc: Andy Gross Cc: Mark A. Greer Cc: Robert Baldyga Cc: Marek Szyprowski Signed-off-by: Huacai Chen --- drivers/infiniband/hw/mthca/mthca_main.c | 2 +- drivers/media/v4l2-core/videobuf2-dma-contig.c | 2 +- drivers/net/ethernet/broadcom/b44.c| 8 +- drivers/net/ethernet/ibm/emac/core.c | 32 +++-- drivers/net/ethernet/ibm/emac/core.h | 14 +- drivers/net/ethernet/mellanox/mlx4/main.c | 2 +- drivers/spi/spi-qup.c | 4 +- drivers/tty/serial/mpsc.c | 179 + drivers/tty/serial/samsung.c | 14 +- include/linux/dma-mapping.h| 17 ++- 10 files changed, 150 insertions(+), 124 deletions(-) diff --git a/drivers/infiniband/hw/mthca/mthca_main.c b/drivers/infiniband/hw/mthca/mthca_main.c index e36a9bc..078fe8d 100644 --- a/drivers/infiniband/hw/mthca/mthca_main.c +++ b/drivers/infiniband/hw/mthca/mthca_main.c @@ -416,7 +416,7 @@ static int mthca_init_icm(struct mthca_dev *mdev, /* CPU writes to non-reserved MTTs, while HCA might DMA to reserved mtts */ mdev->limits.reserved_mtts = ALIGN(mdev->limits.reserved_mtts * mdev->limits.mtt_seg_size, - dma_get_cache_alignment()) / mdev->limits.mtt_seg_size; + dma_get_cache_alignment(>pdev->dev)) / mdev->limits.mtt_seg_size; mdev->mr_table.mtt_table = mthca_alloc_icm_table(mdev, init_hca->mtt_base, mdev->limits.mtt_seg_size, diff --git a/drivers/media/v4l2-core/videobuf2-dma-contig.c b/drivers/media/v4l2-core/videobuf2-dma-contig.c index 9f389f3..1f6a9b7 100644 --- a/drivers/media/v4l2-core/videobuf2-dma-contig.c +++ b/drivers/media/v4l2-core/videobuf2-dma-contig.c @@ -484,7 +484,7 @@ static void *vb2_dc_get_userptr(struct device *dev, unsigned long vaddr, int ret = 0; struct sg_table *sgt; unsigned long contig_size; - unsigned long dma_align = dma_get_cache_alignment(); + unsigned long dma_align = dma_get_cache_alignment(dev); /* Only cache aligned DMA transfers are reliable */ if (!IS_ALIGNED(vaddr | size, dma_align)) { diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/ethernet/broadcom/b44.c index a1125d1..2f6ffe5 100644 --- a/drivers/net/ethernet/broadcom/b44.c +++ b/drivers/net/ethernet/broadcom/b44.c @@ -2344,6 +2344,10 @@ static int b44_init_one(struct ssb_device *sdev, struct net_device *dev; struct b44 *bp; int err; + unsigned int dma_desc_align_size = dma_get_cache_alignment(sdev->dma_dev); + + /* Setup paramaters for syncing RX/TX DMA descriptors */ + dma_desc_sync_size = max_t(unsigned int, dma_desc_align_size, sizeof(struct dma_desc)); instance++; @@ -2587,12 +2591,8 @@ static inline void b44_pci_exit(void) static int __init b44_init(void) { - unsigned int dma_desc_align_size = dma_get_cache_alignment(); int err; - /* Setup paramaters for syncing RX/TX DMA descriptors */ - dma_desc_sync_size = max_t(unsigned int, dma_desc_align_size, sizeof(struct dma_desc)); - err = b44_pci_init(); if (err) return err; diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c index 7feff24..8dcebb2 100644 --- a/drivers/net/ethernet/ibm/emac/core.c +++ b/drivers/net/ethernet/ibm/emac/core.c @@ -1030,8 +1030,9 @@ static int emac_set_mac_address(struct net_device *ndev, void *sa) static int emac_resize_rx_ring(struct emac_instance *dev, int new_mtu) { - int rx_sync_size = emac_rx_sync_size(new_mtu); - int rx_skb_size = emac_rx_skb_size(new_mtu); + struct device *dma_dev = >ofdev->dev; + int rx_skb_size = emac_rx_skb_size(dma_dev, new_mtu); + int rx_sync_size = emac_rx_sync_size(dma_dev, new_mtu); int i, ret = 0; int mr1_jumbo_bit_change = 0; @@ -1074,7 +1075,7 @@ static int emac_resize_rx_ring(struct emac_instance *dev,
[PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment()
Make dma_get_cache_alignment() to accept a 'dev' argument. As a result, it can return different alignments due to different devices' I/O cache coherency. Currently, ARM/ARM64 and MIPS support coherent & noncoherent devices co-exist. This may be extended in the future, so add a new function pointer (i.e, get_cache_alignment) in 'struct dma_map_ops' as a generic solution. Cc: sta...@vger.kernel.org Cc: Michael S. Tsirkin Cc: Pawel Osciak Cc: Marek Szyprowski Cc: Kyungmin Park Cc: Michael Chan Cc: Benjamin Herrenschmidt Cc: Ivan Mikhaylov Cc: Tariq Toukan Cc: Andy Gross Cc: Mark A. Greer Cc: Robert Baldyga Cc: Marek Szyprowski Signed-off-by: Huacai Chen --- drivers/infiniband/hw/mthca/mthca_main.c | 2 +- drivers/media/v4l2-core/videobuf2-dma-contig.c | 2 +- drivers/net/ethernet/broadcom/b44.c| 8 +- drivers/net/ethernet/ibm/emac/core.c | 32 +++-- drivers/net/ethernet/ibm/emac/core.h | 14 +- drivers/net/ethernet/mellanox/mlx4/main.c | 2 +- drivers/spi/spi-qup.c | 4 +- drivers/tty/serial/mpsc.c | 179 + drivers/tty/serial/samsung.c | 14 +- include/linux/dma-mapping.h| 17 ++- 10 files changed, 150 insertions(+), 124 deletions(-) diff --git a/drivers/infiniband/hw/mthca/mthca_main.c b/drivers/infiniband/hw/mthca/mthca_main.c index e36a9bc..078fe8d 100644 --- a/drivers/infiniband/hw/mthca/mthca_main.c +++ b/drivers/infiniband/hw/mthca/mthca_main.c @@ -416,7 +416,7 @@ static int mthca_init_icm(struct mthca_dev *mdev, /* CPU writes to non-reserved MTTs, while HCA might DMA to reserved mtts */ mdev->limits.reserved_mtts = ALIGN(mdev->limits.reserved_mtts * mdev->limits.mtt_seg_size, - dma_get_cache_alignment()) / mdev->limits.mtt_seg_size; + dma_get_cache_alignment(>pdev->dev)) / mdev->limits.mtt_seg_size; mdev->mr_table.mtt_table = mthca_alloc_icm_table(mdev, init_hca->mtt_base, mdev->limits.mtt_seg_size, diff --git a/drivers/media/v4l2-core/videobuf2-dma-contig.c b/drivers/media/v4l2-core/videobuf2-dma-contig.c index 9f389f3..1f6a9b7 100644 --- a/drivers/media/v4l2-core/videobuf2-dma-contig.c +++ b/drivers/media/v4l2-core/videobuf2-dma-contig.c @@ -484,7 +484,7 @@ static void *vb2_dc_get_userptr(struct device *dev, unsigned long vaddr, int ret = 0; struct sg_table *sgt; unsigned long contig_size; - unsigned long dma_align = dma_get_cache_alignment(); + unsigned long dma_align = dma_get_cache_alignment(dev); /* Only cache aligned DMA transfers are reliable */ if (!IS_ALIGNED(vaddr | size, dma_align)) { diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/ethernet/broadcom/b44.c index a1125d1..2f6ffe5 100644 --- a/drivers/net/ethernet/broadcom/b44.c +++ b/drivers/net/ethernet/broadcom/b44.c @@ -2344,6 +2344,10 @@ static int b44_init_one(struct ssb_device *sdev, struct net_device *dev; struct b44 *bp; int err; + unsigned int dma_desc_align_size = dma_get_cache_alignment(sdev->dma_dev); + + /* Setup paramaters for syncing RX/TX DMA descriptors */ + dma_desc_sync_size = max_t(unsigned int, dma_desc_align_size, sizeof(struct dma_desc)); instance++; @@ -2587,12 +2591,8 @@ static inline void b44_pci_exit(void) static int __init b44_init(void) { - unsigned int dma_desc_align_size = dma_get_cache_alignment(); int err; - /* Setup paramaters for syncing RX/TX DMA descriptors */ - dma_desc_sync_size = max_t(unsigned int, dma_desc_align_size, sizeof(struct dma_desc)); - err = b44_pci_init(); if (err) return err; diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c index 7feff24..8dcebb2 100644 --- a/drivers/net/ethernet/ibm/emac/core.c +++ b/drivers/net/ethernet/ibm/emac/core.c @@ -1030,8 +1030,9 @@ static int emac_set_mac_address(struct net_device *ndev, void *sa) static int emac_resize_rx_ring(struct emac_instance *dev, int new_mtu) { - int rx_sync_size = emac_rx_sync_size(new_mtu); - int rx_skb_size = emac_rx_skb_size(new_mtu); + struct device *dma_dev = >ofdev->dev; + int rx_skb_size = emac_rx_skb_size(dma_dev, new_mtu); + int rx_sync_size = emac_rx_sync_size(dma_dev, new_mtu); int i, ret = 0; int mr1_jumbo_bit_change = 0; @@ -1074,7 +1075,7 @@ static int emac_resize_rx_ring(struct emac_instance *dev, int new_mtu) BUG_ON(!dev->rx_skb[i]); dev_kfree_skb(dev->rx_skb[i]); - skb_reserve(skb, EMAC_RX_SKB_HEADROOM + 2); + skb_reserve(skb, EMAC_RX_SKB_HEADROOM(dma_dev) + 2); dev->rx_desc[i].data_ptr =