Skip to content

Commit 9b3f3a7

Browse files
committed
realtek: pcs: replace __free() auto-cleanup stuff
Upstream netdev maintainers disregard both variable declarations mid-function and usage of __free() for auto-cleanup [1]. To avoid any pain when trying to upstream the PCS driver at some point, adjust that now before forgetting it. [1] https://www.kernel.org/doc/html/next/process/maintainer-netdev.html#using-device-managed-and-cleanup-h-constructs Link: openwrt/openwrt#23694 Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
1 parent 9fb5a25 commit 9b3f3a7

1 file changed

Lines changed: 33 additions & 22 deletions

File tree

target/linux/realtek/files-6.18/drivers/net/pcs/pcs-rtl-otto.c

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4248,51 +4248,62 @@ static struct rtpcs_serdes *rtpcs_find_serdes(struct rtpcs_ctrl *ctrl,
42484248
static int rtpcs_map_links(struct device *dev, struct rtpcs_ctrl *ctrl)
42494249
{
42504250
struct fwnode_handle *fw_dev = dev_fwnode(dev);
4251-
struct fwnode_handle *fw_switch __free(fwnode_handle) = fwnode_get_parent(fw_dev);
4251+
struct fwnode_handle *fw_switch, *fw_ports;
4252+
int ret = 0;
4253+
4254+
fw_switch = fwnode_get_parent(fw_dev);
42524255
if (!fw_switch)
42534256
return -ENODEV;
42544257

4255-
struct fwnode_handle *fw_ports __free(fwnode_handle) =
4256-
fwnode_get_named_child_node(fw_switch, "ethernet-ports");
4257-
if (!fw_ports)
4258-
return dev_err_probe(dev, -ENODEV, "%pfwP missing ethernet-ports\n", fw_switch);
4258+
fw_ports = fwnode_get_named_child_node(fw_switch, "ethernet-ports");
4259+
if (!fw_ports) {
4260+
ret = dev_err_probe(dev, -ENODEV, "%pfwP missing ethernet-ports\n",
4261+
fw_switch);
4262+
goto put_switch;
4263+
}
42594264

42604265
fwnode_for_each_child_node_scoped(fw_ports, fw_port) {
42614266
struct fwnode_reference_args args;
42624267
struct rtpcs_serdes *sds;
4263-
int link_idx, ret;
4268+
int link_idx;
42644269
u32 pn;
42654270

42664271
if (fwnode_property_read_u32(fw_port, "reg", &pn))
42674272
continue;
42684273

4269-
ret = fwnode_property_get_reference_args(fw_port, "pcs-handle", "#pcs-cells",
4270-
-1, 0, &args);
4271-
if (ret)
4274+
if (fwnode_property_get_reference_args(fw_port, "pcs-handle", "#pcs-cells",
4275+
-1, 0, &args))
42724276
continue;
42734277

4274-
struct fwnode_handle *fw_pcs __free(fwnode_handle) = args.fwnode;
42754278
link_idx = args.args[0];
4276-
4277-
if (link_idx >= RTPCS_MAX_LINKS_PER_SDS)
4278-
return dev_err_probe(dev, -ERANGE,
4279-
"%pfwP: pcs-handle link %d exceeds max %u\n",
4280-
fw_port, link_idx, RTPCS_MAX_LINKS_PER_SDS);
4281-
4282-
sds = rtpcs_find_serdes(ctrl, fw_pcs);
4279+
sds = rtpcs_find_serdes(ctrl, args.fwnode);
4280+
fwnode_handle_put(args.fwnode);
42834281
if (!sds)
42844282
continue;
42854283

4286-
if (sds->link_port[link_idx] >= 0)
4287-
return dev_err_probe(dev, -EEXIST,
4288-
"%pfwP: sds%u link %d already assigned to port %d\n",
4289-
fw_port, sds->id, link_idx, sds->link_port[link_idx]);
4284+
if (link_idx >= RTPCS_MAX_LINKS_PER_SDS) {
4285+
ret = dev_err_probe(dev, -ERANGE,
4286+
"%pfwP: pcs-handle link %d exceeds max %u\n",
4287+
fw_port, link_idx, RTPCS_MAX_LINKS_PER_SDS);
4288+
break;
4289+
}
4290+
4291+
if (sds->link_port[link_idx] >= 0) {
4292+
ret = dev_err_probe(dev, -EEXIST,
4293+
"%pfwP: sds%u link %d already assigned to port %d\n",
4294+
fw_port, sds->id, link_idx,
4295+
sds->link_port[link_idx]);
4296+
break;
4297+
}
42904298

42914299
sds->link_port[link_idx] = pn;
42924300
sds->num_of_links++;
42934301
}
42944302

4295-
return 0;
4303+
fwnode_handle_put(fw_ports);
4304+
put_switch:
4305+
fwnode_handle_put(fw_switch);
4306+
return ret;
42964307
}
42974308

42984309
static struct phylink_pcs *rtpcs_pcs_get(struct fwnode_reference_args *pcsspec, void *data)

0 commit comments

Comments
 (0)