2007-08-13 15:23:06

by Markus Rechberger

[permalink] [raw]
Subject: [PATCH] Firmware class name collision

Hi,

following patch fixes the i2c name collision with i2c-dev.

http://mcentral.de/wiki/index.php/Bugtracker#i2c_core_problem

This issue has been experienced with em28xx and saa7133 based devices.
I discussed that problem with Jean Delvare a while ago and he proposed
to add a prefix to the class name.

http://mcentral.de/~mrec/patches/firmware_class_name_collision.diff

Signed-off-by: Markus Rechberger <[email protected]>

index b24efd4..bfc54a1 100644
--- a/drivers/base/firmware_class.c
+++ b/drivers/base/firmware_class.c
@@ -297,8 +297,7 @@ firmware_class_timeout(u_long data)

static inline void fw_setup_device_id(struct device *f_dev, struct
device *dev)
{
- /* XXX warning we should watch out for name collisions */
- strlcpy(f_dev->bus_id, dev->bus_id, BUS_ID_SIZE);
+ snprintf(f_dev->bus_id, BUS_ID_SIZE, "fw-%s", dev->bus_id);
}

static int fw_register_device(struct device **dev_p, const char *fw_name,

Markus



2007-08-13 15:27:40

by Jean Delvare

[permalink] [raw]
Subject: Re: [PATCH] Firmware class name collision

Hi Markus,

On Mon, 13 Aug 2007 15:11:50 +0200, Markus Rechberger wrote:
> following patch fixes the i2c name collision with i2c-dev.
>
> http://mcentral.de/wiki/index.php/Bugtracker#i2c_core_problem
>
> This issue has been experienced with em28xx and saa7133 based devices.
> I discussed that problem with Jean Delvare a while ago and he proposed
> to add a prefix to the class name.
>
> http://mcentral.de/~mrec/patches/firmware_class_name_collision.diff
>
> Signed-off-by: Markus Rechberger <[email protected]>

Acked-by: Jean Delvare <[email protected]>

>
> index b24efd4..bfc54a1 100644
> --- a/drivers/base/firmware_class.c
> +++ b/drivers/base/firmware_class.c
> @@ -297,8 +297,7 @@ firmware_class_timeout(u_long data)
>
> static inline void fw_setup_device_id(struct device *f_dev, struct
> device *dev)
> {
> - /* XXX warning we should watch out for name collisions */
> - strlcpy(f_dev->bus_id, dev->bus_id, BUS_ID_SIZE);
> + snprintf(f_dev->bus_id, BUS_ID_SIZE, "fw-%s", dev->bus_id);
> }
>
> static int fw_register_device(struct device **dev_p, const char *fw_name,


--
Jean Delvare

2007-08-13 17:19:49

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH] Firmware class name collision

Hi Markus,

> following patch fixes the i2c name collision with i2c-dev.
>
> http://mcentral.de/wiki/index.php/Bugtracker#i2c_core_problem
>
> This issue has been experienced with em28xx and saa7133 based devices.
> I discussed that problem with Jean Delvare a while ago and he proposed
> to add a prefix to the class name.
>
> http://mcentral.de/~mrec/patches/firmware_class_name_collision.diff
>
> Signed-off-by: Markus Rechberger <[email protected]>
>
> index b24efd4..bfc54a1 100644
> --- a/drivers/base/firmware_class.c
> +++ b/drivers/base/firmware_class.c
> @@ -297,8 +297,7 @@ firmware_class_timeout(u_long data)
>
> static inline void fw_setup_device_id(struct device *f_dev, struct
> device *dev)
> {
> - /* XXX warning we should watch out for name collisions */
> - strlcpy(f_dev->bus_id, dev->bus_id, BUS_ID_SIZE);
> + snprintf(f_dev->bus_id, BUS_ID_SIZE, "fw-%s", dev->bus_id);
> }

I would prefer if we use "firmware-%s" since the "fw" might collide with
the new Firewire stack. Please change that and I agree.

Acked-by: Marcel Holtmann <[email protected]>

Regards

Marcel


2007-08-13 17:26:07

by Markus Rechberger

[permalink] [raw]
Subject: Re: [PATCH] Firmware class name collision

Hi Marcel,

Marcel Holtmann wrote:
> Hi Markus,
>
>
>> following patch fixes the i2c name collision with i2c-dev.
>>
>> http://mcentral.de/wiki/index.php/Bugtracker#i2c_core_problem
>>
>> This issue has been experienced with em28xx and saa7133 based devices.
>> I discussed that problem with Jean Delvare a while ago and he proposed
>> to add a prefix to the class name.
>>
>> http://mcentral.de/~mrec/patches/firmware_class_name_collision.diff
>>
>> Signed-off-by: Markus Rechberger <[email protected]>
>>
>> index b24efd4..bfc54a1 100644
>> --- a/drivers/base/firmware_class.c
>> +++ b/drivers/base/firmware_class.c
>> @@ -297,8 +297,7 @@ firmware_class_timeout(u_long data)
>>
>> static inline void fw_setup_device_id(struct device *f_dev, struct
>> device *dev)
>> {
>> - /* XXX warning we should watch out for name collisions */
>> - strlcpy(f_dev->bus_id, dev->bus_id, BUS_ID_SIZE);
>> + snprintf(f_dev->bus_id, BUS_ID_SIZE, "fw-%s", dev->bus_id);
>> }
>>
>
> I would prefer if we use "firmware-%s" since the "fw" might collide with
> the new Firewire stack. Please change that and I agree.
>
>

firmware-%s sounds more informative and cannot be mistaken with firewire
yes.

Signed-off-by: Markus Rechberger <[email protected]>

http://mcentral.de/~mrec/patches/firmware_class_name_collision_2.diff

diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
index b24efd4..bfc54a1 100644
--- a/drivers/base/firmware_class.c
+++ b/drivers/base/firmware_class.c
@@ -297,8 +297,7 @@ firmware_class_timeout(u_long data)

static inline void fw_setup_device_id(struct device *f_dev, struct
device *dev)
{
- /* XXX warning we should watch out for name collisions */
- strlcpy(f_dev->bus_id, dev->bus_id, BUS_ID_SIZE);
+ snprintf(f_dev->bus_id, BUS_ID_SIZE, "firmware-%s", dev->bus_id);
}

static int fw_register_device(struct device **dev_p, const char *fw_name,

> Acked-by: Marcel Holtmann <[email protected]>
>
> Regards
>
> Marcel
>
>
>
>
>



2007-08-13 17:47:55

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH] Firmware class name collision

Hi Markus,

> >> following patch fixes the i2c name collision with i2c-dev.
> >>
> >> http://mcentral.de/wiki/index.php/Bugtracker#i2c_core_problem
> >>
> >> This issue has been experienced with em28xx and saa7133 based devices.
> >> I discussed that problem with Jean Delvare a while ago and he proposed
> >> to add a prefix to the class name.
> >>
> >> http://mcentral.de/~mrec/patches/firmware_class_name_collision.diff
> >>
> >> Signed-off-by: Markus Rechberger <[email protected]>
> >>
> >> index b24efd4..bfc54a1 100644
> >> --- a/drivers/base/firmware_class.c
> >> +++ b/drivers/base/firmware_class.c
> >> @@ -297,8 +297,7 @@ firmware_class_timeout(u_long data)
> >>
> >> static inline void fw_setup_device_id(struct device *f_dev, struct
> >> device *dev)
> >> {
> >> - /* XXX warning we should watch out for name collisions */
> >> - strlcpy(f_dev->bus_id, dev->bus_id, BUS_ID_SIZE);
> >> + snprintf(f_dev->bus_id, BUS_ID_SIZE, "fw-%s", dev->bus_id);
> >> }
> >>
> >
> > I would prefer if we use "firmware-%s" since the "fw" might collide with
> > the new Firewire stack. Please change that and I agree.
> >
> >
>
> firmware-%s sounds more informative and cannot be mistaken with firewire
> yes.
>
> Signed-off-by: Markus Rechberger <[email protected]>

Acked-by: Marcel Holtmann <[email protected]>

Regards

Marcel


2007-08-14 13:33:22

by Jean Delvare

[permalink] [raw]
Subject: Re: [PATCH] Firmware class name collision

Hi Markus,

On Mon, 13 Aug 2007 19:20:43 +0200, Markus Rechberger wrote:
> Marcel Holtmann wrote:
> > I would prefer if we use "firmware-%s" since the "fw" might collide with
> > the new Firewire stack. Please change that and I agree.
>
> firmware-%s sounds more informative and cannot be mistaken with firewire
> yes.
>
> Signed-off-by: Markus Rechberger <[email protected]>
>
> http://mcentral.de/~mrec/patches/firmware_class_name_collision_2.diff
>
> diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
> index b24efd4..bfc54a1 100644
> --- a/drivers/base/firmware_class.c
> +++ b/drivers/base/firmware_class.c
> @@ -297,8 +297,7 @@ firmware_class_timeout(u_long data)
>
> static inline void fw_setup_device_id(struct device *f_dev, struct
> device *dev)
> {
> - /* XXX warning we should watch out for name collisions */
> - strlcpy(f_dev->bus_id, dev->bus_id, BUS_ID_SIZE);
> + snprintf(f_dev->bus_id, BUS_ID_SIZE, "firmware-%s", dev->bus_id);
> }

Please keep in mind that BUS_ID_SIZE is "only" 20. "firmware-" takes 9
characters, add one for the trailing zero and this only leaves room for
10 characters for the original bus id. While this will be enough for
the i2c case, I suspect that some other bus IDs won't fit.

--
Jean Delvare

2007-08-14 14:17:17

by Kay Sievers

[permalink] [raw]
Subject: Re: [PATCH] Firmware class name collision

On 8/14/07, Jean Delvare <[email protected]> wrote:
> On Mon, 13 Aug 2007 19:20:43 +0200, Markus Rechberger wrote:
> > Marcel Holtmann wrote:
> > > I would prefer if we use "firmware-%s" since the "fw" might collide with
> > > the new Firewire stack. Please change that and I agree.
> >
> > firmware-%s sounds more informative and cannot be mistaken with firewire
> > yes.
> >
> > Signed-off-by: Markus Rechberger <[email protected]>
> >
> > http://mcentral.de/~mrec/patches/firmware_class_name_collision_2.diff
> >
> > diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
> > index b24efd4..bfc54a1 100644
> > --- a/drivers/base/firmware_class.c
> > +++ b/drivers/base/firmware_class.c
> > @@ -297,8 +297,7 @@ firmware_class_timeout(u_long data)
> >
> > static inline void fw_setup_device_id(struct device *f_dev, struct
> > device *dev)
> > {
> > - /* XXX warning we should watch out for name collisions */
> > - strlcpy(f_dev->bus_id, dev->bus_id, BUS_ID_SIZE);
> > + snprintf(f_dev->bus_id, BUS_ID_SIZE, "firmware-%s", dev->bus_id);
> > }
>
> Please keep in mind that BUS_ID_SIZE is "only" 20. "firmware-" takes 9
> characters, add one for the trailing zero and this only leaves room for
> 10 characters for the original bus id. While this will be enough for
> the i2c case, I suspect that some other bus IDs won't fit.

Hmm, is there any case where .bus_id is different from .kobj.k_name?
We always do:
kobject_set_name(&dev->kobj, "%s", dev->bus_id);

Which looks kind of weird, as the kobject (which doesn't have that
name size limitation) is always embedded in the same struct anyway.

Thanks,
Kay