diff mbox series

[4/7] powerpc/powernv/pci: Safety fixes for pseudobypass TCE

Message ID 955790001.2569251.1529798034743.JavaMail.zimbra@raptorengineeringinc.com (mailing list archive)
State Changes Requested
Headers show
Series Add initial version of "cognitive DMA" | expand

Commit Message

Timothy Pearson June 23, 2018, 11:53 p.m. UTC
allocation

Signed-off-by: Russell Currey <ruscur@russell.cc>
---
 arch/powerpc/platforms/powernv/pci-dma.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Alexey Kardashevskiy June 25, 2018, 3:46 a.m. UTC | #1
On Sat, 23 Jun 2018 18:53:54 -0500 (CDT)
Timothy Pearson <tpearson@raptorengineering.com> wrote:

>  allocation
> 
> Signed-off-by: Russell Currey <ruscur@russell.cc>
> ---
>  arch/powerpc/platforms/powernv/pci-dma.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/powerpc/platforms/powernv/pci-dma.c b/arch/powerpc/platforms/powernv/pci-dma.c
> index 1d5409be343e..237940a2a052 100644
> --- a/arch/powerpc/platforms/powernv/pci-dma.c
> +++ b/arch/powerpc/platforms/powernv/pci-dma.c
> @@ -29,8 +29,9 @@ static int dma_pseudo_bypass_select_tce(struct pnv_ioda_pe *pe, phys_addr_t addr
>  {
>  	int tce;
>  	__be64 old, new;
> +	unsigned long flags;
>  
> -	;
> +	spin_lock_irqsave(&pe->tce_alloc_lock, flags);


No commit log and this actually should be merged into the patch
introducing spin_lock(&pe->tce_alloc_lock).


>  	tce = bitmap_find_next_zero_area(pe->tce_bitmap,
>  					 pe->tce_count,
>  					 0,
> @@ -40,9 +41,10 @@ static int dma_pseudo_bypass_select_tce(struct pnv_ioda_pe *pe, phys_addr_t addr
>  	old = pe->tces[tce];
>  	new = cpu_to_be64(addr | TCE_PCI_READ | TCE_PCI_WRITE);
>  	pe->tces[tce] = new;
> +	mb();
>  	pe_info(pe, "allocating TCE %i 0x%016llx (old 0x%016llx)\n",
>  		tce, new, old);
> -	spin_unlock(&pe->tce_alloc_lock);
> +	spin_unlock_irqrestore(&pe->tce_alloc_lock, flags);
>  
>  	return tce;
>  }
> -- 
> 2.17.1



--
Alexey
diff mbox series

Patch

diff --git a/arch/powerpc/platforms/powernv/pci-dma.c b/arch/powerpc/platforms/powernv/pci-dma.c
index 1d5409be343e..237940a2a052 100644
--- a/arch/powerpc/platforms/powernv/pci-dma.c
+++ b/arch/powerpc/platforms/powernv/pci-dma.c
@@ -29,8 +29,9 @@  static int dma_pseudo_bypass_select_tce(struct pnv_ioda_pe *pe, phys_addr_t addr
 {
 	int tce;
 	__be64 old, new;
+	unsigned long flags;
 
-	spin_lock(&pe->tce_alloc_lock);
+	spin_lock_irqsave(&pe->tce_alloc_lock, flags);
 	tce = bitmap_find_next_zero_area(pe->tce_bitmap,
 					 pe->tce_count,
 					 0,
@@ -40,9 +41,10 @@  static int dma_pseudo_bypass_select_tce(struct pnv_ioda_pe *pe, phys_addr_t addr
 	old = pe->tces[tce];
 	new = cpu_to_be64(addr | TCE_PCI_READ | TCE_PCI_WRITE);
 	pe->tces[tce] = new;
+	mb();
 	pe_info(pe, "allocating TCE %i 0x%016llx (old 0x%016llx)\n",
 		tce, new, old);
-	spin_unlock(&pe->tce_alloc_lock);
+	spin_unlock_irqrestore(&pe->tce_alloc_lock, flags);
 
 	return tce;
 }