lkml.org 
[lkml]   [2020]   [Jul]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 06/13] task_isolation: Add driver-specific hooks
    Date
    Some drivers don't call functions that call
    task_isolation_kernel_enter() in interrupt handlers. Call it
    directly.

    Signed-off-by: Alex Belits <abelits@marvell.com>
    ---
    drivers/irqchip/irq-armada-370-xp.c | 6 ++++++
    drivers/irqchip/irq-gic-v3.c | 3 +++
    drivers/irqchip/irq-gic.c | 3 +++
    drivers/s390/cio/cio.c | 3 +++
    4 files changed, 15 insertions(+)

    diff --git a/drivers/irqchip/irq-armada-370-xp.c b/drivers/irqchip/irq-armada-370-xp.c
    index c9bdc5221b82..df7f2cce3a54 100644
    --- a/drivers/irqchip/irq-armada-370-xp.c
    +++ b/drivers/irqchip/irq-armada-370-xp.c
    @@ -29,6 +29,7 @@
    #include <linux/slab.h>
    #include <linux/syscore_ops.h>
    #include <linux/msi.h>
    +#include <linux/isolation.h>
    #include <asm/mach/arch.h>
    #include <asm/exception.h>
    #include <asm/smp_plat.h>
    @@ -473,6 +474,7 @@ static const struct irq_domain_ops armada_370_xp_mpic_irq_ops = {
    static void armada_370_xp_handle_msi_irq(struct pt_regs *regs, bool is_chained)
    {
    u32 msimask, msinr;
    + int isol_entered = 0;

    msimask = readl_relaxed(per_cpu_int_base +
    ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS)
    @@ -489,6 +491,10 @@ static void armada_370_xp_handle_msi_irq(struct pt_regs *regs, bool is_chained)
    continue;

    if (is_chained) {
    + if (!isol_entered) {
    + task_isolation_kernel_enter();
    + isol_entered = 1;
    + }
    irq = irq_find_mapping(armada_370_xp_msi_inner_domain,
    msinr - PCI_MSI_DOORBELL_START);
    generic_handle_irq(irq);
    diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
    index cc46bc2d634b..be0e0ffa0fb7 100644
    --- a/drivers/irqchip/irq-gic-v3.c
    +++ b/drivers/irqchip/irq-gic-v3.c
    @@ -18,6 +18,7 @@
    #include <linux/percpu.h>
    #include <linux/refcount.h>
    #include <linux/slab.h>
    +#include <linux/isolation.h>

    #include <linux/irqchip.h>
    #include <linux/irqchip/arm-gic-common.h>
    @@ -629,6 +630,8 @@ static asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs
    {
    u32 irqnr;

    + task_isolation_kernel_enter();
    +
    irqnr = gic_read_iar();

    if (gic_supports_nmi() &&
    diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
    index c17fabd6741e..fde547a31566 100644
    --- a/drivers/irqchip/irq-gic.c
    +++ b/drivers/irqchip/irq-gic.c
    @@ -35,6 +35,7 @@
    #include <linux/interrupt.h>
    #include <linux/percpu.h>
    #include <linux/slab.h>
    +#include <linux/isolation.h>
    #include <linux/irqchip.h>
    #include <linux/irqchip/chained_irq.h>
    #include <linux/irqchip/arm-gic.h>
    @@ -353,6 +354,8 @@ static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs)
    struct gic_chip_data *gic = &gic_data[0];
    void __iomem *cpu_base = gic_data_cpu_base(gic);

    + task_isolation_kernel_enter();
    +
    do {
    irqstat = readl_relaxed(cpu_base + GIC_CPU_INTACK);
    irqnr = irqstat & GICC_IAR_INT_ID_MASK;
    diff --git a/drivers/s390/cio/cio.c b/drivers/s390/cio/cio.c
    index 6d716db2a46a..beab88881b6d 100644
    --- a/drivers/s390/cio/cio.c
    +++ b/drivers/s390/cio/cio.c
    @@ -20,6 +20,7 @@
    #include <linux/kernel_stat.h>
    #include <linux/interrupt.h>
    #include <linux/irq.h>
    +#include <linux/isolation.h>
    #include <asm/cio.h>
    #include <asm/delay.h>
    #include <asm/irq.h>
    @@ -584,6 +585,8 @@ void cio_tsch(struct subchannel *sch)
    struct irb *irb;
    int irq_context;

    + task_isolation_kernel_enter();
    +
    irb = this_cpu_ptr(&cio_irb);
    /* Store interrupt response block to lowcore. */
    if (tsch(sch->schid, irb) != 0)
    --
    2.26.2
    \
     
     \ /
      Last update: 2020-07-22 16:55    [W:3.094 / U:1.268 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site