Hello Yingjoe Chen,
The patch c3a785c1b041: "pinctrl: mediatek: emulate GPIO interrupt on
both-edges" from Jan 27, 2015, leads to the following static checker
warning:
drivers/pinctrl/mediatek/pinctrl-mtk-common.c:1252 mtk_pctrl_init()
warn: passing devm_ allocated variable to kfree. 'pctl->eint_dual_edges'
drivers/pinctrl/mediatek/pinctrl-mtk-common.c
1213
1214 pctl->eint_dual_edges = devm_kzalloc(&pdev->dev,
^^^^^^^^^^^^
1215 sizeof(int) * pctl->devdata->ap_num,
GFP_KERNEL);
1216 if (!pctl->eint_dual_edges) {
1217 ret = -ENOMEM;
1218 goto chip_error;
1219 }
1220
1221 irq = irq_of_parse_and_map(np, 0);
1222 if (!irq) {
1223 dev_err(&pdev->dev, "couldn't parse and map irq\n");
1224 ret = -EINVAL;
1225 goto free_edges;
1226 }
1227
1228 pctl->domain = irq_domain_add_linear(np,
1229 pctl->devdata->ap_num, &irq_domain_simple_ops, NULL);
1230 if (!pctl->domain) {
1231 dev_err(&pdev->dev, "Couldn't register IRQ domain\n");
1232 ret = -ENOMEM;
1233 goto free_edges;
1234 }
1235
1236 mtk_eint_init(pctl);
1237 for (i = 0; i < pctl->devdata->ap_num; i++) {
1238 int virq = irq_create_mapping(pctl->domain, i);
1239
1240 irq_set_chip_and_handler(virq, &mtk_pinctrl_irq_chip,
1241 handle_level_irq);
1242 irq_set_chip_data(virq, pctl);
1243 set_irq_flags(virq, IRQF_VALID);
1244 };
1245
1246 irq_set_chained_handler(irq, mtk_eint_irq_handler);
1247 irq_set_handler_data(irq, pctl);
1248 set_irq_flags(irq, IRQF_VALID);
1249 return 0;
1250
1251 free_edges:
1252 kfree(pctl->eint_dual_edges);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This causes a double free. You can just leave it out since devm_
pointers are freed automatically.
1253 chip_error:
1254 gpiochip_remove(pctl->chip);
regards,
dan carpenter
--
To unsubscribe from this list: send the line "unsubscribe linux-gpio" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html