Messages in this thread Patch in this message | | | Date | Tue, 16 Feb 2021 23:33:14 -0800 | Subject | [PATCH 1/4] ipmi: kcs_bmc: Simplify irq handling | From | "William A. Kennington III" <> |
| |
Platforms specific IRQ handles repeat the same logic, calling a sub-handler in the kcs_bmc generic code that should just conform to the irqhandler callback.
Signed-off-by: William A. Kennington III <wak@google.com> --- drivers/char/ipmi/kcs_bmc.c | 10 +++++----- drivers/char/ipmi/kcs_bmc.h | 3 ++- drivers/char/ipmi/kcs_bmc_aspeed.c | 12 +----------- drivers/char/ipmi/kcs_bmc_npcm7xx.c | 12 +----------- 4 files changed, 9 insertions(+), 28 deletions(-)
diff --git a/drivers/char/ipmi/kcs_bmc.c b/drivers/char/ipmi/kcs_bmc.c index f292e74bd4a5..ccb35f1645cf 100644 --- a/drivers/char/ipmi/kcs_bmc.c +++ b/drivers/char/ipmi/kcs_bmc.c @@ -209,10 +209,11 @@ static void kcs_bmc_handle_cmd(struct kcs_bmc *kcs_bmc) } } -int kcs_bmc_handle_event(struct kcs_bmc *kcs_bmc) +irqreturn_t kcs_bmc_irq(int irq, void *arg) { + struct kcs_bmc *kcs_bmc = arg; unsigned long flags; - int ret = -ENODATA; + irqreturn_t ret = IRQ_NONE; u8 status; spin_lock_irqsave(&kcs_bmc->lock, flags); @@ -225,15 +226,14 @@ int kcs_bmc_handle_event(struct kcs_bmc *kcs_bmc) kcs_bmc_handle_cmd(kcs_bmc); else kcs_bmc_handle_data(kcs_bmc); - - ret = 0; + ret = IRQ_HANDLED; } spin_unlock_irqrestore(&kcs_bmc->lock, flags); return ret; } -EXPORT_SYMBOL(kcs_bmc_handle_event); +EXPORT_SYMBOL(kcs_bmc_irq); static inline struct kcs_bmc *to_kcs_bmc(struct file *filp) { diff --git a/drivers/char/ipmi/kcs_bmc.h b/drivers/char/ipmi/kcs_bmc.h index eb9ea4ce78b8..959d7042e6d2 100644 --- a/drivers/char/ipmi/kcs_bmc.h +++ b/drivers/char/ipmi/kcs_bmc.h @@ -6,6 +6,7 @@ #ifndef __KCS_BMC_H__ #define __KCS_BMC_H__ +#include <linux/irqreturn.h> #include <linux/miscdevice.h> /* Different phases of the KCS BMC module. @@ -102,7 +103,7 @@ static inline void *kcs_bmc_priv(struct kcs_bmc *kcs_bmc) return kcs_bmc->priv; } -int kcs_bmc_handle_event(struct kcs_bmc *kcs_bmc); +irqreturn_t kcs_bmc_irq(int irq, void *arg); struct kcs_bmc *kcs_bmc_alloc(struct device *dev, int sizeof_priv, u32 channel); #endif /* __KCS_BMC_H__ */ diff --git a/drivers/char/ipmi/kcs_bmc_aspeed.c b/drivers/char/ipmi/kcs_bmc_aspeed.c index a140203c079b..6451a8af2664 100644 --- a/drivers/char/ipmi/kcs_bmc_aspeed.c +++ b/drivers/char/ipmi/kcs_bmc_aspeed.c @@ -203,16 +203,6 @@ static void aspeed_kcs_enable_channel(struct kcs_bmc *kcs_bmc, bool enable) } } -static irqreturn_t aspeed_kcs_irq(int irq, void *arg) -{ - struct kcs_bmc *kcs_bmc = arg; - - if (!kcs_bmc_handle_event(kcs_bmc)) - return IRQ_HANDLED; - - return IRQ_NONE; -} - static int aspeed_kcs_config_irq(struct kcs_bmc *kcs_bmc, struct platform_device *pdev) { @@ -223,7 +213,7 @@ static int aspeed_kcs_config_irq(struct kcs_bmc *kcs_bmc, if (irq < 0) return irq; - return devm_request_irq(dev, irq, aspeed_kcs_irq, IRQF_SHARED, + return devm_request_irq(dev, irq, kcs_bmc_irq, IRQF_SHARED, dev_name(dev), kcs_bmc); } diff --git a/drivers/char/ipmi/kcs_bmc_npcm7xx.c b/drivers/char/ipmi/kcs_bmc_npcm7xx.c index 722f7391fe1f..f417813cf900 100644 --- a/drivers/char/ipmi/kcs_bmc_npcm7xx.c +++ b/drivers/char/ipmi/kcs_bmc_npcm7xx.c @@ -108,16 +108,6 @@ static void npcm7xx_kcs_enable_channel(struct kcs_bmc *kcs_bmc, bool enable) enable ? KCS_IE_IRQE | KCS_IE_HIRQE : 0); } -static irqreturn_t npcm7xx_kcs_irq(int irq, void *arg) -{ - struct kcs_bmc *kcs_bmc = arg; - - if (!kcs_bmc_handle_event(kcs_bmc)) - return IRQ_HANDLED; - - return IRQ_NONE; -} - static int npcm7xx_kcs_config_irq(struct kcs_bmc *kcs_bmc, struct platform_device *pdev) { @@ -128,7 +118,7 @@ static int npcm7xx_kcs_config_irq(struct kcs_bmc *kcs_bmc, if (irq < 0) return irq; - return devm_request_irq(dev, irq, npcm7xx_kcs_irq, IRQF_SHARED, + return devm_request_irq(dev, irq, kcs_bmc_irq, IRQF_SHARED, dev_name(dev), kcs_bmc); } -- 2.30.0.478.g8a0d178c01-goog
| |