All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: drivers/net/ethernet/microchip/lan966x/lan966x_mdb.c:119 lan966x_mdb_ip_add() warn: passing a valid pointer to 'PTR_ERR'
Date: Mon, 01 Aug 2022 17:49:06 +0800	[thread overview]
Message-ID: <202208011734.bXY8KTpR-lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 15696 bytes --]

CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
CC: linux-kernel(a)vger.kernel.org
TO: Horatiu Vultur <horatiu.vultur@microchip.com>

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/202208011734.bXY8KTpR-lkp(a)intel.com/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 <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

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

             reply	other threads:[~2022-08-01  9:49 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-01  9:49 kernel test robot [this message]
  -- strict thread matches above, loose matches on Subject: below --
2022-09-27  4:49 drivers/net/ethernet/microchip/lan966x/lan966x_mdb.c:119 lan966x_mdb_ip_add() warn: passing a valid pointer to 'PTR_ERR' kernel test robot
2022-11-08 20:19 kernel test robot
2023-01-04  8:35 kernel test robot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202208011734.bXY8KTpR-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.