On Wed, Jun 24, 2020 at 09:38:15AM +0200, Christoph Hellwig wrote: > Hi Guenter, > > can you try the patch below? This just converts the huge allocations > in mptbase to use GFP_KERNEL. Christophe (added to Cc) actually has > a scripted conversion for the rest that he hasn't posted yet, so I'll > aim for the minimal version here. >
The previously failing test passes with this patch applied on top of the mainline kernel. Guenter > > diff --git a/drivers/message/fusion/mptbase.c > b/drivers/message/fusion/mptbase.c > index 68aea22f2b8978..5216487db4fbea 100644 > --- a/drivers/message/fusion/mptbase.c > +++ b/drivers/message/fusion/mptbase.c > @@ -1324,13 +1324,13 @@ mpt_host_page_alloc(MPT_ADAPTER *ioc, pIOCInit_t > ioc_init) > return 0; /* fw doesn't need any host buffers */ > > /* spin till we get enough memory */ > - while(host_page_buffer_sz > 0) { > - > - if((ioc->HostPageBuffer = pci_alloc_consistent( > - ioc->pcidev, > - host_page_buffer_sz, > - &ioc->HostPageBuffer_dma)) != NULL) { > - > + while (host_page_buffer_sz > 0) { > + ioc->HostPageBuffer = > + dma_alloc_coherent(&ioc->pcidev->dev, > + host_page_buffer_sz, > + &ioc->HostPageBuffer_dma, > + GFP_KERNEL); > + if (ioc->HostPageBuffer) { > dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT > "host_page_buffer @ %p, dma @ %x, sz=%d > bytes\n", > ioc->name, ioc->HostPageBuffer, > @@ -2741,8 +2741,8 @@ mpt_adapter_disable(MPT_ADAPTER *ioc) > sz = ioc->alloc_sz; > dexitprintk(ioc, printk(MYIOC_s_INFO_FMT "free @ %p, sz=%d > bytes\n", > ioc->name, ioc->alloc, ioc->alloc_sz)); > - pci_free_consistent(ioc->pcidev, sz, > - ioc->alloc, ioc->alloc_dma); > + dma_free_coherent(&ioc->pcidev->dev, sz, ioc->alloc, > + ioc->alloc_dma); > ioc->reply_frames = NULL; > ioc->req_frames = NULL; > ioc->alloc = NULL; > @@ -2751,8 +2751,8 @@ mpt_adapter_disable(MPT_ADAPTER *ioc) > > if (ioc->sense_buf_pool != NULL) { > sz = (ioc->req_depth * MPT_SENSE_BUFFER_ALLOC); > - pci_free_consistent(ioc->pcidev, sz, > - ioc->sense_buf_pool, ioc->sense_buf_pool_dma); > + dma_free_coherent(&ioc->pcidev->dev, sz, ioc->sense_buf_pool, > + ioc->sense_buf_pool_dma); > ioc->sense_buf_pool = NULL; > ioc->alloc_total -= sz; > } > @@ -2802,7 +2802,7 @@ mpt_adapter_disable(MPT_ADAPTER *ioc) > "HostPageBuffer free @ %p, sz=%d bytes\n", > ioc->name, ioc->HostPageBuffer, > ioc->HostPageBuffer_sz)); > - pci_free_consistent(ioc->pcidev, ioc->HostPageBuffer_sz, > + dma_free_coherent(&ioc->pcidev->dev, ioc->HostPageBuffer_sz, > ioc->HostPageBuffer, ioc->HostPageBuffer_dma); > ioc->HostPageBuffer = NULL; > ioc->HostPageBuffer_sz = 0; > @@ -4497,7 +4497,8 @@ PrimeIocFifos(MPT_ADAPTER *ioc) > ioc->name, sz, sz, num_chain)); > > total_size += sz; > - mem = pci_alloc_consistent(ioc->pcidev, total_size, &alloc_dma); > + mem = dma_alloc_coherent(&ioc->pcidev->dev, total_size, > + &alloc_dma, GFP_KERNEL); > if (mem == NULL) { > printk(MYIOC_s_ERR_FMT "Unable to allocate Reply, > Request, Chain Buffers!\n", > ioc->name); > @@ -4574,8 +4575,8 @@ PrimeIocFifos(MPT_ADAPTER *ioc) > spin_unlock_irqrestore(&ioc->FreeQlock, flags); > > sz = (ioc->req_depth * MPT_SENSE_BUFFER_ALLOC); > - ioc->sense_buf_pool = > - pci_alloc_consistent(ioc->pcidev, sz, > &ioc->sense_buf_pool_dma); > + ioc->sense_buf_pool = dma_alloc_coherent(&ioc->pcidev->dev, sz, > + &ioc->sense_buf_pool_dma, GFP_KERNEL); > if (ioc->sense_buf_pool == NULL) { > printk(MYIOC_s_ERR_FMT "Unable to allocate Sense > Buffers!\n", > ioc->name); > @@ -4613,18 +4614,16 @@ PrimeIocFifos(MPT_ADAPTER *ioc) > > if (ioc->alloc != NULL) { > sz = ioc->alloc_sz; > - pci_free_consistent(ioc->pcidev, > - sz, > - ioc->alloc, ioc->alloc_dma); > + dma_free_coherent(&ioc->pcidev->dev, sz, ioc->alloc, > + ioc->alloc_dma); > ioc->reply_frames = NULL; > ioc->req_frames = NULL; > ioc->alloc_total -= sz; > } > if (ioc->sense_buf_pool != NULL) { > sz = (ioc->req_depth * MPT_SENSE_BUFFER_ALLOC); > - pci_free_consistent(ioc->pcidev, > - sz, > - ioc->sense_buf_pool, ioc->sense_buf_pool_dma); > + dma_free_coherent(&ioc->pcidev->dev, sz, ioc->sense_buf_pool, > + ioc->sense_buf_pool_dma); > ioc->sense_buf_pool = NULL; > } > _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu