Message ID | 1588003153-13139-7-git-send-email-jhugo@codeaurora.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Misc MHI fixes | expand |
On 4/27/20 8:59 AM, 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@codeaurora.org> > --- Reviewed-by: Hemant Kumar <hemantk@codeaurora.org>
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@codeaurora.org> Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> 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.
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 */
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@codeaurora.org> --- drivers/bus/mhi/core/main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)