- Fix a wrong ioremap size in mvebu-gicp
- Remove yet another compile-test case for a driver which needs an additional dependency - Fix a lock inversion scenario in the IRQ unit test suite - Remove an impossible flag situation in gic-v5 - Do not iounmap resources in gic-v5 which are managed by devm - Make sure stale, left-over interrupts in mvebu-gicp are cleared on driver init - Fix a reference counting mishap in msi-lib - Fix a dereference-before-null-ptr-check case in the riscv-imsic irqchip driver -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEzv7L6UO9uDPlPSfHEsHwGGHeVUoFAmiXkZYACgkQEsHwGGHe VUoiaw/7B/0wjf6CZdrzFW+gSBgXMA4VghVcEUySQTeE66SL5dhOM5Pw2w8z5ow5 tn2/cMZg7aAyQUt9XlPzWhHwU5Pu06Jtd32LtDX0sqf54byYybQHtoUBnNcPY7FR Anf7jr0WnXNHe+qQcccfVDtEYzF9R/HIkmp63f348wP3aS5RTbFPWk2cOPdAXOAY TeWordoDXjtzix+Ro8zk2WaD0h9oDLdHgg4eww3FUVNBvKiXIhkV7bb70t85f+gA f0eF6LJ0318e6UHwVhU+OgYzdD9uXMNTrZDKeZq/xYYIytVlCfwvKDMWFZC11ltC 89BMyghLSRkI/oV/2/gXGICRmGp7OEn6HzD/vpPv30Zfeyj0e8O/rat2uZCifrbL 9RJ4sXMJCOJUoHD3t/e7i1TDqsmVF9CdTbgwqQt6ANtypJrkVkIBqO4QvcNu8qQ5 c6lt5Y7ob+owpIhUoBmxCUaZz19wZAwRcOIkAZwoWXTrvfYjD28AveQOqHpOBvvQ WQY3pvGkvgY9vmWbIeshWhZzb+kX5Wn5WI4C7Ul5cng2WUfo1pkI6U8u9dmv0D7y LBVjnj/rXTWR0G9OyI3R9WqrGmrCnKOPMpv98lsETctBZxTrSStbOWe4dOBTe1Zh Jq1KRWZ4UE5SauOr8R/59y21E4HulVVH2WK7TUhM8paPkeYbw3o= =VUGL -----END PGP SIGNATURE----- Merge tag 'irq_urgent_for_v6.17_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip Pull irq fixes from Borislav Petkov: - Fix a wrong ioremap size in mvebu-gicp - Remove yet another compile-test case for a driver which needs an additional dependency - Fix a lock inversion scenario in the IRQ unit test suite - Remove an impossible flag situation in gic-v5 - Do not iounmap resources in gic-v5 which are managed by devm - Make sure stale, left-over interrupts in mvebu-gicp are cleared on driver init - Fix a reference counting mishap in msi-lib - Fix a dereference-before-null-ptr-check case in the riscv-imsic irqchip driver * tag 'irq_urgent_for_v6.17_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: irqchip/mvebu-gicp: Use resource_size() for ioremap() irqchip: Build IMX_MU_MSI only on ARM genirq/test: Resolve irq lock inversion warnings irqchip/gic-v5: Remove IRQD_RESEND_WHEN_IN_PROGRESS for ITS IRQs irqchip/gic-v5: iwb: Fix iounmap probe failure path irqchip/mvebu-gicp: Clear pending interrupts on init irqchip/msi-lib: Fix fwnode refcount in msi_lib_irq_domain_select() irqchip/riscv-imsic: Don't dereference before NULL pointer check
This commit is contained in:
commit
7d2fed1f3c
|
@ -554,6 +554,7 @@ config IMX_MU_MSI
|
|||
tristate "i.MX MU used as MSI controller"
|
||||
depends on OF && HAS_IOMEM
|
||||
depends on ARCH_MXC || COMPILE_TEST
|
||||
depends on ARM || ARM64
|
||||
default m if ARCH_MXC
|
||||
select IRQ_DOMAIN
|
||||
select IRQ_DOMAIN_HIERARCHY
|
||||
|
|
|
@ -973,7 +973,6 @@ static int gicv5_its_irq_domain_alloc(struct irq_domain *domain, unsigned int vi
|
|||
irqd = irq_get_irq_data(virq + i);
|
||||
irqd_set_single_target(irqd);
|
||||
irqd_set_affinity_on_activate(irqd);
|
||||
irqd_set_resend_when_in_progress(irqd);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -241,7 +241,6 @@ static int gicv5_iwb_device_probe(struct platform_device *pdev)
|
|||
struct gicv5_iwb_chip_data *iwb_node;
|
||||
void __iomem *iwb_base;
|
||||
struct resource *res;
|
||||
int ret;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res)
|
||||
|
@ -254,16 +253,10 @@ static int gicv5_iwb_device_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
iwb_node = gicv5_iwb_init_bases(iwb_base, pdev);
|
||||
if (IS_ERR(iwb_node)) {
|
||||
ret = PTR_ERR(iwb_node);
|
||||
goto out_unmap;
|
||||
}
|
||||
if (IS_ERR(iwb_node))
|
||||
return PTR_ERR(iwb_node);
|
||||
|
||||
return 0;
|
||||
|
||||
out_unmap:
|
||||
iounmap(iwb_base);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const struct of_device_id gicv5_iwb_of_match[] = {
|
||||
|
|
|
@ -133,13 +133,13 @@ int msi_lib_irq_domain_select(struct irq_domain *d, struct irq_fwspec *fwspec,
|
|||
{
|
||||
const struct msi_parent_ops *ops = d->msi_parent_ops;
|
||||
u32 busmask = BIT(bus_token);
|
||||
struct fwnode_handle *fwh;
|
||||
|
||||
if (!ops)
|
||||
return 0;
|
||||
|
||||
fwh = d->flags & IRQ_DOMAIN_FLAG_FWNODE_PARENT ? fwnode_get_parent(fwspec->fwnode)
|
||||
: fwspec->fwnode;
|
||||
struct fwnode_handle *fwh __free(fwnode_handle) =
|
||||
d->flags & IRQ_DOMAIN_FLAG_FWNODE_PARENT ? fwnode_get_parent(fwspec->fwnode)
|
||||
: fwnode_handle_get(fwspec->fwnode);
|
||||
if (fwh != d->fwnode || fwspec->param_count != 0)
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -177,6 +177,7 @@ static int mvebu_gicp_probe(struct platform_device *pdev)
|
|||
.ops = &gicp_domain_ops,
|
||||
};
|
||||
struct mvebu_gicp *gicp;
|
||||
void __iomem *base;
|
||||
int ret, i;
|
||||
|
||||
gicp = devm_kzalloc(&pdev->dev, sizeof(*gicp), GFP_KERNEL);
|
||||
|
@ -236,6 +237,15 @@ static int mvebu_gicp_probe(struct platform_device *pdev)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
base = ioremap(gicp->res->start, resource_size(gicp->res));
|
||||
if (IS_ERR(base)) {
|
||||
dev_err(&pdev->dev, "ioremap() failed. Unable to clear pending interrupts.\n");
|
||||
} else {
|
||||
for (i = 0; i < 64; i++)
|
||||
writel(i, base + GICP_CLRSPI_NSR_OFFSET);
|
||||
iounmap(base);
|
||||
}
|
||||
|
||||
return msi_create_parent_irq_domain(&info, &gicp_msi_parent_ops) ? 0 : -ENOMEM;
|
||||
}
|
||||
|
||||
|
|
|
@ -308,7 +308,6 @@ static const struct msi_parent_ops imsic_msi_parent_ops = {
|
|||
int imsic_irqdomain_init(void)
|
||||
{
|
||||
struct irq_domain_info info = {
|
||||
.fwnode = imsic->fwnode,
|
||||
.ops = &imsic_base_domain_ops,
|
||||
.host_data = imsic,
|
||||
};
|
||||
|
@ -325,6 +324,7 @@ int imsic_irqdomain_init(void)
|
|||
}
|
||||
|
||||
/* Create Base IRQ domain */
|
||||
info.fwnode = imsic->fwnode,
|
||||
imsic->base_domain = msi_create_parent_irq_domain(&info, &imsic_msi_parent_ops);
|
||||
if (!imsic->base_domain) {
|
||||
pr_err("%pfwP: failed to create IMSIC base domain\n", imsic->fwnode);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// SPDX-License-Identifier: LGPL-2.1+
|
||||
|
||||
#include <linux/cleanup.h>
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/cpumask.h>
|
||||
#include <linux/interrupt.h>
|
||||
|
@ -134,7 +135,8 @@ static void irq_shutdown_depth_test(struct kunit *test)
|
|||
disable_irq(virq);
|
||||
KUNIT_EXPECT_EQ(test, desc->depth, 1);
|
||||
|
||||
irq_shutdown_and_deactivate(desc);
|
||||
scoped_guard(raw_spinlock_irqsave, &desc->lock)
|
||||
irq_shutdown_and_deactivate(desc);
|
||||
|
||||
KUNIT_EXPECT_FALSE(test, irqd_is_activated(data));
|
||||
KUNIT_EXPECT_FALSE(test, irqd_is_started(data));
|
||||
|
|
Loading…
Reference in New Issue