Independ of my opinion on the whole scheme that I shared last time, we really should not bloat struct device with function pointers. On Fri, Sep 25, 2020 at 11:19:18AM -0500, Tony Asleson wrote: > Function callback and function to be used to write a persistent > durable name to the supplied character buffer. This will be used to add > structured key-value data to log messages for hardware related errors > which allows end users to correlate message and specific hardware. > > Signed-off-by: Tony Asleson <tasleson@xxxxxxxxxx> > --- > drivers/base/core.c | 24 ++++++++++++++++++++++++ > include/linux/device.h | 4 ++++ > 2 files changed, 28 insertions(+) > > diff --git a/drivers/base/core.c b/drivers/base/core.c > index 05d414e9e8a4..88696ade8bfc 100644 > --- a/drivers/base/core.c > +++ b/drivers/base/core.c > @@ -2489,6 +2489,30 @@ int dev_set_name(struct device *dev, const char *fmt, ...) > } > EXPORT_SYMBOL_GPL(dev_set_name); > > +/** > + * dev_durable_name - Write "DURABLE_NAME"=<durable name> in buffer > + * @dev: device > + * @buffer: character buffer to write results > + * @len: length of buffer > + * @return: Number of bytes written to buffer > + */ > +int dev_durable_name(const struct device *dev, char *buffer, size_t len) > +{ > + int tmp, dlen; > + > + if (dev && dev->durable_name) { > + tmp = snprintf(buffer, len, "DURABLE_NAME="); > + if (tmp < len) { > + dlen = dev->durable_name(dev, buffer + tmp, > + len - tmp); > + if (dlen > 0 && ((dlen + tmp) < len)) > + return dlen + tmp; > + } > + } > + return 0; > +} > +EXPORT_SYMBOL_GPL(dev_durable_name); > + > /** > * device_to_dev_kobj - select a /sys/dev/ directory for the device > * @dev: device > diff --git a/include/linux/device.h b/include/linux/device.h > index 5efed864b387..074125999dd8 100644 > --- a/include/linux/device.h > +++ b/include/linux/device.h > @@ -614,6 +614,8 @@ struct device { > struct iommu_group *iommu_group; > struct dev_iommu *iommu; > > + int (*durable_name)(const struct device *dev, char *buff, size_t len); > + > bool offline_disabled:1; > bool offline:1; > bool of_node_reused:1; > @@ -655,6 +657,8 @@ static inline const char *dev_name(const struct device *dev) > extern __printf(2, 3) > int dev_set_name(struct device *dev, const char *name, ...); > > +int dev_durable_name(const struct device *d, char *buffer, size_t len); > + > #ifdef CONFIG_NUMA > static inline int dev_to_node(struct device *dev) > { > -- > 2.26.2 > ---end quoted text---