lkml.org 
[lkml]   [2020]   [May]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 58/90] pnp: Use list_for_each_entry() instead of open coding
    Date
    From: Jason Gunthorpe <jgg@mellanox.com>

    commit 01b2bafe57b19d9119413f138765ef57990921ce upstream.

    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.

    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
    [ rjw: Whitespace adjustments ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    include/linux/pnp.h | 29 +++++++++--------------------
    1 file changed, 9 insertions(+), 20 deletions(-)

    --- a/include/linux/pnp.h
    +++ b/include/linux/pnp.h
    @@ -219,10 +219,8 @@ struct pnp_card {
    #define global_to_pnp_card(n) list_entry(n, struct pnp_card, global_list)
    #define protocol_to_pnp_card(n) list_entry(n, struct pnp_card, protocol_list)
    #define to_pnp_card(n) container_of(n, struct pnp_card, dev)
    -#define pnp_for_each_card(card) \
    - for((card) = global_to_pnp_card(pnp_cards.next); \
    - (card) != global_to_pnp_card(&pnp_cards); \
    - (card) = global_to_pnp_card((card)->global_list.next))
    +#define pnp_for_each_card(card) \
    + list_for_each_entry(card, &pnp_cards, global_list)

    struct pnp_card_link {
    struct pnp_card *card;
    @@ -275,14 +273,9 @@ struct pnp_dev {
    #define card_to_pnp_dev(n) list_entry(n, struct pnp_dev, card_list)
    #define protocol_to_pnp_dev(n) list_entry(n, struct pnp_dev, protocol_list)
    #define to_pnp_dev(n) container_of(n, struct pnp_dev, dev)
    -#define pnp_for_each_dev(dev) \
    - for((dev) = global_to_pnp_dev(pnp_global.next); \
    - (dev) != global_to_pnp_dev(&pnp_global); \
    - (dev) = global_to_pnp_dev((dev)->global_list.next))
    -#define card_for_each_dev(card,dev) \
    - for((dev) = card_to_pnp_dev((card)->devices.next); \
    - (dev) != card_to_pnp_dev(&(card)->devices); \
    - (dev) = card_to_pnp_dev((dev)->card_list.next))
    +#define pnp_for_each_dev(dev) list_for_each_entry(dev, &pnp_global, global_list)
    +#define card_for_each_dev(card, dev) \
    + list_for_each_entry(dev, &(card)->devices, card_list)
    #define pnp_dev_name(dev) (dev)->name

    static inline void *pnp_get_drvdata(struct pnp_dev *pdev)
    @@ -436,14 +429,10 @@ struct pnp_protocol {
    };

    #define to_pnp_protocol(n) list_entry(n, struct pnp_protocol, protocol_list)
    -#define protocol_for_each_card(protocol,card) \
    - for((card) = protocol_to_pnp_card((protocol)->cards.next); \
    - (card) != protocol_to_pnp_card(&(protocol)->cards); \
    - (card) = protocol_to_pnp_card((card)->protocol_list.next))
    -#define protocol_for_each_dev(protocol,dev) \
    - for((dev) = protocol_to_pnp_dev((protocol)->devices.next); \
    - (dev) != protocol_to_pnp_dev(&(protocol)->devices); \
    - (dev) = protocol_to_pnp_dev((dev)->protocol_list.next))
    +#define protocol_for_each_card(protocol, card) \
    + list_for_each_entry(card, &(protocol)->cards, protocol_list)
    +#define protocol_for_each_dev(protocol, dev) \
    + list_for_each_entry(dev, &(protocol)->devices, protocol_list)

    extern struct bus_type pnp_bus_type;


    \
     
     \ /
      Last update: 2020-05-18 19:44    [W:4.725 / U:0.204 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site