History

pnp: Use list_for_each_entry() instead of open coding

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.

Jason Gunthorpe committed 6 years ago

Commit 01b2baf1 parent ae83d0b1 file · +9 −20Browse files

Showing the changes to include/linux (1 of 1 file). Show all

Unified · Split

include/linux/pnp.h+9−20
@@ -220,10 +220,8 @@ struct pnp_card { · 219 unmodified lines
220#define global_to_pnp_card(n) list_entry(n, struct pnp_card, global_list)220#define global_to_pnp_card(n) list_entry(n, struct pnp_card, global_list)
221#define protocol_to_pnp_card(n) list_entry(n, struct pnp_card, protocol_list)221#define protocol_to_pnp_card(n) list_entry(n, struct pnp_card, protocol_list)
222#define to_pnp_card(n) container_of(n, struct pnp_card, dev)222#define to_pnp_card(n) container_of(n, struct pnp_card, dev)
223#define pnp_for_each_card(card) \223#define pnp_for_each_card(card) \
224 for((card) = global_to_pnp_card(pnp_cards.next); \224 list_for_each_entry(card, &pnp_cards, global_list)
225 (card) != global_to_pnp_card(&pnp_cards); \
226 (card) = global_to_pnp_card((card)->global_list.next))
227 225
228struct pnp_card_link {226struct pnp_card_link {
229 struct pnp_card *card;227 struct pnp_card *card;
@@ -276,14 +274,9 @@ struct pnp_dev { · 46 unmodified lines
276#define card_to_pnp_dev(n) list_entry(n, struct pnp_dev, card_list)274#define card_to_pnp_dev(n) list_entry(n, struct pnp_dev, card_list)
277#define protocol_to_pnp_dev(n) list_entry(n, struct pnp_dev, protocol_list)275#define protocol_to_pnp_dev(n) list_entry(n, struct pnp_dev, protocol_list)
278#define to_pnp_dev(n) container_of(n, struct pnp_dev, dev)276#define to_pnp_dev(n) container_of(n, struct pnp_dev, dev)
279#define pnp_for_each_dev(dev) \277#define pnp_for_each_dev(dev) list_for_each_entry(dev, &pnp_global, global_list)
280 for((dev) = global_to_pnp_dev(pnp_global.next); \278#define card_for_each_dev(card, dev) \
281 (dev) != global_to_pnp_dev(&pnp_global); \279 list_for_each_entry(dev, &(card)->devices, card_list)
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))
287#define pnp_dev_name(dev) (dev)->name280#define pnp_dev_name(dev) (dev)->name
288 281
289static inline void *pnp_get_drvdata(struct pnp_dev *pdev)282static inline void *pnp_get_drvdata(struct pnp_dev *pdev)
@@ -437,14 +430,10 @@ struct pnp_protocol { · 147 unmodified lines
437};430};
438 431
439#define to_pnp_protocol(n) list_entry(n, struct pnp_protocol, protocol_list)432#define to_pnp_protocol(n) list_entry(n, struct pnp_protocol, protocol_list)
440#define protocol_for_each_card(protocol,card) \433#define protocol_for_each_card(protocol, card) \
441 for((card) = protocol_to_pnp_card((protocol)->cards.next); \434 list_for_each_entry(card, &(protocol)->cards, protocol_list)
442 (card) != protocol_to_pnp_card(&(protocol)->cards); \435#define protocol_for_each_dev(protocol, dev) \
443 (card) = protocol_to_pnp_card((card)->protocol_list.next))436 list_for_each_entry(dev, &(protocol)->devices, protocol_list)
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))
448 437
449extern struct bus_type pnp_bus_type;438extern struct bus_type pnp_bus_type;
450 439