Hello Dave,
Compiling p-l with gcc-4.2 I see new warning "discards qualifiers from pointer
target type":
gcc -Wp,-MD,drivers/net/.lasi_82596.o.d -nostdinc -isystem
/usr/lib/gcc/hppa-linux-gnu/4.2.3/include -D__KERNEL__ -Iinclude -Iinc
lude2 -I/SRCTREE/include -include include/linux/autoconf.h
-I/CAD/linux-2.6.24-rc4-pa-git-2007120
6-trace/drivers/net -Idrivers/net -Wall -Wundef -Wstrict-prototypes
-Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit
-function-declaration -O2 -pipe -mno-space-regs -mfast-indirect-calls
-mdisable-fpregs -ffunction-sections -march=1.1 -mschedule=720
0 -fomit-frame-pointer -fno-stack-protector -Wdeclaration-after-statement
-Wno-pointer-sign -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME
=KBUILD_STR(lasi_82596)" -D"KBUILD_MODNAME=KBUILD_STR(lasi_82596)" -c -o
drivers/net/lasi_82596.o /CAD/linux-2.6.24-rc4-pa-git-2007
1206-trace/drivers/net/lasi_82596.c
/SRCTREE/drivers/net/lib82596.c: In function 'wait_cmd':
/SRCTREE/drivers/net/lib82596.c:388: warning: passing argument 2 of
'dma_cache_sync' discards qualifiers from pointer target type
/SRCTREE/drivers/net/lib82596.c:391: warning: passing argument 2 of
'dma_cache_sync' discards qualifiers from pointer target type
/SRCTREE/drivers/net/lib82596.c: In function 'wait_istat':
/SRCTREE/drivers/net/lib82596.c:372: warning: passing argument 2 of
'dma_cache_sync' discards qualifiers from pointer target type
/SRCTREE/drivers/net/lib82596.c:375: warning: passing argument 2 of
'dma_cache_sync' discards qualifiers from pointer target type
/SRCTREE/drivers/net/lib82596.c: In function 'i596_cleanup_cmd':
/SRCTREE/drivers/net/lib82596.c:839: warning: passing argument 2 of
'dma_cache_sync' discards qualifiers from pointer target type
/SRCTREE/drivers/net/lib82596.c: In function 'init_i596_mem':
/SRCTREE/drivers/net/lib82596.c:580: warning: passing argument 2 of
'dma_cache_sync' discards qualifiers from pointer target type
/SRCTREE/drivers/net/lib82596.c:581: warning: passing argument 2 of
'dma_cache_sync' discards qualifiers from pointer target type
/SRCTREE/drivers/net/lib82596.c:600: warning: passing argument 2 of
'dma_cache_sync' discards qualifiers from pointer target type
/SRCTREE/drivers/net/lib82596.c:629: warning: passing argument 2 of
'dma_cache_sync' discards qualifiers from pointer target type
/SRCTREE/drivers/net/lib82596.c: In function 'i596_reset':
/SRCTREE/drivers/net/lib82596.c:857: warning: passing argument 2 of
'dma_cache_sync' discards qualifiers from pointer target type
/SRCTREE/drivers/net/lib82596.c: In function 'i596_add_cmd':
/SRCTREE/drivers/net/lib82596.c:898: warning: passing argument 2 of
'dma_cache_sync' discards qualifiers from pointer target type
/SRCTREE/drivers/net/lib82596.c: In function 'i596_tx_timeout':
/SRCTREE/drivers/net/lib82596.c:963: warning: passing argument 2 of
'dma_cache_sync' discards qualifiers from pointer target type
/SRCTREE/drivers/net/lib82596.c: In function 'i596_interrupt':
/SRCTREE/drivers/net/lib82596.c:1266: warning: passing argument 2 of
'dma_cache_sync' discards qualifiers from pointer target type
/SRCTREE/drivers/net/lib82596.c:1291: warning: passing argument 2 of
'dma_cache_sync' discards qualifiers from pointer target type
/SRCTREE/drivers/net/lib82596.c: In function 'i596_close':
/SRCTREE/drivers/net/lib82596.c:1322: warning: passing argument 2 of
'dma_cache_sync' discards qualifiers from pointer target type
After more investigation it seems to linked to the fact that mentioned
arguments are 'volatile' in this structure:
struct i596_dma {
struct i596_scp scp __attribute__((aligned(32)));
volatile struct i596_iscp iscp __attribute__((aligned(32)));
volatile struct i596_scb scb __attribute__((aligned(32)));
struct sa_cmd sa_cmd __attribute__((aligned(32)));
struct cf_cmd cf_cmd __attribute__((aligned(32)));
struct tdr_cmd tdr_cmd __attribute__((aligned(32)));
struct mc_cmd mc_cmd __attribute__((aligned(32)));
struct i596_rfd rfds[RX_RING_SIZE] __attribute__((aligned(32)));
struct i596_rbd rbds[RX_RING_SIZE] __attribute__((aligned(32)));
struct tx_cmd tx_cmds[TX_RING_SIZE] __attribute__((aligned(32)));
struct i596_tbd tbds[TX_RING_SIZE] __attribute__((aligned(32)));
};
I tried this sample foobar:
1 struct A {
2 unsigned long a;
3 unsigned char *b;
4 };
5
6 struct B {
7 volatile struct A AinB1;
8 volatile struct A AinB2;
9 };
10
11 void fooA(struct A *pa);
12
13 void fooB(struct B *pB)
14 {
15 fooA(&(pB->AinB1));
16 fooA(&(pB->AinB2));
17 }
which well return warnings:
# gcc-4.2 -c -o ts.o ts.c
ts.c: In function 'fooB':
ts.c:15: warning: passing argument 1 of 'fooA' discards qualifiers from
pointer target type
ts.c:16: warning: passing argument 1 of 'fooA' discards qualifiers from
pointer target type
Removing a 'volatile' like:
1 struct A {
2 unsigned long a;
3 unsigned char *b;
4 };
5
6 struct B {
7 volatile struct A AinB1;
8 struct A AinB2;
9 };
10
11 void fooA(struct A *pa);
12
13 void fooB(struct B *pB)
14 {
15 fooA(&(pB->AinB1));
16 fooA(&(pB->AinB2));
17 }
and it returns
# gcc-4.2 -c -o ts.o ts.c
ts.c: In function 'fooB':
ts.c:15: warning: passing argument 1 of 'fooA' discards qualifiers from
pointer target type
Well my understanding of 'volatile' is that this prefix prevent gcc of any
optimization/reorganization. Is it correct? if yes why this warning?
Tia for your attention,
r.
---
Scarlet One, ADSL 6 Mbps + Telephone, from EUR 29,95...
http://www.scarlet.be/
-
To unsubscribe from this list: send the line "unsubscribe linux-parisc" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html