From 85a1d14ea578f93547cbd872f8b411cab8204576 Mon Sep 17 00:00:00 2001 From: Peng Fan Date: Mon, 5 Jun 2017 19:47:17 +0800 Subject: [PATCH] MLK-15009 irqchip: imx-irqsteer: correct type of irqstat The type of irqstat in irqsteer_irqchip_data unsigned long, actually it needs to be 32bits width, so use unsigned int. And use sizeof(irqsteer_data->irqstat[0]), instead of 4 when alloc memory for irqsteer_data. for_each_set_bit needs the second param type is unsigned long *, so cast the irqsteer_data->irqstat to unsigned long *, this is safe here. Signed-off-by: Peng Fan --- drivers/irqchip/irq-imx-irqsteer.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/irqchip/irq-imx-irqsteer.c b/drivers/irqchip/irq-imx-irqsteer.c index 1a961f4ea06c..bc1645371f98 100644 --- a/drivers/irqchip/irq-imx-irqsteer.c +++ b/drivers/irqchip/irq-imx-irqsteer.c @@ -32,7 +32,7 @@ struct irqsteer_irqchip_data { int irq; int channum; struct irq_domain *domain; - unsigned long irqstat[]; + unsigned int irqstat[]; }; static void imx_irqsteer_irq_unmask(struct irq_data *d) @@ -130,7 +130,7 @@ static void imx_irqsteer_irq_handler(struct irq_desc *desc) imx_irqsteer_update_irqstat(irqsteer_data); irqnum = irqsteer_data->channum * 32; - for_each_set_bit(pos, irqsteer_data->irqstat, irqnum) { + for_each_set_bit(pos, (unsigned long *)irqsteer_data->irqstat, irqnum) { virq = irq_find_mapping(irqsteer_data->domain, pos); if (virq) generic_handle_irq(virq); @@ -153,7 +153,8 @@ static int imx_irqsteer_probe(struct platform_device *pdev) channum = 1; irqsteer_data = devm_kzalloc(&pdev->dev, sizeof(*irqsteer_data) + - channum * 4, + channum * + sizeof(irqsteer_data->irqstat[0]), GFP_KERNEL); if (!irqsteer_data) return -ENOMEM; -- 2.17.1