From: Andi Kleen Fix x86-64 warnings exposed by an gcc 3.4 snapshot. --- arch/x86_64/ia32/sys_ia32.c | 20 ++++++++++++++------ arch/x86_64/kernel/aperture.c | 30 +++++++++++++++++++----------- arch/x86_64/kernel/nmi.c | 4 ++-- arch/x86_64/kernel/pci-gart.c | 12 ++++++------ arch/x86_64/kernel/x8664_ksyms.c | 2 +- arch/x86_64/lib/csum-partial.c | 6 ++++-- arch/x86_64/lib/usercopy.c | 2 +- arch/x86_64/mm/fault.c | 10 +++++++--- arch/x86_64/mm/k8topology.c | 3 ++- include/asm-x86_64/apic.h | 2 +- include/asm-x86_64/hw_irq.h | 2 +- include/asm-x86_64/unistd.h | 2 +- 12 files changed, 59 insertions(+), 36 deletions(-) diff -puN arch/x86_64/ia32/sys_ia32.c~fix-x86_64-gcc-34-warnings arch/x86_64/ia32/sys_ia32.c --- 25/arch/x86_64/ia32/sys_ia32.c~fix-x86_64-gcc-34-warnings 2004-01-14 01:14:49.000000000 -0800 +++ 25-akpm/arch/x86_64/ia32/sys_ia32.c 2004-01-14 01:14:49.000000000 -0800 @@ -274,13 +274,16 @@ sys32_rt_sigaction(int sig, struct sigac return -EINVAL; if (act) { + compat_uptr_t handler, restorer; + if (verify_area(VERIFY_READ, act, sizeof(*act)) || - __get_user((long)new_ka.sa.sa_handler, &act->sa_handler) || + __get_user(handler, &act->sa_handler) || __get_user(new_ka.sa.sa_flags, &act->sa_flags) || - __get_user((long)new_ka.sa.sa_restorer, &act->sa_restorer)|| + __get_user(restorer, &act->sa_restorer)|| __copy_from_user(&set32, &act->sa_mask, sizeof(compat_sigset_t))) return -EFAULT; - + new_ka.sa.sa_handler = compat_ptr(handler); + new_ka.sa.sa_restorer = compat_ptr(restorer); /* FIXME: here we rely on _COMPAT_NSIG_WORS to be >= than _NSIG_WORDS << 1 */ switch (_NSIG_WORDS) { case 4: new_ka.sa.sa_mask.sig[3] = set32.sig[6] @@ -331,13 +334,18 @@ sys32_sigaction (int sig, struct old_sig if (act) { compat_old_sigset_t mask; + compat_uptr_t handler, restorer; if (verify_area(VERIFY_READ, act, sizeof(*act)) || - __get_user((long)new_ka.sa.sa_handler, &act->sa_handler) || + __get_user(handler, &act->sa_handler) || __get_user(new_ka.sa.sa_flags, &act->sa_flags) || - __get_user((long)new_ka.sa.sa_restorer, &act->sa_restorer) || + __get_user(restorer, &act->sa_restorer) || __get_user(mask, &act->sa_mask)) return -EFAULT; + + new_ka.sa.sa_handler = compat_ptr(handler); + new_ka.sa.sa_restorer = compat_ptr(restorer); + siginitset(&new_ka.sa.sa_mask, mask); } @@ -525,7 +533,7 @@ filldir32 (void *__buf, const char *name put_user(reclen, &dirent->d_reclen); copy_to_user(dirent->d_name, name, namlen); put_user(0, dirent->d_name + namlen); - ((char *) dirent) += reclen; + dirent = ((void *)dirent) + reclen; buf->current_dir = dirent; buf->count -= reclen; return 0; diff -puN arch/x86_64/kernel/aperture.c~fix-x86_64-gcc-34-warnings arch/x86_64/kernel/aperture.c --- 25/arch/x86_64/kernel/aperture.c~fix-x86_64-gcc-34-warnings 2004-01-14 01:14:49.000000000 -0800 +++ 25-akpm/arch/x86_64/kernel/aperture.c 2004-01-14 01:14:49.000000000 -0800 @@ -87,13 +87,15 @@ static int __init aperture_valid(char *n /* Find a PCI capability */ static __u32 __init find_cap(int num, int slot, int func, int cap) { + u8 pos; + int bytes; if (!(read_pci_config_16(num,slot,func,PCI_STATUS) & PCI_STATUS_CAP_LIST)) return 0; - u8 pos = read_pci_config_byte(num,slot,func,PCI_CAPABILITY_LIST); - int bytes; + pos = read_pci_config_byte(num,slot,func,PCI_CAPABILITY_LIST); for (bytes = 0; bytes < 48 && pos >= 0x40; bytes++) { + u8 id; pos &= ~3; - u8 id = read_pci_config_byte(num,slot,func,pos+PCI_CAP_LIST_ID); + id = read_pci_config_byte(num,slot,func,pos+PCI_CAP_LIST_ID); if (id == 0xff) break; if (id == cap) @@ -106,26 +108,31 @@ static __u32 __init find_cap(int num, in /* Read a standard AGPv3 bridge header */ static __u32 __init read_agp(int num, int slot, int func, int cap, u32 *order) { - printk("AGP bridge at %02x:%02x:%02x\n", num, slot, func); - u32 apsizereg = read_pci_config_16(num,slot,func, cap + 0x14); + u32 apsize; + u32 apsizereg; + int nbits; + u32 aper_low, aper_hi; + u64 aper; + printk("AGP bridge at %02x:%02x:%02x\n", num, slot, func); + apsizereg = read_pci_config_16(num,slot,func, cap + 0x14); if (apsizereg == 0xffffffff) { printk("APSIZE in AGP bridge unreadable\n"); return 0; } - u32 apsize = apsizereg & 0xfff; + apsize = apsizereg & 0xfff; /* Some BIOS use weird encodings not in the AGPv3 table. */ if (apsize & 0xff) apsize |= 0xf00; - int nbits = hweight16(apsize); + nbits = hweight16(apsize); *order = 7 - nbits; if ((int)*order < 0) /* < 32MB */ *order = 0; - u32 aper_low = read_pci_config(num,slot,func, 0x10); - u32 aper_hi = read_pci_config(num,slot,func,0x14); - u64 aper = (aper_low & ~((1<<22)-1)) | ((u64)aper_hi << 32); + aper_low = read_pci_config(num,slot,func, 0x10); + aper_hi = read_pci_config(num,slot,func,0x14); + aper = (aper_low & ~((1<<22)-1)) | ((u64)aper_hi << 32); printk("Aperture from AGP @ %Lx size %u MB (APSIZE %x)\n", aper, 32 << *order, apsizereg); @@ -155,6 +162,7 @@ static __u32 __init search_agp_bridge(u3 for (slot = 0; slot < 32; slot++) { for (func = 0; func < 8; func++) { u32 class, cap; + u8 type; class = read_pci_config(num,slot,func, PCI_CLASS_REVISION); if (class == 0xffffffff) @@ -172,7 +180,7 @@ static __u32 __init search_agp_bridge(u3 } /* No multi-function device? */ - u8 type = read_pci_config_byte(num,slot,func, + type = read_pci_config_byte(num,slot,func, PCI_HEADER_TYPE); if (!(type & 0x80)) break; diff -puN arch/x86_64/kernel/nmi.c~fix-x86_64-gcc-34-warnings arch/x86_64/kernel/nmi.c --- 25/arch/x86_64/kernel/nmi.c~fix-x86_64-gcc-34-warnings 2004-01-14 01:14:49.000000000 -0800 +++ 25-akpm/arch/x86_64/kernel/nmi.c 2004-01-14 01:14:49.000000000 -0800 @@ -311,11 +311,11 @@ void touch_nmi_watchdog (void) void nmi_watchdog_tick (struct pt_regs * regs, unsigned reason) { + int sum, cpu = safe_smp_processor_id(); + if (nmi_watchdog_disabled) return; - int sum, cpu = safe_smp_processor_id(); - sum = read_pda(apic_timer_irqs); if (last_irq_sums[cpu] == sum) { /* diff -puN arch/x86_64/kernel/pci-gart.c~fix-x86_64-gcc-34-warnings arch/x86_64/kernel/pci-gart.c --- 25/arch/x86_64/kernel/pci-gart.c~fix-x86_64-gcc-34-warnings 2004-01-14 01:14:49.000000000 -0800 +++ 25-akpm/arch/x86_64/kernel/pci-gart.c 2004-01-14 01:14:49.000000000 -0800 @@ -117,11 +117,11 @@ static unsigned long alloc_iommu(int siz static void free_iommu(unsigned long offset, int size) { + unsigned long flags; if (size == 1) { clear_bit(offset, iommu_gart_bitmap); return; } - unsigned long flags; spin_lock_irqsave(&iommu_bitmap_lock, flags); __clear_bit_string(iommu_gart_bitmap, offset, size); spin_unlock_irqrestore(&iommu_bitmap_lock, flags); @@ -329,6 +329,7 @@ static dma_addr_t pci_map_area(struct pc { unsigned long npages = to_pages(phys_mem, size); unsigned long iommu_page = alloc_iommu(npages); + int i; if (iommu_page == -1) { if (!nonforced_iommu(dev, phys_mem, size)) return phys_mem; @@ -338,7 +339,6 @@ static dma_addr_t pci_map_area(struct pc return bad_dma_address; } - int i; for (i = 0; i < npages; i++) { iommu_gatt_base[iommu_page + i] = GPTE_ENCODE(phys_mem); SET_LEAK(iommu_page + i); @@ -398,11 +398,11 @@ static int __pci_map_cont(struct scatter struct scatterlist *sout, unsigned long pages) { unsigned long iommu_start = alloc_iommu(pages); - if (iommu_start == -1) - return -1; - unsigned long iommu_page = iommu_start; int i; + + if (iommu_start == -1) + return -1; for (i = start; i < stopat; i++) { struct scatterlist *s = &sg[i]; @@ -519,12 +519,12 @@ void pci_unmap_single(struct pci_dev *hw { unsigned long iommu_page; int npages; + int i; if (dma_addr < iommu_bus_base + EMERGENCY_PAGES*PAGE_SIZE || dma_addr > iommu_bus_base + iommu_size) return; iommu_page = (dma_addr - iommu_bus_base)>>PAGE_SHIFT; npages = to_pages(dma_addr, size); - int i; for (i = 0; i < npages; i++) { iommu_gatt_base[iommu_page + i] = 0; CLEAR_LEAK(iommu_page + i); diff -puN arch/x86_64/kernel/x8664_ksyms.c~fix-x86_64-gcc-34-warnings arch/x86_64/kernel/x8664_ksyms.c --- 25/arch/x86_64/kernel/x8664_ksyms.c~fix-x86_64-gcc-34-warnings 2004-01-14 01:14:49.000000000 -0800 +++ 25-akpm/arch/x86_64/kernel/x8664_ksyms.c 2004-01-14 01:14:49.000000000 -0800 @@ -155,7 +155,7 @@ EXPORT_SYMBOL_GPL(unset_nmi_callback); extern void * memset(void *,int,__kernel_size_t); extern size_t strlen(const char *); -extern void bcopy(const char * src, char * dest, int count); +extern void bcopy(const void * src, void * dest, size_t count); extern void * memmove(void * dest,const void *src,size_t count); extern char * strcpy(char * dest,const char *src); extern int strcmp(const char * cs,const char * ct); diff -puN arch/x86_64/lib/csum-partial.c~fix-x86_64-gcc-34-warnings arch/x86_64/lib/csum-partial.c --- 25/arch/x86_64/lib/csum-partial.c~fix-x86_64-gcc-34-warnings 2004-01-14 01:14:49.000000000 -0800 +++ 25-akpm/arch/x86_64/lib/csum-partial.c 2004-01-14 01:14:49.000000000 -0800 @@ -56,6 +56,8 @@ static __force_inline unsigned do_csum(c } count >>= 1; /* nr of 32-bit words.. */ if (count) { + unsigned long zero; + unsigned count64; if (4 & (unsigned long) buff) { result += *(unsigned int *) buff; count--; @@ -65,8 +67,8 @@ static __force_inline unsigned do_csum(c count >>= 1; /* nr of 64-bit words.. */ /* main loop using 64byte blocks */ - unsigned long zero = 0; - unsigned count64 = count >> 3; + zero = 0; + count64 = count >> 3; while (count64) { asm("addq 0*8(%[src]),%[res]\n\t" "adcq 1*8(%[src]),%[res]\n\t" diff -puN arch/x86_64/lib/usercopy.c~fix-x86_64-gcc-34-warnings arch/x86_64/lib/usercopy.c --- 25/arch/x86_64/lib/usercopy.c~fix-x86_64-gcc-34-warnings 2004-01-14 01:14:49.000000000 -0800 +++ 25-akpm/arch/x86_64/lib/usercopy.c 2004-01-14 01:14:49.000000000 -0800 @@ -88,7 +88,7 @@ unsigned long __clear_user(void *addr, u " .quad 1b,2b\n" ".previous" : [size8] "=c"(size), [dst] "=&D" (__d0) - : [size1] "r"(size & 7), "[size8]" (size / 8), "[dst] "(addr), + : [size1] "r"(size & 7), "[size8]" (size / 8), "[dst]"(addr), [zero] "r" (0UL), [eight] "r" (8UL)); return size; } diff -puN arch/x86_64/mm/fault.c~fix-x86_64-gcc-34-warnings arch/x86_64/mm/fault.c --- 25/arch/x86_64/mm/fault.c~fix-x86_64-gcc-34-warnings 2004-01-14 01:14:49.000000000 -0800 +++ 25-akpm/arch/x86_64/mm/fault.c 2004-01-14 01:14:49.000000000 -0800 @@ -141,6 +141,10 @@ static int bad_address(void *p) void dump_pagetable(unsigned long address) { pml4_t *pml4; + pgd_t *pgd; + pmd_t *pmd; + pte_t *pte; + asm("movq %%cr3,%0" : "=r" (pml4)); pml4 = __va((unsigned long)pml4 & PHYSICAL_PAGE_MASK); @@ -149,17 +153,17 @@ void dump_pagetable(unsigned long addres if (bad_address(pml4)) goto bad; if (!pml4_present(*pml4)) goto ret; - pgd_t *pgd = __pgd_offset_k((pgd_t *)pml4_page(*pml4), address); + pgd = __pgd_offset_k((pgd_t *)pml4_page(*pml4), address); if (bad_address(pgd)) goto bad; printk("PGD %lx ", pgd_val(*pgd)); if (!pgd_present(*pgd)) goto ret; - pmd_t *pmd = pmd_offset(pgd, address); + pmd = pmd_offset(pgd, address); if (bad_address(pmd)) goto bad; printk("PMD %lx ", pmd_val(*pmd)); if (!pmd_present(*pmd)) goto ret; - pte_t *pte = pte_offset_kernel(pmd, address); + pte = pte_offset_kernel(pmd, address); if (bad_address(pte)) goto bad; printk("PTE %lx", pte_val(*pte)); ret: diff -puN arch/x86_64/mm/k8topology.c~fix-x86_64-gcc-34-warnings arch/x86_64/mm/k8topology.c --- 25/arch/x86_64/mm/k8topology.c~fix-x86_64-gcc-34-warnings 2004-01-14 01:14:49.000000000 -0800 +++ 25-akpm/arch/x86_64/mm/k8topology.c 2004-01-14 01:14:49.000000000 -0800 @@ -48,6 +48,7 @@ int __init k8_scan_nodes(unsigned long s int nodeid, i, nb; int found = 0; int nmax; + int rr; nb = find_northbridge(); if (nb < 0) @@ -153,7 +154,7 @@ int __init k8_scan_nodes(unsigned long s mapping. To avoid this fill in the mapping for all possible CPUs, as the number of CPUs is not known yet. We round robin the existing nodes. */ - int rr = 0; + rr = 0; for (i = 0; i < MAXNODE; i++) { if (nodes_present & (1UL<