Aside from good practice, this avoids a warning from gcc 10: ./include/linux/kernel.h:997:3: warning: array subscript -31 is outside array bounds of ‘struct list_head[1]’ [-Warray-bounds] 997 | ((type *)(__mptr - offsetof(type, member))); }) | ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/linux/list.h:493:2: note: in expansion of macro ‘container_of’ 493 | container_of(ptr, type, member) | ^~~~~~~~~~~~ ./include/linux/pnp.h:275:30: note: in expansion of macro ‘list_entry’ 275 | #define global_to_pnp_dev(n) list_entry(n, struct pnp_dev, global_list) | ^~~~~~~~~~ ./include/linux/pnp.h:281:11: note: in expansion of macro ‘global_to_pnp_dev’ 281 | (dev) != global_to_pnp_dev(&pnp_global); \ | ^~~~~~~~~~~~~~~~~ arch/x86/kernel/rtc.c:189:2: note: in expansion of macro ‘pnp_for_each_dev’ 189 | pnp_for_each_dev(dev) { Because the common code doesn't cast the starting list_head to the containing struct.
Showing the changes to include/linux (1 of 1 file). Show all
Unified · Split
| @@ -220,10 +220,8 @@ struct pnp_card { · 219 unmodified lines | ||
| 220 | 220 | #define global_to_pnp_card(n) list_entry(n, struct pnp_card, global_list) |
| 221 | 221 | #define protocol_to_pnp_card(n) list_entry(n, struct pnp_card, protocol_list) |
| 222 | 222 | #define to_pnp_card(n) container_of(n, struct pnp_card, dev) |
| 223 | −#define pnp_for_each_card(card) \ | |
| 224 | − for((card) = global_to_pnp_card(pnp_cards.next); \ | |
| 225 | − (card) != global_to_pnp_card(&pnp_cards); \ | |
| 226 | − (card) = global_to_pnp_card((card)->global_list.next)) | |
| 223 | +#define pnp_for_each_card(card) \ | |
| 224 | + list_for_each_entry(card, &pnp_cards, global_list) | |
| 227 | 225 | |
| 228 | 226 | struct pnp_card_link { |
| 229 | 227 | struct pnp_card *card; |
| @@ -276,14 +274,9 @@ struct pnp_dev { · 46 unmodified lines | ||
| 276 | 274 | #define card_to_pnp_dev(n) list_entry(n, struct pnp_dev, card_list) |
| 277 | 275 | #define protocol_to_pnp_dev(n) list_entry(n, struct pnp_dev, protocol_list) |
| 278 | 276 | #define to_pnp_dev(n) container_of(n, struct pnp_dev, dev) |
| 279 | −#define pnp_for_each_dev(dev) \ | |
| 280 | − for((dev) = global_to_pnp_dev(pnp_global.next); \ | |
| 281 | − (dev) != global_to_pnp_dev(&pnp_global); \ | |
| 282 | − (dev) = global_to_pnp_dev((dev)->global_list.next)) | |
| 283 | −#define card_for_each_dev(card,dev) \ | |
| 284 | − for((dev) = card_to_pnp_dev((card)->devices.next); \ | |
| 285 | − (dev) != card_to_pnp_dev(&(card)->devices); \ | |
| 286 | − (dev) = card_to_pnp_dev((dev)->card_list.next)) | |
| 277 | +#define pnp_for_each_dev(dev) list_for_each_entry(dev, &pnp_global, global_list) | |
| 278 | +#define card_for_each_dev(card, dev) \ | |
| 279 | + list_for_each_entry(dev, &(card)->devices, card_list) | |
| 287 | 280 | #define pnp_dev_name(dev) (dev)->name |
| 288 | 281 | |
| 289 | 282 | static inline void *pnp_get_drvdata(struct pnp_dev *pdev) |
| @@ -437,14 +430,10 @@ struct pnp_protocol { · 147 unmodified lines | ||
| 437 | 430 | }; |
| 438 | 431 | |
| 439 | 432 | #define to_pnp_protocol(n) list_entry(n, struct pnp_protocol, protocol_list) |
| 440 | −#define protocol_for_each_card(protocol,card) \ | |
| 441 | − for((card) = protocol_to_pnp_card((protocol)->cards.next); \ | |
| 442 | − (card) != protocol_to_pnp_card(&(protocol)->cards); \ | |
| 443 | − (card) = protocol_to_pnp_card((card)->protocol_list.next)) | |
| 444 | −#define protocol_for_each_dev(protocol,dev) \ | |
| 445 | − for((dev) = protocol_to_pnp_dev((protocol)->devices.next); \ | |
| 446 | − (dev) != protocol_to_pnp_dev(&(protocol)->devices); \ | |
| 447 | − (dev) = protocol_to_pnp_dev((dev)->protocol_list.next)) | |
| 433 | +#define protocol_for_each_card(protocol, card) \ | |
| 434 | + list_for_each_entry(card, &(protocol)->cards, protocol_list) | |
| 435 | +#define protocol_for_each_dev(protocol, dev) \ | |
| 436 | + list_for_each_entry(dev, &(protocol)->devices, protocol_list) | |
| 448 | 437 | |
| 449 | 438 | extern struct bus_type pnp_bus_type; |
| 450 | 439 | |