Re: [PATCH] drivers: w1: make w1_slave::flags long to avoid casts

Andrew Morton
2013-10-30T22:59:40Z

On Sat, 26 Oct 2013 12:56:11 +0100 Michal Nazarewicz <mpn@google.com> wrote:

> From: Michal Nazarewicz <mina86@mina86.com>
>
> Changing flags field of the w1_slave to unsigned long may on
> some architectures increase the size of the structure, but
> otherwise makes the code more kosher as casting is avoided
> and *_bit family of calls do not attempt to operate on an
> entity of bigger size than realy is available.
>
> The current behaviour does not introduce any bugs (since any
> bytes past flags field are preserved)

hm, what does this mean....

> --- a/drivers/w1/w1.c
> +++ b/drivers/w1/w1.c
> @@ -709,7 +709,7 @@ static int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn)
>
> sl->owner = THIS_MODULE;
> sl->master = dev;
> - set_bit(W1_SLAVE_ACTIVE, (long *)&sl->flags);
> + set_bit(W1_SLAVE_ACTIVE, &sl->flags);

... I'd have though that running this code on little-endian 64-bit
would result in a scribble over ...

> --- a/drivers/w1/w1.h
> +++ b/drivers/w1/w1.h
> @@ -67,8 +67,8 @@ struct w1_slave
> struct w1_reg_num reg_num;
> atomic_t refcnt;
> u8 rom[9];
> - u32 flags;
> int ttl;

... w1_slave.ttl?

> + unsigned long flags;
>
> struct w1_master *master;
> struct w1_family *family;
>
> ...
>