[RFC,net-next,v8,10/13] net: netdevsim: ptp_mock: Convert to netdev_ptp_clock_register
Commit Message
The hardware registration clock for net device is now using
netdev_ptp_clock_register to save the net_device pointer within the PTP
clock xarray. netdevsim is registering its ptp through the mock driver.
It is the only driver using the mock driver to register a ptp clock.
Convert the mock driver to the new API.
Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
---
Shouldn't we move the mock driver in the netdevsim directory as it is only
used by netdevsim driver?
Changes in v8:
- New patch
---
drivers/net/netdevsim/netdev.c | 19 +++++++++++--------
drivers/ptp/ptp_mock.c | 4 ++--
include/linux/ptp_mock.h | 4 ++--
3 files changed, 15 insertions(+), 12 deletions(-)
Comments
On Fri, 16 Feb, 2024 16:52:28 +0100 Kory Maincent <kory.maincent@bootlin.com> wrote:
> The hardware registration clock for net device is now using
> netdev_ptp_clock_register to save the net_device pointer within the PTP
> clock xarray. netdevsim is registering its ptp through the mock driver.
> It is the only driver using the mock driver to register a ptp clock.
> Convert the mock driver to the new API.
>
> Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
> ---
> Shouldn't we move the mock driver in the netdevsim directory as it is only
> used by netdevsim driver?
This gets interesting. I think the reason it live under drivers/ptp
rather than drivers/net/netdevsim is because a bunch of reference/simple
phc implementations live under drivers/ptp already. In the case of mlx5,
it lives under the mlx5 driver directory to avoid needing to export
symbols between some mlx5_ptp driver and the netdev driver. I think
since the mock-up driver makes for a good reference for developers
wanting to know what it would take to implement the functionality for a
phc, it is fine living under drivers/ptp. That is just my opinion
though.
>
> Changes in v8:
> - New patch
> ---
Reviewed-by: Rahul Rameshbabu <rrameshbabu@nvidia.com>
@@ -321,16 +321,11 @@ static int nsim_init_netdevsim(struct netdevsim *ns)
struct mock_phc *phc;
int err;
- phc = mock_phc_create(&ns->nsim_bus_dev->dev);
- if (IS_ERR(phc))
- return PTR_ERR(phc);
-
- ns->phc = phc;
ns->netdev->netdev_ops = &nsim_netdev_ops;
err = nsim_udp_tunnels_info_create(ns->nsim_dev, ns->netdev);
if (err)
- goto err_phc_destroy;
+ return err;
rtnl_lock();
err = nsim_bpf_init(ns);
@@ -344,8 +339,18 @@ static int nsim_init_netdevsim(struct netdevsim *ns)
if (err)
goto err_ipsec_teardown;
rtnl_unlock();
+
+ phc = mock_phc_create(ns->netdev);
+ if (IS_ERR(phc)) {
+ err = PTR_ERR(phc);
+ goto err_register_netdevice;
+ }
+
+ ns->phc = phc;
return 0;
+err_register_netdevice:
+ unregister_netdevice(ns->netdev);
err_ipsec_teardown:
nsim_ipsec_teardown(ns);
nsim_macsec_teardown(ns);
@@ -353,8 +358,6 @@ static int nsim_init_netdevsim(struct netdevsim *ns)
err_utn_destroy:
rtnl_unlock();
nsim_udp_tunnels_info_destroy(ns->netdev);
-err_phc_destroy:
- mock_phc_destroy(ns->phc);
return err;
}
@@ -115,7 +115,7 @@ int mock_phc_index(struct mock_phc *phc)
}
EXPORT_SYMBOL_GPL(mock_phc_index);
-struct mock_phc *mock_phc_create(struct device *dev)
+struct mock_phc *mock_phc_create(struct net_device *dev)
{
struct mock_phc *phc;
int err;
@@ -147,7 +147,7 @@ struct mock_phc *mock_phc_create(struct device *dev)
spin_lock_init(&phc->lock);
timecounter_init(&phc->tc, &phc->cc, 0);
- phc->clock = ptp_clock_register(&phc->info, dev);
+ phc->clock = netdev_ptp_clock_register(&phc->info, dev);
if (IS_ERR(phc->clock)) {
err = PTR_ERR(phc->clock);
goto out_free_phc;
@@ -13,13 +13,13 @@ struct mock_phc;
#if IS_ENABLED(CONFIG_PTP_1588_CLOCK_MOCK)
-struct mock_phc *mock_phc_create(struct device *dev);
+struct mock_phc *mock_phc_create(struct net_device *dev);
void mock_phc_destroy(struct mock_phc *phc);
int mock_phc_index(struct mock_phc *phc);
#else
-static inline struct mock_phc *mock_phc_create(struct device *dev)
+static inline struct mock_phc *mock_phc_create(struct net_device *dev)
{
return NULL;
}