[bug report] rocker: Change world_ops API and implementation to be switchdev independant

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Arkadi Sharshevsky,

The patch 00fc0c51e35b: "rocker: Change world_ops API and
implementation to be switchdev independant" from Jun 8, 2017, leads
to the following Sparse warnings:

drivers/net/ethernet/rocker/rocker_ofdpa.c:1180:56: warning: incorrect type in argument 3 (different base types)
drivers/net/ethernet/rocker/rocker_ofdpa.c:1180:56:    expected restricted gfp_t [usertype] flags
drivers/net/ethernet/rocker/rocker_ofdpa.c:1180:56:    got unsigned long
drivers/net/ethernet/rocker/rocker_ofdpa.c:1459:48: warning: incorrect type in argument 3 (different base types)
drivers/net/ethernet/rocker/rocker_ofdpa.c:1459:48:    expected restricted gfp_t [usertype] flags
drivers/net/ethernet/rocker/rocker_ofdpa.c:1459:48:    got unsigned long

drivers/net/ethernet/rocker/rocker_ofdpa.c
  1167  static int ofdpa_group_l2_fan_out(struct ofdpa_port *ofdpa_port,
  1168                                    int flags, u8 group_count,
  1169                                    const u32 *group_ids, u32 group_id)
  1170  {
  1171          struct ofdpa_group_tbl_entry *entry;
  1172  
  1173          entry = kzalloc(sizeof(*entry), GFP_KERNEL);
                                                ^^^^^^^^^^
We're sleeping here.  Should this be testing flags and using GFP_ATOMIC?

  1174          if (!entry)
  1175                  return -ENOMEM;
  1176  
  1177          entry->group_id = group_id;
  1178          entry->group_count = group_count;
  1179  
  1180          entry->group_ids = kcalloc(flags, group_count, sizeof(u32));
                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
These are in the wrong order so it won't allocate the right amount of
memory ever.  Also these are not gfp_t flags, they're a custom flag for
this driver.  The one thing that they have in common is a "no sleep"
option, so we might want to test for that and ensure that kmalloc()
doesn't sleep.  I don't know...

  1181          if (!entry->group_ids) {
  1182                  kfree(entry);
  1183                  return -ENOMEM;
  1184          }
  1185          memcpy(entry->group_ids, group_ids, group_count * sizeof(u32));
  1186  
  1187          return ofdpa_group_tbl_do(ofdpa_port, flags, entry);
  1188  }


[ snip ]

  1447  static int ofdpa_port_vlan_flood_group(struct ofdpa_port *ofdpa_port,
  1448                                         int flags, __be16 vlan_id)
  1449  {
  1450          struct ofdpa_port *p;
  1451          const struct ofdpa *ofdpa = ofdpa_port->ofdpa;
  1452          unsigned int port_count = ofdpa->rocker->port_count;
  1453          u32 group_id = ROCKER_GROUP_L2_FLOOD(vlan_id, 0);
  1454          u32 *group_ids;
  1455          u8 group_count = 0;
  1456          int err = 0;
  1457          int i;
  1458  
  1459          group_ids = kcalloc(flags, port_count, sizeof(u32));
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Same.

  1460          if (!group_ids)
  1461                  return -ENOMEM;
  1462  


regards,
dan carpenter
--
To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Kernel Development]     [Kernel Announce]     [Kernel Newbies]     [Linux Networking Development]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Device Mapper]

  Powered by Linux