[net-next, v3, 03/10] ptp: track available ptp vclocks information

From: Yangbo Lu
Date: Tue Jun 15 2021 - 05:36:49 EST


Track available ptp vclocks information. Record index values
of available ptp vclocks during registering and unregistering.

This is preparation for supporting ptp vclocks info query
through ethtool.

Signed-off-by: Yangbo Lu <yangbo.lu@xxxxxxx>
---
Change for v3:
- Added this patch.
---
drivers/ptp/ptp_clock.c | 2 ++
drivers/ptp/ptp_private.h | 1 +
drivers/ptp/ptp_sysfs.c | 6 ++++++
3 files changed, 9 insertions(+)

diff --git a/drivers/ptp/ptp_clock.c b/drivers/ptp/ptp_clock.c
index 78414b3e16dd..38842a76acf8 100644
--- a/drivers/ptp/ptp_clock.c
+++ b/drivers/ptp/ptp_clock.c
@@ -236,6 +236,8 @@ struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info,
if (parent->class && strcmp(parent->class->name, "ptp") == 0)
ptp->vclock_flag = true;

+ memset(ptp->vclock_index, -1, sizeof(ptp->vclock_index));
+
err = ptp_populate_pin_groups(ptp);
if (err)
goto no_pin_groups;
diff --git a/drivers/ptp/ptp_private.h b/drivers/ptp/ptp_private.h
index 6949afc9d733..5671710ca0fa 100644
--- a/drivers/ptp/ptp_private.h
+++ b/drivers/ptp/ptp_private.h
@@ -47,6 +47,7 @@ struct ptp_clock {
struct kthread_worker *kworker;
struct kthread_delayed_work aux_work;
u8 n_vclocks;
+ int vclock_index[PTP_MAX_VCLOCKS];
struct mutex n_vclocks_mux; /* protect concurrent n_vclocks access */
bool vclock_flag;
};
diff --git a/drivers/ptp/ptp_sysfs.c b/drivers/ptp/ptp_sysfs.c
index 600edd7a90af..d9534935c1e6 100644
--- a/drivers/ptp/ptp_sysfs.c
+++ b/drivers/ptp/ptp_sysfs.c
@@ -207,6 +207,9 @@ static ssize_t n_vclocks_store(struct device *dev,
goto out;
}

+ ptp->vclock_index[ptp->n_vclocks + i] =
+ vclock->clock->index;
+
dev_info(dev, "new virtual clock ptp%d\n",
vclock->clock->index);
}
@@ -217,6 +220,9 @@ static ssize_t n_vclocks_store(struct device *dev,
i = ptp->n_vclocks - num;
device_for_each_child_reverse(dev, &i,
unregister_vclock);
+
+ for (i = 1; i <= ptp->n_vclocks - num; i++)
+ ptp->vclock_index[ptp->n_vclocks - i] = -1;
}

if (num == 0)
--
2.25.1