CC: [email protected]
BCC: [email protected]
CC: [email protected]
TO: Horatiu Vultur <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   3d7cb6b04c3f3115719235cc6866b10326de34cd
commit: 7aacb894b1adf8b0f46e6370417350a6bac20c55 net: lan966x: Extend switchdev 
with mdb support
date:   7 months ago
:::::: branch date: 13 hours ago
:::::: commit date: 7 months ago
config: arc-randconfig-m041-20220731 
(https://download.01.org/0day-ci/archive/20220801/[email protected]/config)
compiler: arceb-elf-gcc (GCC) 12.1.0

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

smatch warnings:
drivers/net/ethernet/microchip/lan966x/lan966x_mdb.c:119 lan966x_mdb_ip_add() 
warn: passing a valid pointer to 'PTR_ERR'
drivers/net/ethernet/microchip/lan966x/lan966x_mdb.c:262 lan966x_mdb_l2_add() 
warn: passing a valid pointer to 'PTR_ERR'

vim +/PTR_ERR +119 drivers/net/ethernet/microchip/lan966x/lan966x_mdb.c

7aacb894b1adf8 Horatiu Vultur 2022-01-04  104  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  105  static int 
lan966x_mdb_ip_add(struct lan966x_port *port,
7aacb894b1adf8 Horatiu Vultur 2022-01-04  106                         const 
struct switchdev_obj_port_mdb *mdb,
7aacb894b1adf8 Horatiu Vultur 2022-01-04  107                         enum 
macaccess_entry_type type)
7aacb894b1adf8 Horatiu Vultur 2022-01-04  108  {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  109   bool cpu_port = 
netif_is_bridge_master(mdb->obj.orig_dev);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  110   struct lan966x *lan966x = 
port->lan966x;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  111   struct lan966x_mdb_entry 
*mdb_entry;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  112   unsigned char mac[ETH_ALEN];
7aacb894b1adf8 Horatiu Vultur 2022-01-04  113   bool cpu_copy = false;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  114  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  115   mdb_entry = 
lan966x_mdb_entry_get(lan966x, mdb->addr, mdb->vid);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  116   if (!mdb_entry) {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  117           mdb_entry = 
lan966x_mdb_entry_add(lan966x, mdb);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  118           if (IS_ERR(mdb_entry))
7aacb894b1adf8 Horatiu Vultur 2022-01-04 @119                   return 
PTR_ERR(mdb_entry);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  120   } else {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  121           
lan966x_mdb_encode_mac(mac, mdb_entry, type);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  122           
lan966x_mac_forget(lan966x, mac, mdb_entry->vid, type);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  123   }
7aacb894b1adf8 Horatiu Vultur 2022-01-04  124  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  125   if (cpu_port)
7aacb894b1adf8 Horatiu Vultur 2022-01-04  126           mdb_entry->cpu_copy++;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  127   else
7aacb894b1adf8 Horatiu Vultur 2022-01-04  128           mdb_entry->ports |= 
BIT(port->chip_port);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  129  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  130   /* Copy the frame to CPU only 
if the CPU is in the VLAN */
7aacb894b1adf8 Horatiu Vultur 2022-01-04  131   if 
(lan966x_vlan_cpu_member_cpu_vlan_mask(lan966x, mdb_entry->vid) &&
7aacb894b1adf8 Horatiu Vultur 2022-01-04  132       mdb_entry->cpu_copy)
7aacb894b1adf8 Horatiu Vultur 2022-01-04  133           cpu_copy = true;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  134  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  135   lan966x_mdb_encode_mac(mac, 
mdb_entry, type);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  136   return 
lan966x_mac_ip_learn(lan966x, cpu_copy,
7aacb894b1adf8 Horatiu Vultur 2022-01-04  137                               
mac, mdb_entry->vid, type);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  138  }
7aacb894b1adf8 Horatiu Vultur 2022-01-04  139  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  140  static int 
lan966x_mdb_ip_del(struct lan966x_port *port,
7aacb894b1adf8 Horatiu Vultur 2022-01-04  141                         const 
struct switchdev_obj_port_mdb *mdb,
7aacb894b1adf8 Horatiu Vultur 2022-01-04  142                         enum 
macaccess_entry_type type)
7aacb894b1adf8 Horatiu Vultur 2022-01-04  143  {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  144   bool cpu_port = 
netif_is_bridge_master(mdb->obj.orig_dev);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  145   struct lan966x *lan966x = 
port->lan966x;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  146   struct lan966x_mdb_entry 
*mdb_entry;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  147   unsigned char mac[ETH_ALEN];
7aacb894b1adf8 Horatiu Vultur 2022-01-04  148   u16 ports;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  149  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  150   mdb_entry = 
lan966x_mdb_entry_get(lan966x, mdb->addr, mdb->vid);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  151   if (!mdb_entry)
7aacb894b1adf8 Horatiu Vultur 2022-01-04  152           return -ENOENT;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  153  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  154   ports = mdb_entry->ports;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  155   if (cpu_port) {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  156           /* If there are still 
other references to the CPU port then
7aacb894b1adf8 Horatiu Vultur 2022-01-04  157            * there is no point to 
delete and add again the same entry
7aacb894b1adf8 Horatiu Vultur 2022-01-04  158            */
7aacb894b1adf8 Horatiu Vultur 2022-01-04  159           mdb_entry->cpu_copy--;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  160           if (mdb_entry->cpu_copy)
7aacb894b1adf8 Horatiu Vultur 2022-01-04  161                   return 0;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  162   } else {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  163           ports &= 
~BIT(port->chip_port);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  164   }
7aacb894b1adf8 Horatiu Vultur 2022-01-04  165  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  166   lan966x_mdb_encode_mac(mac, 
mdb_entry, type);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  167   lan966x_mac_forget(lan966x, 
mac, mdb_entry->vid, type);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  168  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  169   mdb_entry->ports = ports;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  170  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  171   if (!mdb_entry->ports && 
!mdb_entry->cpu_copy) {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  172           
list_del(&mdb_entry->list);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  173           kfree(mdb_entry);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  174           return 0;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  175   }
7aacb894b1adf8 Horatiu Vultur 2022-01-04  176  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  177   lan966x_mdb_encode_mac(mac, 
mdb_entry, type);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  178   return 
lan966x_mac_ip_learn(lan966x, mdb_entry->cpu_copy,
7aacb894b1adf8 Horatiu Vultur 2022-01-04  179                               
mac, mdb_entry->vid, type);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  180  }
7aacb894b1adf8 Horatiu Vultur 2022-01-04  181  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  182  static struct lan966x_pgid_entry 
*
7aacb894b1adf8 Horatiu Vultur 2022-01-04  183  lan966x_pgid_entry_add(struct 
lan966x *lan966x, int index, u16 ports)
7aacb894b1adf8 Horatiu Vultur 2022-01-04  184  {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  185   struct lan966x_pgid_entry 
*pgid_entry;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  186  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  187   pgid_entry = 
kzalloc(sizeof(*pgid_entry), GFP_KERNEL);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  188   if (!pgid_entry)
7aacb894b1adf8 Horatiu Vultur 2022-01-04  189           return ERR_PTR(-ENOMEM);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  190  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  191   pgid_entry->ports = ports;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  192   pgid_entry->index = index;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  193   
refcount_set(&pgid_entry->refcount, 1);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  194  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  195   
list_add_tail(&pgid_entry->list, &lan966x->pgid_entries);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  196  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  197   return pgid_entry;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  198  }
7aacb894b1adf8 Horatiu Vultur 2022-01-04  199  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  200  static struct lan966x_pgid_entry 
*
7aacb894b1adf8 Horatiu Vultur 2022-01-04  201  lan966x_pgid_entry_get(struct 
lan966x *lan966x,
7aacb894b1adf8 Horatiu Vultur 2022-01-04  202                  struct 
lan966x_mdb_entry *mdb_entry)
7aacb894b1adf8 Horatiu Vultur 2022-01-04  203  {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  204   struct lan966x_pgid_entry 
*pgid_entry;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  205   int index;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  206  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  207   /* Try to find an existing pgid 
that uses the same ports as the
7aacb894b1adf8 Horatiu Vultur 2022-01-04  208    * mdb_entry
7aacb894b1adf8 Horatiu Vultur 2022-01-04  209    */
7aacb894b1adf8 Horatiu Vultur 2022-01-04  210   list_for_each_entry(pgid_entry, 
&lan966x->pgid_entries, list) {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  211           if (pgid_entry->ports 
== mdb_entry->ports) {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  212                   
refcount_inc(&pgid_entry->refcount);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  213                   return 
pgid_entry;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  214           }
7aacb894b1adf8 Horatiu Vultur 2022-01-04  215   }
7aacb894b1adf8 Horatiu Vultur 2022-01-04  216  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  217   /* Try to find an empty pgid 
entry and allocate one in case it finds it,
7aacb894b1adf8 Horatiu Vultur 2022-01-04  218    * otherwise it means that 
there are no more resources
7aacb894b1adf8 Horatiu Vultur 2022-01-04  219    */
7aacb894b1adf8 Horatiu Vultur 2022-01-04  220   for (index = PGID_GP_START; 
index < PGID_GP_END; index++) {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  221           bool used = false;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  222  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  223           
list_for_each_entry(pgid_entry, &lan966x->pgid_entries, list) {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  224                   if 
(pgid_entry->index == index) {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  225                           used = 
true;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  226                           break;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  227                   }
7aacb894b1adf8 Horatiu Vultur 2022-01-04  228           }
7aacb894b1adf8 Horatiu Vultur 2022-01-04  229  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  230           if (!used)
7aacb894b1adf8 Horatiu Vultur 2022-01-04  231                   return 
lan966x_pgid_entry_add(lan966x, index,
7aacb894b1adf8 Horatiu Vultur 2022-01-04  232                                   
              mdb_entry->ports);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  233   }
7aacb894b1adf8 Horatiu Vultur 2022-01-04  234  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  235   return ERR_PTR(-ENOSPC);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  236  }
7aacb894b1adf8 Horatiu Vultur 2022-01-04  237  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  238  static void 
lan966x_pgid_entry_del(struct lan966x *lan966x,
7aacb894b1adf8 Horatiu Vultur 2022-01-04  239                              
struct lan966x_pgid_entry *pgid_entry)
7aacb894b1adf8 Horatiu Vultur 2022-01-04  240  {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  241   if 
(!refcount_dec_and_test(&pgid_entry->refcount))
7aacb894b1adf8 Horatiu Vultur 2022-01-04  242           return;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  243  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  244   list_del(&pgid_entry->list);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  245   kfree(pgid_entry);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  246  }
7aacb894b1adf8 Horatiu Vultur 2022-01-04  247  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  248  static int 
lan966x_mdb_l2_add(struct lan966x_port *port,
7aacb894b1adf8 Horatiu Vultur 2022-01-04  249                         const 
struct switchdev_obj_port_mdb *mdb,
7aacb894b1adf8 Horatiu Vultur 2022-01-04  250                         enum 
macaccess_entry_type type)
7aacb894b1adf8 Horatiu Vultur 2022-01-04  251  {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  252   bool cpu_port = 
netif_is_bridge_master(mdb->obj.orig_dev);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  253   struct lan966x *lan966x = 
port->lan966x;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  254   struct lan966x_pgid_entry 
*pgid_entry;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  255   struct lan966x_mdb_entry 
*mdb_entry;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  256   unsigned char mac[ETH_ALEN];
7aacb894b1adf8 Horatiu Vultur 2022-01-04  257  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  258   mdb_entry = 
lan966x_mdb_entry_get(lan966x, mdb->addr, mdb->vid);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  259   if (!mdb_entry) {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  260           mdb_entry = 
lan966x_mdb_entry_add(lan966x, mdb);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  261           if (IS_ERR(mdb_entry))
7aacb894b1adf8 Horatiu Vultur 2022-01-04 @262                   return 
PTR_ERR(mdb_entry);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  263   } else {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  264           
lan966x_pgid_entry_del(lan966x, mdb_entry->pgid);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  265           
lan966x_mdb_encode_mac(mac, mdb_entry, type);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  266           
lan966x_mac_forget(lan966x, mac, mdb_entry->vid, type);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  267   }
7aacb894b1adf8 Horatiu Vultur 2022-01-04  268  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  269   if (cpu_port) {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  270           mdb_entry->ports |= 
BIT(CPU_PORT);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  271           mdb_entry->cpu_copy++;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  272   } else {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  273           mdb_entry->ports |= 
BIT(port->chip_port);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  274   }
7aacb894b1adf8 Horatiu Vultur 2022-01-04  275  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  276   pgid_entry = 
lan966x_pgid_entry_get(lan966x, mdb_entry);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  277   if (IS_ERR(pgid_entry)) {
7aacb894b1adf8 Horatiu Vultur 2022-01-04  278           
list_del(&mdb_entry->list);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  279           kfree(mdb_entry);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  280           return 
PTR_ERR(pgid_entry);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  281   }
7aacb894b1adf8 Horatiu Vultur 2022-01-04  282   mdb_entry->pgid = pgid_entry;
7aacb894b1adf8 Horatiu Vultur 2022-01-04  283  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  284   /* Copy the frame to CPU only 
if the CPU is in the VLAN */
7aacb894b1adf8 Horatiu Vultur 2022-01-04  285   if 
(!lan966x_vlan_cpu_member_cpu_vlan_mask(lan966x, mdb_entry->vid) &&
7aacb894b1adf8 Horatiu Vultur 2022-01-04  286       mdb_entry->cpu_copy)
7aacb894b1adf8 Horatiu Vultur 2022-01-04  287           mdb_entry->ports &= 
BIT(CPU_PORT);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  288  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  289   
lan_rmw(ANA_PGID_PGID_SET(mdb_entry->ports),
7aacb894b1adf8 Horatiu Vultur 2022-01-04  290           ANA_PGID_PGID,
7aacb894b1adf8 Horatiu Vultur 2022-01-04  291           lan966x, 
ANA_PGID(pgid_entry->index));
7aacb894b1adf8 Horatiu Vultur 2022-01-04  292  
7aacb894b1adf8 Horatiu Vultur 2022-01-04  293   return 
lan966x_mac_learn(lan966x, pgid_entry->index, mdb_entry->mac,
7aacb894b1adf8 Horatiu Vultur 2022-01-04  294                            
mdb_entry->vid, type);
7aacb894b1adf8 Horatiu Vultur 2022-01-04  295  }
7aacb894b1adf8 Horatiu Vultur 2022-01-04  296  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to