On Mon, Apr 27, 2020 at 09:59:13AM -0600, Jeffrey Hugo wrote: > When multiple instances of the same MHI product are present in a system, > we can see a splat from mhi_create_devices() - "sysfs: cannot create > duplicate filename". > > This is because the device names assigned to the MHI channel devices are > non-unique. They consist of the channel's name, and the channel's pipe > id. For identical products, each instance is going to have the same > set of channel (both in name and pipe id). > > To fix this, we prepend the device name of the parent device that the > MHI channels belong to. Since different instances of the same product > should have unique device names, this makes the MHI channel devices for > each product also unique. > > Additionally, remove the pipe id from the MHI channel device name. This > is an internal detail to the MHI product that provides little value, and > imposes too much device specific internal details to userspace. It is > expected that channel with a specific name (ie "SAHARA") has a specific > client, and it does not matter what pipe id that channel is enumerated on. > The pipe id is an internal detail between the MHI bus, and the hardware. > The client is not expected to make decisions based on the pipe id, and to > do so would require the client to have intimate knowledge of the hardware, > which is inappropiate as it may violate the layering provided by the MHI > bus. The limitation of doing this is that each product may only have one > instance of a channel by a unique name. This limitation is appropriate > given the usecases of MHI channels. > > Signed-off-by: Jeffrey Hugo <jhugo@xxxxxxxxxxxxxx> Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx> Thanks, Mani > --- > drivers/bus/mhi/core/main.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/bus/mhi/core/main.c b/drivers/bus/mhi/core/main.c > index 580d72b..0ac0643 100644 > --- a/drivers/bus/mhi/core/main.c > +++ b/drivers/bus/mhi/core/main.c > @@ -327,7 +327,8 @@ void mhi_create_devices(struct mhi_controller *mhi_cntrl) > > /* Channel name is same for both UL and DL */ > mhi_dev->chan_name = mhi_chan->name; > - dev_set_name(&mhi_dev->dev, "%04x_%s", mhi_chan->chan, > + dev_set_name(&mhi_dev->dev, "%s_%s", > + dev_name(mhi_cntrl->cntrl_dev), > mhi_dev->chan_name); > > /* Init wakeup source if available */ > -- > Qualcomm Technologies, Inc. is a member of the > Code Aurora Forum, a Linux Foundation Collaborative Project.