]> git.hungrycats.org Git - linux/commitdiff
[PATCH] x86-64 fixes for gcc 3.5
authorAndrew Morton <akpm@osdl.org>
Wed, 4 Feb 2004 02:39:56 +0000 (18:39 -0800)
committerLinus Torvalds <torvalds@home.osdl.org>
Wed, 4 Feb 2004 02:39:56 +0000 (18:39 -0800)
From: Andi Kleen <ak@muc.de>

Fix all the x86-64 warnings with gcc 3.5 and make it compile again.

arch/x86_64/ia32/sys_ia32.c
arch/x86_64/kernel/aperture.c
arch/x86_64/kernel/nmi.c
arch/x86_64/kernel/pci-gart.c
arch/x86_64/kernel/suspend_asm.S
arch/x86_64/lib/csum-partial.c
arch/x86_64/mm/fault.c
arch/x86_64/mm/init.c
include/asm-x86_64/apic.h
include/asm-x86_64/hw_irq.h

index 35dca3ef82b4b2888d60f79780dee2764bd0b65c..ddc9e93a48455deac11f639645f9aadf83cfbd52 100644 (file)
@@ -274,13 +274,16 @@ sys32_rt_sigaction(int sig, struct sigaction32 *act,
                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_sigaction32 *act, struct old_sigaction32 *o
 
         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, int namlen, loff_t offset, ino_t ino,
        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;
index 36242d20c492923a40f1d0f3215041572879b43b..c9329241f767710950b457dae9f3b5b8fe4f28e4 100644 (file)
@@ -87,13 +87,15 @@ static int __init aperture_valid(char *name, u64 aper_base, u32 aper_size)
 /* 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, int slot, int func, int cap)
 /* 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(u32 *order, int *valid_agp)
                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(u32 *order, int *valid_agp)
                                } 
                                
                                /* 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;
index f0df7149bdd7e5d080d5755e6e6c9abbe817e170..3f6b7a8e59e0af4c2d63199a2f146c5e78022862 100644 (file)
@@ -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) {
                /*
index 559dc616ddee9c5252fe8499d305ddf704064d48..d6aa9ae274324d2c823daf06af9411f2cf449ebf 100644 (file)
@@ -117,11 +117,11 @@ static unsigned long alloc_iommu(int size)
 
 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 pci_dev *dev, unsigned long phys_mem,
 { 
        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 pci_dev *dev, unsigned long phys_mem,
                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 scatterlist *sg, int start, int stopat,
                      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 *hwdev, dma_addr_t dma_addr,
 {
        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);
index 0a97d4edbd37d62983babb882066571df4a3859e..99a1adf868a748bb74658e0d8cf22a1d9a555182 100644 (file)
@@ -122,4 +122,4 @@ loop:
        .quad 0
 loop2: 
        .quad 0         
-       .previous
\ No newline at end of file
+       .previous
index 5a5f6e770291849e2b5a71a33ee924eeba3b3d18..860d5e2d90f1401681cf16f2a81adb77e040df66 100644 (file)
@@ -56,6 +56,8 @@ static __force_inline unsigned do_csum(const unsigned char *buff, unsigned len)
                }
                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(const unsigned char *buff, unsigned len)
                        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"
index f14900086eed5081ea9f8fe313328260b2c0cfbc..7d86ed18972b140b5dd283cae9cf0af87794a8f5 100644 (file)
@@ -142,6 +142,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); 
@@ -150,17 +154,17 @@ void dump_pagetable(unsigned long address)
        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:
index 341265b3a9dc525a95edf3bd417e52c353debeea..9d3227e045af175ba527d9be9f4ecff84b39a694 100644 (file)
@@ -39,7 +39,7 @@
 
 #define Dprintk(x...)
 
-extern char _stext;
+extern char _stext[];
 
 DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
 
@@ -80,7 +80,7 @@ void show_mem(void)
 
 /* References to section boundaries */
 
-extern char _text, _etext, _edata, __bss_start, _end;
+extern char _text, _etext, _edata, __bss_start, _end[];
 extern char __init_begin, __init_end;
 
 int after_bootmem;
@@ -442,7 +442,7 @@ void __init mem_init(void)
        kclist_add(&kcore_mem, __va(0), max_low_pfn << PAGE_SHIFT); 
        kclist_add(&kcore_vmalloc, (void *)VMALLOC_START, 
                   VMALLOC_END-VMALLOC_START);
-       kclist_add(&kcore_kernel, &_stext, &_end - &_stext); 
+       kclist_add(&kcore_kernel, &_stext, _end - _stext);
        kclist_add(&kcore_modules, (void *)MODULES_VADDR, MODULES_LEN);
        kclist_add(&kcore_vsyscall, (void *)VSYSCALL_START, 
                                 VSYSCALL_END - VSYSCALL_START);
index cea3a655e42ef6b1eca4ba7895df3f35ada485f2..c7b58c99e4fe14f192e96de520a8be3a9013a8ec 100644 (file)
@@ -79,7 +79,7 @@ extern void disable_lapic_nmi_watchdog(void);
 extern void enable_lapic_nmi_watchdog(void);
 extern void disable_timer_nmi_watchdog(void);
 extern void enable_timer_nmi_watchdog(void);
-extern inline void nmi_watchdog_tick (struct pt_regs * regs, unsigned reason);
+extern void nmi_watchdog_tick (struct pt_regs * regs, unsigned reason);
 extern int APIC_init_uniprocessor (void);
 extern void disable_APIC_timer(void);
 extern void enable_APIC_timer(void);
index a3cee19cff155b620f2d4c66e1e0e887ff0b6b12..161edad6afdf126aa99c04264e9b134917b1f949 100644 (file)
@@ -77,7 +77,7 @@ struct hw_interrupt_type;
 
 #ifndef __ASSEMBLY__
 extern u8 irq_vector[NR_IRQ_VECTORS];
-#define IO_APIC_VECTOR(irq)    ((int)irq_vector[irq])
+#define IO_APIC_VECTOR(irq)    (irq_vector[irq])
 
 /*
  * Various low-level irq details needed by irq.c, process.c,
@@ -132,7 +132,7 @@ static inline void x86_do_profile (struct pt_regs *regs)
 {
        unsigned long rip;
        extern unsigned long prof_cpu_mask;
-       extern char _stext;
+       extern char _stext[];
  
        profile_hook(regs);