Loop iterator value after terminating list_for_each_entry() is not NULL. This patch fixes incorrect iterator usage in GPIO interrupt code for SAMSUNG S5P platforms.
Unified · Split
| @@ -114,17 +114,18 @@ static __init int s5p_gpioint_add(struct s3c_gpio_chip *chip) · 113 unmodified lines | ||
| 114 | 114 | { |
| 115 | 115 | static int used_gpioint_groups = 0; |
| 116 | 116 | int group = chip->group; |
| 117 | − struct s5p_gpioint_bank *bank = NULL; | |
| 117 | + struct s5p_gpioint_bank *b, *bank = NULL; | |
| 118 | 118 | struct irq_chip_generic *gc; |
| 119 | 119 | struct irq_chip_type *ct; |
| 120 | 120 | |
| 121 | 121 | if (used_gpioint_groups >= S5P_GPIOINT_GROUP_COUNT) |
| 122 | 122 | return -ENOMEM; |
| 123 | 123 | |
| 124 | − list_for_each_entry(bank, &banks, list) { | |
| 125 | − if (group >= bank->start && | |
| 126 | − group < bank->start + bank->nr_groups) | |
| 124 | + list_for_each_entry(b, &banks, list) { | |
| 125 | + if (group >= b->start && group < b->start + b->nr_groups) { | |
| 126 | + bank = b; | |
| 127 | 127 | break; |
| 128 | + } | |
| 128 | 129 | } |
| 129 | 130 | if (!bank) |
| 130 | 131 | return -EINVAL; |