From 10ebd8556b7990499c896a550e3d416b444211e6 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Fri, 10 May 2024 02:23:07 +0000
Subject: [PATCH] add led
---
kernel/arch/powerpc/platforms/pseries/iommu.c | 31 +++++++++++--------------------
1 files changed, 11 insertions(+), 20 deletions(-)
diff --git a/kernel/arch/powerpc/platforms/pseries/iommu.c b/kernel/arch/powerpc/platforms/pseries/iommu.c
index f05555d..245f1f8 100644
--- a/kernel/arch/powerpc/platforms/pseries/iommu.c
+++ b/kernel/arch/powerpc/platforms/pseries/iommu.c
@@ -24,7 +24,6 @@
#include <linux/of.h>
#include <linux/iommu.h>
#include <linux/rculist.h>
-#include <linux/local_lock.h>
#include <asm/io.h>
#include <asm/prom.h>
#include <asm/rtas.h>
@@ -191,13 +190,7 @@
return ret;
}
-struct tce_page {
- __be64 * page;
- local_lock_t lock;
-};
-static DEFINE_PER_CPU(struct tce_page, tce_page) = {
- .lock = INIT_LOCAL_LOCK(lock),
-};
+static DEFINE_PER_CPU(__be64 *, tce_page);
static int tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum,
long npages, unsigned long uaddr,
@@ -219,10 +212,9 @@
direction, attrs);
}
- /* to protect tcep and the page behind it */
- local_lock_irqsave(&tce_page.lock, flags);
+ local_irq_save(flags); /* to protect tcep and the page behind it */
- tcep = __this_cpu_read(tce_page.page);
+ tcep = __this_cpu_read(tce_page);
/* This is safe to do since interrupts are off when we're called
* from iommu_alloc{,_sg}()
@@ -231,12 +223,12 @@
tcep = (__be64 *)__get_free_page(GFP_ATOMIC);
/* If allocation fails, fall back to the loop implementation */
if (!tcep) {
- local_unlock_irqrestore(&tce_page.lock, flags);
+ local_irq_restore(flags);
return tce_build_pSeriesLP(tbl->it_index, tcenum,
tbl->it_page_shift,
npages, uaddr, direction, attrs);
}
- __this_cpu_write(tce_page.page, tcep);
+ __this_cpu_write(tce_page, tcep);
}
rpn = __pa(uaddr) >> TCE_SHIFT;
@@ -266,7 +258,7 @@
tcenum += limit;
} while (npages > 0 && !rc);
- local_unlock_irqrestore(&tce_page.lock, flags);
+ local_irq_restore(flags);
if (unlikely(rc == H_NOT_ENOUGH_RESOURCES)) {
ret = (int)rc;
@@ -437,17 +429,16 @@
DMA_BIDIRECTIONAL, 0);
}
- /* to protect tcep and the page behind it */
- local_lock_irq(&tce_page.lock);
- tcep = __this_cpu_read(tce_page.page);
+ local_irq_disable(); /* to protect tcep and the page behind it */
+ tcep = __this_cpu_read(tce_page);
if (!tcep) {
tcep = (__be64 *)__get_free_page(GFP_ATOMIC);
if (!tcep) {
- local_unlock_irq(&tce_page.lock);
+ local_irq_enable();
return -ENOMEM;
}
- __this_cpu_write(tce_page.page, tcep);
+ __this_cpu_write(tce_page, tcep);
}
proto_tce = TCE_PCI_READ | TCE_PCI_WRITE;
@@ -490,7 +481,7 @@
/* error cleanup: caller will clear whole range */
- local_unlock_irq(&tce_page.lock);
+ local_irq_enable();
return rc;
}
--
Gitblit v1.6.2