net: mvneta: remove data pointer usage from device_node structure
On year ago Rob Herring wanted to remove the data pointer from the device_node structure[1]. The mvneta driver seemed to be the only one which used (abused ?) it. However, the proposal of Rob to remove this pointer from the driver introduced a regression, and I tested and fixed an alternative way, but it was never submitted as a proper patch. Now here it is: Instead of using the device_node structure ->data pointer, we store the BM private data as the driver data of the BM platform_device. The core mvneta code can retrieve it by doing a lookup on which platform_device corresponds to the BM device tree node using of_find_device_by_node(), and get its driver data [1]https://www.spinics.net/lists/netdev/msg445197.html Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
8466baf788
commit
965cbbec7f
@@ -4461,12 +4461,16 @@ static int mvneta_probe(struct platform_device *pdev)
|
||||
|
||||
/* Obtain access to BM resources if enabled and already initialized */
|
||||
bm_node = of_parse_phandle(dn, "buffer-manager", 0);
|
||||
if (bm_node && bm_node->data) {
|
||||
pp->bm_priv = bm_node->data;
|
||||
err = mvneta_bm_port_init(pdev, pp);
|
||||
if (err < 0) {
|
||||
dev_info(&pdev->dev, "use SW buffer management\n");
|
||||
pp->bm_priv = NULL;
|
||||
if (bm_node) {
|
||||
pp->bm_priv = mvneta_bm_get(bm_node);
|
||||
if (pp->bm_priv) {
|
||||
err = mvneta_bm_port_init(pdev, pp);
|
||||
if (err < 0) {
|
||||
dev_info(&pdev->dev,
|
||||
"use SW buffer management\n");
|
||||
mvneta_bm_put(pp->bm_priv);
|
||||
pp->bm_priv = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
of_node_put(bm_node);
|
||||
@@ -4527,6 +4531,7 @@ err_netdev:
|
||||
mvneta_bm_pool_destroy(pp->bm_priv, pp->pool_long, 1 << pp->id);
|
||||
mvneta_bm_pool_destroy(pp->bm_priv, pp->pool_short,
|
||||
1 << pp->id);
|
||||
mvneta_bm_put(pp->bm_priv);
|
||||
}
|
||||
err_free_stats:
|
||||
free_percpu(pp->stats);
|
||||
@@ -4564,6 +4569,7 @@ static int mvneta_remove(struct platform_device *pdev)
|
||||
mvneta_bm_pool_destroy(pp->bm_priv, pp->pool_long, 1 << pp->id);
|
||||
mvneta_bm_pool_destroy(pp->bm_priv, pp->pool_short,
|
||||
1 << pp->id);
|
||||
mvneta_bm_put(pp->bm_priv);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user