2008-08-22 01:36:14

by Larry Finger

[permalink] [raw]
Subject: Help with compiler warning

In drivers/pcmcia/cardbus.c, the following statement

memcpy_fromio(ptr, s->cb_cis_virt + addr, len);

generates the warning

CC [M] drivers/pcmcia/cardbus.o
include/asm/io_32.h: In function ‘memcpy_fromio’:
include/asm/io_32.h:151: warning: passing argument 2 of ‘__memcpy’
discards qualifiers from pointer target type

s->cb_cis_virt is "void __iomem" and addr is uint.

What cast does argument 2 need to silence the warning?

Thanks,

Larry


2008-08-24 15:51:13

by Larry Finger

[permalink] [raw]
Subject: Re: Help with compiler warning

Benny Halevy wrote:
> On Aug. 24, 2008, 18:29 +0300, Benny Halevy <[email protected]> wrote:
>> On Aug. 22, 2008, 4:36 +0300, Larry Finger <[email protected]> wrote:
>>> In drivers/pcmcia/cardbus.c, the following statement
>>>
>>> memcpy_fromio(ptr, s->cb_cis_virt + addr, len);
>>>
>>> generates the warning
>>>
>>> CC [M] drivers/pcmcia/cardbus.o
>>> include/asm/io_32.h: In function ‘memcpy_fromio’:
>>> include/asm/io_32.h:151: warning: passing argument 2 of ‘__memcpy’
>>> discards qualifiers from pointer target type
>>>
>>> s->cb_cis_virt is "void __iomem" and addr is uint.
>>>
>>> What cast does argument 2 need to silence the warning?
>> memcpy_fromio takes a (const volatile void __iomem *) for the
>> src address.
>
> So the culprit could be the volatile qualifier...

Changing it to

memcpy_fromio(ptr, (const volatile void __iomem *)(s->cb_cis_virt +
addr), len);

memcpy_fromio(ptr, (const volatile void __iomem *)s->cb_cis_virt +
addr, len);

memcpy_fromio(ptr, (volatile void __iomem *)(s->cb_cis_virt + addr), len);

or

memcpy_fromio(ptr, (volatile void __iomem *)s->cb_cis_virt + addr, len);

makes no difference.

Thanks,

Larry

2008-08-24 15:29:43

by Benny Halevy

[permalink] [raw]
Subject: Re: Help with compiler warning

On Aug. 22, 2008, 4:36 +0300, Larry Finger <[email protected]> wrote:
> In drivers/pcmcia/cardbus.c, the following statement
>
> memcpy_fromio(ptr, s->cb_cis_virt + addr, len);
>
> generates the warning
>
> CC [M] drivers/pcmcia/cardbus.o
> include/asm/io_32.h: In function ‘memcpy_fromio’:
> include/asm/io_32.h:151: warning: passing argument 2 of ‘__memcpy’
> discards qualifiers from pointer target type
>
> s->cb_cis_virt is "void __iomem" and addr is uint.
>
> What cast does argument 2 need to silence the warning?

memcpy_fromio takes a (const volatile void __iomem *) for the
src address.

Benny

>
> Thanks,
>
> Larry
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/

2008-08-24 16:32:40

by Andreas Schwab

[permalink] [raw]
Subject: Re: Help with compiler warning

Larry Finger <[email protected]> writes:

> Benny Halevy wrote:
>> On Aug. 24, 2008, 18:29 +0300, Benny Halevy <[email protected]> wrote:
>>> On Aug. 22, 2008, 4:36 +0300, Larry Finger <[email protected]> wrote:
>>>> In drivers/pcmcia/cardbus.c, the following statement
>>>>
>>>> memcpy_fromio(ptr, s->cb_cis_virt + addr, len);
>>>>
>>>> generates the warning
>>>>
>>>> CC [M] drivers/pcmcia/cardbus.o
>>>> include/asm/io_32.h: In function ‘memcpy_fromio’:
>>>> include/asm/io_32.h:151: warning: passing argument 2 of ‘__memcpy’
>>>> discards qualifiers from pointer target type
>>>>
>>>> s->cb_cis_virt is "void __iomem" and addr is uint.
>>>>
>>>> What cast does argument 2 need to silence the warning?

The cast needs to be in memcpy_fromio, but there is already one, so why
do you get a warning in the first place?

Andreas.

--
Andreas Schwab, SuSE Labs, [email protected]
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."

2008-08-24 15:31:57

by Benny Halevy

[permalink] [raw]
Subject: Re: Help with compiler warning

On Aug. 24, 2008, 18:29 +0300, Benny Halevy <[email protected]> wrote:
> On Aug. 22, 2008, 4:36 +0300, Larry Finger <[email protected]> wrote:
>> In drivers/pcmcia/cardbus.c, the following statement
>>
>> memcpy_fromio(ptr, s->cb_cis_virt + addr, len);
>>
>> generates the warning
>>
>> CC [M] drivers/pcmcia/cardbus.o
>> include/asm/io_32.h: In function ‘memcpy_fromio’:
>> include/asm/io_32.h:151: warning: passing argument 2 of ‘__memcpy’
>> discards qualifiers from pointer target type
>>
>> s->cb_cis_virt is "void __iomem" and addr is uint.
>>
>> What cast does argument 2 need to silence the warning?
>
> memcpy_fromio takes a (const volatile void __iomem *) for the
> src address.

So the culprit could be the volatile qualifier...

>
> Benny
>
>> Thanks,
>>
>> Larry
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>> Please read the FAQ at http://www.tux.org/lkml/
>