Re: [v5 01/12] struct device: Add function callback durable_name

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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---



[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux