Re: Breakage in arch/mips/kernel/traps.c for 64bit | |
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] | |
On Mon, 5 May 2008 00:08:04 +0200, tsbogend@xxxxxxxxxxxxxxxx (Thomas Bogendoerfer) wrote:
> > while (!kstack_end((void *)(unsigned long)sp)) {
> >
> > will make this part sparse-free, though it seems a bit ugly.
>
> hmm, would leaving sp as unsigned long * and casting it for __get_user()
> make sparse happy ?
Well, not as expected... Here is some warning patterns.
1. unsigned long __user *sp = (unsigned long __user *)(reg29 & ~3);
...
while (!kstack_end(sp)) {
if (__get_user(addr, sp++)) {
linux/arch/mips/kernel/traps.c:91:21: warning: incorrect type in argument 1 (different address spaces)
linux/arch/mips/kernel/traps.c:91:21: expected void *addr
linux/arch/mips/kernel/traps.c:91:21: got unsigned long [noderef] <asn:1>*sp
2. unsigned long *sp = (unsigned long *)(reg29 & ~3);
...
while (!kstack_end(sp)) {
if (__get_user(addr, (unsigned long __user *)sp++)) {
linux/arch/mips/kernel/traps.c:92:7: warning: cast adds address space to expression (<asn:1>)
linux/arch/mips/kernel/traps.c:92:7: warning: cast adds address space to expression (<asn:1>)
linux/arch/mips/kernel/traps.c:92:7: warning: cast adds address space to expression (<asn:1>)
linux/arch/mips/kernel/traps.c:92:7: warning: cast adds address space to expression (<asn:1>)
linux/arch/mips/kernel/traps.c:92:7: warning: cast adds address space to expression (<asn:1>)
linux/arch/mips/kernel/traps.c:92:7: warning: cast adds address space to expression (<asn:1>)
linux/arch/mips/kernel/traps.c:92:7: warning: cast adds address space to expression (<asn:1>)
linux/arch/mips/kernel/traps.c:92:7: warning: cast adds address space to expression (<asn:1>)
linux/arch/mips/kernel/traps.c:92:7: warning: cast adds address space to expression (<asn:1>)
3. unsigned long __user *sp = (unsigned long __user *)(reg29 & ~3);
...
while (!kstack_end((void *)(unsigned long)sp)) {
if (__get_user(addr, sp++)) {
No warnings.
4. unsigned long *sp = (unsigned long *)(reg29 & ~3);
...
while (!kstack_end(sp)) {
unsigned long __user *p = (unsigned long __user *)sp++;
if (__get_user(addr, p)) {
linux/arch/mips/kernel/traps.c:92:30: warning: cast adds address space to expression (<asn:1>)
4. unsigned long *sp = (unsigned long *)(reg29 & ~3);
...
while (!kstack_end(sp)) {
unsigned long __user *p =
(unsigned long __user *)(unsigned long)sp++;
if (__get_user(addr, p)) {
No warnings.
I think the "cast adds address space to expression" sparse warning is
not worth to handle so seriously. So I'm OK with any of (2) to (4).
---
Atsushi Nemoto
[Linux MIPS Home] [Kernel list] [Linux ARM list] [Linux] [Git] [Photo] [Yosemite News] [MIPS Architecture] [Linux SCSI] [Linux Hams] [Site Home]
![]() |