On 13/05/2025 20:29, Jakub Kicinski wrote:
On Tue, 13 May 2025 15:13:12 +0300 Roger Quadros wrote:
quoted
+ mutex_lock(&port->rxnfc_lock);
+ loc = am65_cpsw_policer_find_match(port, &cfg);
+ if (loc >= 0 && loc != fs->location) {
+ netdev_info(port->ndev,
+ "rule already exists in location %d. not adding\n",
+ loc);
+ mutex_unlock(&port->rxnfc_lock);
+ return -EINVAL;
+ }
+
+ /* delete exisiting rule */
+ if (loc >= 0) {
+ rule = am65_cpsw_get_rule(port, loc);
+ if (rule)
+ am65_cpsw_del_rule(port, rule);
+ }
+
+ rule = devm_kzalloc(port->common->dev, sizeof(*rule), GFP_KERNEL);
please don't use devm_ for objects you must support explicitly freeing
OK.
quoted
+ if (!rule)
+ return -ENOMEM;
missing unlock
Ah, will fix.
quoted
+
+ INIT_LIST_HEAD(&rule->list);
+ memcpy(&rule->cfg, &cfg, sizeof(cfg));
+ rule->location = fs->location;
+ ret = am65_cpsw_add_rule(port, rule);
And then here on error we need to kfree(rule)
quoted
+ mutex_unlock(&port->rxnfc_lock);
--
cheers,
-roger