CC: [email protected] BCC: [email protected] CC: [email protected] TO: Daniel Palmer <[email protected]>
tree: git://github.com/linux-chenxing/linux.git msc313_mainlining head: 99a396728dcff78ca3eddcbd2085f11eeb8a01b8 commit: b1c18474d73ad17638f8369a7e8be6582a12c1ee [46/93] gpiolib: Move setting the flow handler and don't set it at all if there is a parent domain :::::: branch date: 18 hours ago :::::: commit date: 18 hours ago config: x86_64-randconfig-m001-20220221 (https://download.01.org/0day-ci/archive/20220224/[email protected]/config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> Reported-by: Dan Carpenter <[email protected]> smatch warnings: drivers/gpio/gpiolib.c:1166 gpiochip_hierarchy_irq_domain_alloc() warn: variable dereferenced before check 'd->parent' (see line 1155) vim +1166 drivers/gpio/gpiolib.c fdd61a013a24f2 Linus Walleij 2019-08-08 1106 fdd61a013a24f2 Linus Walleij 2019-08-08 1107 static int gpiochip_hierarchy_irq_domain_alloc(struct irq_domain *d, fdd61a013a24f2 Linus Walleij 2019-08-08 1108 unsigned int irq, fdd61a013a24f2 Linus Walleij 2019-08-08 1109 unsigned int nr_irqs, fdd61a013a24f2 Linus Walleij 2019-08-08 1110 void *data) fdd61a013a24f2 Linus Walleij 2019-08-08 1111 { fdd61a013a24f2 Linus Walleij 2019-08-08 1112 struct gpio_chip *gc = d->host_data; fdd61a013a24f2 Linus Walleij 2019-08-08 1113 irq_hw_number_t hwirq; fdd61a013a24f2 Linus Walleij 2019-08-08 1114 unsigned int type = IRQ_TYPE_NONE; fdd61a013a24f2 Linus Walleij 2019-08-08 1115 struct irq_fwspec *fwspec = data; 24258761671057 Kevin Hao 2020-01-14 1116 void *parent_arg; fdd61a013a24f2 Linus Walleij 2019-08-08 1117 unsigned int parent_hwirq; fdd61a013a24f2 Linus Walleij 2019-08-08 1118 unsigned int parent_type; fdd61a013a24f2 Linus Walleij 2019-08-08 1119 struct gpio_irq_chip *girq = &gc->irq; fdd61a013a24f2 Linus Walleij 2019-08-08 1120 int ret; fdd61a013a24f2 Linus Walleij 2019-08-08 1121 fdd61a013a24f2 Linus Walleij 2019-08-08 1122 /* fdd61a013a24f2 Linus Walleij 2019-08-08 1123 * The nr_irqs parameter is always one except for PCI multi-MSI fdd61a013a24f2 Linus Walleij 2019-08-08 1124 * so this should not happen. fdd61a013a24f2 Linus Walleij 2019-08-08 1125 */ fdd61a013a24f2 Linus Walleij 2019-08-08 1126 WARN_ON(nr_irqs != 1); fdd61a013a24f2 Linus Walleij 2019-08-08 1127 fdd61a013a24f2 Linus Walleij 2019-08-08 1128 ret = gc->irq.child_irq_domain_ops.translate(d, fwspec, &hwirq, &type); fdd61a013a24f2 Linus Walleij 2019-08-08 1129 if (ret) fdd61a013a24f2 Linus Walleij 2019-08-08 1130 return ret; fdd61a013a24f2 Linus Walleij 2019-08-08 1131 366950eeb6ee7b Kevin Hao 2020-01-20 1132 chip_dbg(gc, "allocate IRQ %d, hwirq %lu\n", irq, hwirq); fdd61a013a24f2 Linus Walleij 2019-08-08 1133 fdd61a013a24f2 Linus Walleij 2019-08-08 1134 ret = girq->child_to_parent_hwirq(gc, hwirq, type, fdd61a013a24f2 Linus Walleij 2019-08-08 1135 &parent_hwirq, &parent_type); fdd61a013a24f2 Linus Walleij 2019-08-08 1136 if (ret) { fdd61a013a24f2 Linus Walleij 2019-08-08 1137 chip_err(gc, "can't look up hwirq %lu\n", hwirq); fdd61a013a24f2 Linus Walleij 2019-08-08 1138 return ret; fdd61a013a24f2 Linus Walleij 2019-08-08 1139 } 366950eeb6ee7b Kevin Hao 2020-01-20 1140 chip_dbg(gc, "found parent hwirq %u\n", parent_hwirq); fdd61a013a24f2 Linus Walleij 2019-08-08 1141 fdd61a013a24f2 Linus Walleij 2019-08-08 1142 /* This parent only handles asserted level IRQs */ 24258761671057 Kevin Hao 2020-01-14 1143 parent_arg = girq->populate_parent_alloc_arg(gc, parent_hwirq, parent_type); 24258761671057 Kevin Hao 2020-01-14 1144 if (!parent_arg) 24258761671057 Kevin Hao 2020-01-14 1145 return -ENOMEM; 24258761671057 Kevin Hao 2020-01-14 1146 366950eeb6ee7b Kevin Hao 2020-01-20 1147 chip_dbg(gc, "alloc_irqs_parent for %d parent hwirq %d\n", fdd61a013a24f2 Linus Walleij 2019-08-08 1148 irq, parent_hwirq); c34f6dc8c9e6bb Stephen Boyd 2020-01-14 1149 irq_set_lockdep_class(irq, gc->irq.lock_key, gc->irq.request_key); 24258761671057 Kevin Hao 2020-01-14 1150 ret = irq_domain_alloc_irqs_parent(d, irq, 1, parent_arg); 880b7cf22e8ca0 Kevin Hao 2020-01-14 1151 /* 880b7cf22e8ca0 Kevin Hao 2020-01-14 1152 * If the parent irqdomain is msi, the interrupts have already 880b7cf22e8ca0 Kevin Hao 2020-01-14 1153 * been allocated, so the EEXIST is good. 880b7cf22e8ca0 Kevin Hao 2020-01-14 1154 */ 880b7cf22e8ca0 Kevin Hao 2020-01-14 @1155 if (irq_domain_is_msi(d->parent) && (ret == -EEXIST)) 880b7cf22e8ca0 Kevin Hao 2020-01-14 1156 ret = 0; fdd61a013a24f2 Linus Walleij 2019-08-08 1157 if (ret) fdd61a013a24f2 Linus Walleij 2019-08-08 1158 chip_err(gc, fdd61a013a24f2 Linus Walleij 2019-08-08 1159 "failed to allocate parent hwirq %d for hwirq %lu\n", fdd61a013a24f2 Linus Walleij 2019-08-08 1160 parent_hwirq, hwirq); fdd61a013a24f2 Linus Walleij 2019-08-08 1161 24258761671057 Kevin Hao 2020-01-14 1162 kfree(parent_arg); b1c18474d73ad1 Daniel Palmer 2021-09-30 1163 b1c18474d73ad1 Daniel Palmer 2021-09-30 1164 if (!ret) { b1c18474d73ad1 Daniel Palmer 2021-09-30 1165 /* If there is a parent domain leave the flow handler alone */ b1c18474d73ad1 Daniel Palmer 2021-09-30 @1166 if (d->parent) b1c18474d73ad1 Daniel Palmer 2021-09-30 1167 irq_domain_set_hwirq_and_chip(d, b1c18474d73ad1 Daniel Palmer 2021-09-30 1168 irq, b1c18474d73ad1 Daniel Palmer 2021-09-30 1169 hwirq, b1c18474d73ad1 Daniel Palmer 2021-09-30 1170 gc->irq.chip, b1c18474d73ad1 Daniel Palmer 2021-09-30 1171 gc); b1c18474d73ad1 Daniel Palmer 2021-09-30 1172 /* Otherwise set the flow handler supplied by the gpio driver */ b1c18474d73ad1 Daniel Palmer 2021-09-30 1173 else b1c18474d73ad1 Daniel Palmer 2021-09-30 1174 irq_domain_set_info(d, b1c18474d73ad1 Daniel Palmer 2021-09-30 1175 irq, b1c18474d73ad1 Daniel Palmer 2021-09-30 1176 hwirq, b1c18474d73ad1 Daniel Palmer 2021-09-30 1177 gc->irq.chip, b1c18474d73ad1 Daniel Palmer 2021-09-30 1178 gc, b1c18474d73ad1 Daniel Palmer 2021-09-30 1179 girq->handler, b1c18474d73ad1 Daniel Palmer 2021-09-30 1180 NULL, NULL); b1c18474d73ad1 Daniel Palmer 2021-09-30 1181 irq_set_probe(irq); b1c18474d73ad1 Daniel Palmer 2021-09-30 1182 } b1c18474d73ad1 Daniel Palmer 2021-09-30 1183 fdd61a013a24f2 Linus Walleij 2019-08-08 1184 return ret; fdd61a013a24f2 Linus Walleij 2019-08-08 1185 } fdd61a013a24f2 Linus Walleij 2019-08-08 1186 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
