]> git.hungrycats.org Git - linux/commitdiff
ia64: Sync up with 2.5.17 tree.
authorDavid Mosberger <davidm@tiger.hpl.hp.com>
Fri, 24 May 2002 16:45:11 +0000 (09:45 -0700)
committerDavid Mosberger <davidm@tiger.hpl.hp.com>
Fri, 24 May 2002 16:45:11 +0000 (09:45 -0700)
13 files changed:
arch/ia64/config.in
arch/ia64/ia32/ia32_entry.S
arch/ia64/kernel/acpi.c
arch/ia64/kernel/entry.S
arch/ia64/kernel/iosapic.c
arch/ia64/kernel/pci.c
arch/ia64/kernel/setup.c
arch/ia64/tools/print_offsets.awk
arch/ia64/tools/print_offsets.c
include/asm-ia64/page.h
include/asm-ia64/pgalloc.h
include/asm-ia64/pgtable.h
include/asm-ia64/tlb.h

index 2ca8555b6caea550b3e4f93daae44764e131ff9b..d5fbd4050c2f6ae700f79854bd4a89b924faeb7c 100644 (file)
@@ -37,7 +37,7 @@ else
         8KB                    CONFIG_IA64_PAGE_SIZE_8KB               \
         16KB                   CONFIG_IA64_PAGE_SIZE_16KB              \
         64KB                   CONFIG_IA64_PAGE_SIZE_64KB" 16KB
-endif
+fi
 
 if [ "$CONFIG_IA64_HP_SIM" = "n" ]; then
   define_bool CONFIG_ACPI y
index 1cde7883d3e29e75c50d07f6bc6e267d7424c2de..b6cb4353820e7f27da8fb589579c5098279ea951 100644 (file)
@@ -40,12 +40,18 @@ ENTRY(ia32_clone)
        zxt4 out1=in1                           // newsp
        mov out3=16                             // stacksize (compensates for 16-byte scratch area)
        adds out2=IA64_SWITCH_STACK_SIZE+16,sp  // out2 = &regs
-       zxt4 out0=in0                           // out0 = clone_flags
-       br.call.sptk.many rp=do_fork_WITHOUT_CLONE_IDLETASK             // FIXME: mask out CLONE_IDLETASK from flags, and return value now task_struct *.
+       dep out0=0,in0,CLONE_IDLETASK_BIT,1     // out0 = clone_flags & ~CLONE_IDLETASK
+       br.call.sptk.many rp=do_fork
 .ret0: .restore sp
        adds sp=IA64_SWITCH_STACK_SIZE,sp       // pop the switch stack
+       mov r2=-1000
+       adds r3=IA64_TASK_PID_OFFSET,r8
+       ;;
+       cmp.leu p6,p0=r8,r2
        mov ar.pfs=loc1
        mov rp=loc0
+       ;;
+(p6)   ld4 r8=[r3]
        br.ret.sptk.many rp
 END(ia32_clone)
 
@@ -167,11 +173,17 @@ GLOBAL_ENTRY(sys32_fork)
        mov out1=0
        mov out3=0
        adds out2=IA64_SWITCH_STACK_SIZE+16,sp  // out2 = &regs
-       br.call.sptk.few rp=do_fork_FIXME_RETURNS_TASK_STRUCT
-.ret5: mov ar.pfs=loc1
-       .restore sp
+       br.call.sptk.few rp=do_fork
+.ret5: .restore sp
        adds sp=IA64_SWITCH_STACK_SIZE,sp       // pop the switch stack
+       mov r2=-1000
+       adds r3=IA64_TASK_PID_OFFSET,r8
+       ;;
+       cmp.leu p6,p0=r8,r2
+       mov ar.pfs=loc1
        mov rp=loc0
+       ;;
+(p6)   ld4 r8=[r3]
        br.ret.sptk.many rp
 END(sys32_fork)
 
index 44d9a06b6d56f56e2357ad2de51fab6a2d497b6c..c2db4e4610f52e332fb896cffb694a6fdf9db794 100644 (file)
@@ -3,8 +3,8 @@
  *
  *  Copyright (C) 1999 VA Linux Systems
  *  Copyright (C) 1999,2000 Walt Drummond <drummond@valinux.com>
- *  Copyright (C) 2000 Hewlett-Packard Co.
- *  Copyright (C) 2000 David Mosberger-Tang <davidm@hpl.hp.com>
+ *  Copyright (C) 2000, 2002 Hewlett-Packard Co.
+ *     David Mosberger-Tang <davidm@hpl.hp.com>
  *  Copyright (C) 2000 Intel Corp.
  *  Copyright (C) 2000,2001 J.I. Lee <jung-ik.lee@intel.com>
  *  Copyright (C) 2001 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
@@ -173,7 +173,7 @@ acpi_dispose_crs (acpi_buffer *buf)
 #define ACPI_MAX_PLATFORM_IRQS 256
 
 /* Array to record platform interrupt vectors for generic interrupt routing. */
-int platform_irq_list[ACPI_MAX_PLATFORM_IRQS];
+int platform_irq_list[ACPI_MAX_PLATFORM_IRQS] = { [0 ... ACPI_MAX_PLATFORM_IRQS - 1] = -1 };
 
 /*
  * Interrupt routing API for device drivers.  Provides interrupt vector for
@@ -421,8 +421,6 @@ acpi_parse_nmi_src (acpi_table_entry_header *header)
 static int __init
 acpi_parse_madt (unsigned long phys_addr, unsigned long size)
 {
-       int i = 0;
-
        if (!phys_addr || !size)
                return -EINVAL;
 
@@ -432,11 +430,6 @@ acpi_parse_madt (unsigned long phys_addr, unsigned long size)
                return -ENODEV;
        }
 
-       /* Initialize platform interrupt vector array */
-
-       for (i = 0; i < ACPI_MAX_PLATFORM_IRQS; i++)
-               platform_irq_list[i] = -1;
-
        /* Get base address of IPI Message Block */
 
        if (acpi_madt->lapic_address)
@@ -643,7 +636,7 @@ acpi_get_prt (struct pci_vector_struct **vectors, int *count)
        *vectors = NULL;
        *count = 0;
 
-       if (acpi_prts.count < 0) {
+       if (acpi_prts.count <= 0) {
                printk(KERN_ERR PREFIX "No PCI IRQ routing entries\n");
                return -ENODEV;
        }
@@ -661,7 +654,7 @@ acpi_get_prt (struct pci_vector_struct **vectors, int *count)
        list_for_each(node, &acpi_prts.entries) {
                entry = (struct acpi_prt_entry *)node;
                vector[i].bus    = entry->id.bus;
-               vector[i].pci_id = ((u32) entry->id.dev) << 16 | 0xffff;
+               vector[i].pci_id = ((u32) entry->id.dev << 16) | 0xffff;
                vector[i].pin    = entry->id.pin;
                vector[i].irq    = entry->source.index;
                i++;
index 3f053c93171fe5b47cb5fe9cd0db70407e4352fc..b4d3155afe030bfe18579e86b680b1c68a91713b 100644 (file)
@@ -100,12 +100,18 @@ GLOBAL_ENTRY(sys_clone2)
        mov out1=in1
        mov out3=in2
        adds out2=IA64_SWITCH_STACK_SIZE+16,sp  // out2 = &regs
-       mov out0=in0                            // out0 = clone_flags
-       br.call.sptk.many rp=do_fork_WITHOUT_CLONE_IDLETASK // FIXME: mask out CLONE_IDLETASK from flags, and now returns task_struct *.
+       dep out0=0,in0,CLONE_IDLETASK_BIT,1     // out0 = clone_flags & ~CLONE_IDLETASK
+       br.call.sptk.many rp=do_fork
 .ret1: .restore sp
        adds sp=IA64_SWITCH_STACK_SIZE,sp       // pop the switch stack
+       mov r2=-1000
+       adds r3=IA64_TASK_PID_OFFSET,r8
+       ;;
+       cmp.leu p6,p0=r8,r2
        mov ar.pfs=loc1
        mov rp=loc0
+       ;;
+(p6)   ld4 r8=[r3]
        br.ret.sptk.many rp
 END(sys_clone2)
 
@@ -119,12 +125,18 @@ GLOBAL_ENTRY(sys_clone)
        mov out1=in1
        mov out3=16                             // stacksize (compensates for 16-byte scratch area)
        adds out2=IA64_SWITCH_STACK_SIZE+16,sp  // out2 = &regs
-       mov out0=in0                            // out0 = clone_flags
-       br.call.sptk.many rp=do_fork_WITHOUT_CLONE_IDLETASK // FIXME: mask out CLONE_IDLETASK from flags, and now return task_struct *.
+       dep out0=0,in0,CLONE_IDLETASK_BIT,1     // out0 = clone_flags & ~CLONE_IDLETASK
+       br.call.sptk.many rp=do_fork
 .ret2: .restore sp
        adds sp=IA64_SWITCH_STACK_SIZE,sp       // pop the switch stack
+       mov r2=-1000
+       adds r3=IA64_TASK_PID_OFFSET,r8
+       ;;
+       cmp.leu p6,p0=r8,r2
        mov ar.pfs=loc1
        mov rp=loc0
+       ;;
+(p6)   ld4 r8=[r3]
        br.ret.sptk.many rp
 END(sys_clone)
 
index 42b29c3e37b36c49dcbe0882608641dc60c1abcd..8c86333fa8bd099227e6f3322e2bfa6c8cab252b 100644 (file)
@@ -24,7 +24,8 @@
  *                              /proc/irq/#/smp_affinity
  * 02/04/02    P. Diefenbaugh  Cleaned up ACPI PCI IRQ routing.
  * 02/04/18    J.I. Lee        bug fix in iosapic_init_pci_irq
- * 02/04/30    J.I. Lee        bug fix in find_iosapic to fix ACPI PCI IRQ to IOSAPIC mapping error
+ * 02/04/30    J.I. Lee        bug fix in find_iosapic to fix ACPI PCI IRQ to IOSAPIC mapping
+ *                             error
  */
 /*
  * Here is what the interrupt logic between a PCI device and the CPU looks like:
@@ -631,7 +632,7 @@ iosapic_init (unsigned long phys_addr, unsigned int base_irq, int pcat_compat)
        }
 }
 
-void __init
+static void __init
 iosapic_init_pci_irq (void)
 {
        int i, index, vector, pin;
index 271230162e2aad8bd5a3ab7c8a25cc7e0847040d..983d98952364f640a9439a0f6ee3cfb6aebf9355 100644 (file)
@@ -218,10 +218,11 @@ pcibios_init (void)
                pci_scan_bus(i, pci_root_ops, NULL);
 
        platform_pci_fixup(1);  /* phase 1 fixups (after buses scanned) */
-
-       return;
+       return 0;
 }
 
+subsys_initcall(pcibios_init);
+
 /*
  *  Called after each bus is probed, but before its children
  *  are examined.
index e74a939363af8604442c387961c2fff4dc7c0012..691edaeb3b702a802a7c95e49ecd098b91dbc3fe 100644 (file)
@@ -395,7 +395,7 @@ show_cpuinfo (struct seq_file *m, void *v)
 
        switch (c->family) {
              case 0x07:        memcpy(family, "Itanium", 8); break;
-             case 0x1f:        memcpy(family, "Itanium 2", 9); break;
+             case 0x1f:        memcpy(family, "Itanium 2", 10); break;
              default:          sprintf(family, "%u", c->family); break;
        }
 
@@ -564,15 +564,11 @@ cpu_init (void)
 #define FEATURE_SET 16
                struct ia64_pal_retval iprv;
 
-               if (my_cpu_data->family == 0x1f) {
-
+               if (my_cpu_info->family == 0x1f) {
                        PAL_CALL_PHYS(iprv, PAL_PROC_GET_FEATURES, 0, FEATURE_SET, 0);
-
-                       if ((iprv.status == 0) && (iprv.v0 & 0x80) && (iprv.v2 & 0x80)) {
-
+                       if ((iprv.status == 0) && (iprv.v0 & 0x80) && (iprv.v2 & 0x80))
                                PAL_CALL_PHYS(iprv, PAL_PROC_SET_FEATURES,
                                              (iprv.v1 | 0x80), FEATURE_SET, 0);
-                       }
                }
        }
 #endif
index 52714a7b1eb5f26616033212c941baac491abdd5..1f95ff3695c1e53252f12d60148335dedf3d3dea 100644 (file)
@@ -7,6 +7,8 @@ BEGIN {
        print " * This file was generated by arch/ia64/tools/print_offsets.awk."
        print " *"
        print " */"
+       print ""
+       print "#define CLONE_IDLETASK_BIT       12"
 }
 
 # look for .tab:
index e547371176070712a118fa7cf739882c0527ef14..38ce610da8d3c670c3e6bd5a78d4701bd8471bf8 100644 (file)
@@ -53,6 +53,7 @@ tab[] =
     { "UNW_FRAME_INFO_SIZE",           sizeof (struct unw_frame_info) },
     { "", 0 },                 /* spacer */
     { "IA64_TASK_THREAD_KSP_OFFSET",   offsetof (struct task_struct, thread.ksp) },
+    { "IA64_TASK_PID_OFFSET",          offsetof (struct task_struct, pid) },
     { "IA64_PT_REGS_CR_IPSR_OFFSET",   offsetof (struct pt_regs, cr_ipsr) },
     { "IA64_PT_REGS_CR_IIP_OFFSET",    offsetof (struct pt_regs, cr_iip) },
     { "IA64_PT_REGS_CR_IFS_OFFSET",    offsetof (struct pt_regs, cr_ifs) },
@@ -161,6 +162,7 @@ tab[] =
     { "IA64_SIGFRAME_ARG2_OFFSET",             offsetof (struct sigframe, arg2) },
     { "IA64_SIGFRAME_HANDLER_OFFSET",          offsetof (struct sigframe, handler) },
     { "IA64_SIGFRAME_SIGCONTEXT_OFFSET",       offsetof (struct sigframe, sc) },
+    /* for assembly files which can't include sched.h: */
     { "IA64_CLONE_VFORK",              CLONE_VFORK },
     { "IA64_CLONE_VM",                 CLONE_VM },
 };
@@ -199,6 +201,8 @@ main (int argc, char **argv)
        }
     }
 
+  printf ("\n#define CLONE_IDLETASK_BIT        %ld\n", ia64_fls (CLONE_IDLETASK));
+
   printf ("\n#endif /* _ASM_IA64_OFFSETS_H */\n");
   return 0;
 }
index ec14e185eca3a05d7901e2ccaa76dc0952198272..c50cf5ec238efc9bdde36916bbea277476e6eb03 100644 (file)
@@ -56,39 +56,12 @@ do {                                                \
        flush_dcache_page(page);                \
 } while (0)
 
-/*
- * Note: the MAP_NR_*() macro can't use __pa() because MAP_NR_*(X) MUST
- * map to something >= max_mapnr if X is outside the identity mapped
- * kernel space.
- */
-
-/*
- * The dense variant can be used as long as the size of memory holes isn't
- * very big.
- */
-#define MAP_NR_DENSE(addr)     (((unsigned long) (addr) - PAGE_OFFSET) >> PAGE_SHIFT)
-
-#define page_to_pfn(page)      ((unsigned long)((page) - mem_map))
 #define pfn_valid(pfn)         ((pfn) < max_mapnr)
 #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
 #define virt_to_page(kaddr)    pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
-
-#ifdef CONFIG_IA64_GENERIC
-# include <asm/machvec.h>
-# define virt_to_page(kaddr)   (mem_map + platform_map_nr(kaddr))
-# define page_to_pfn(page)     ((unsigned long) (page - mem_map))
-# define pfn_to_page(pfn)      (mem_map + (pfn))
-#elif defined (CONFIG_IA64_SGI_SN1)
-# ifndef CONFIG_DISCONTIGMEM
-#  define virt_to_page(kaddr)  (mem_map + MAP_NR_DENSE(kaddr))
-#  define page_to_pfn(page)    XXX fix me
-#  define pfn_to_page(pfn)     XXX fix me
-# endif
-#else
-# define virt_to_page(kaddr)   (mem_map + MAP_NR_DENSE(kaddr))
-# define page_to_pfn(page)     ((unsigned long) (page - mem_map))
-# define pfn_to_page(pfn)      (mem_map + (pfn))
-#endif
+#define page_to_pfn(page)      ((unsigned long) (page - mem_map))
+#define pfn_to_page(pfn)       (mem_map + (pfn))
+#define page_to_phys(page)     (page_to_pfn(page) << PAGE_SHIFT)
 
 typedef union ia64_va {
        struct {
index 9d0740f2e4558398b65c3a50d29fc8375e8fb920..c8a1f77d89d0cb65cb7d581893fca3f46258a9bb 100644 (file)
@@ -106,6 +106,8 @@ pmd_free (pmd_t *pmd)
        ++pgtable_cache_size;
 }
 
+#define pmd_free_tlb(tlb, pmd) pmd_free(pmd)
+
 static inline void
 pmd_populate (struct mm_struct *mm, pmd_t *pmd_entry, struct page *pte)
 {
@@ -150,6 +152,8 @@ pte_free_kernel (pte_t *pte)
        free_page((unsigned long) pte);
 }
 
+#define pte_free_tlb(tlb, pte) tlb_remove_page((tlb), (pte))
+
 extern void check_pgt_cache (void);
 
 /*
index 2c2fac5c85fd24b4799fecdc992c279efbe2f32c..4ff23d54e41892c88065d6d5868af4ee4349b1d4 100644 (file)
@@ -216,6 +216,8 @@ ia64_phys_addr_valid (unsigned long addr)
 /* Extract pfn from pte.  */
 #define pte_pfn(_pte)          ((pte_val(_pte) & _PFN_MASK) >> PAGE_SHIFT)
 
+#define mk_pte(page, pgprot)   pfn_pte(page_to_pfn(page), (pgprot))
+
 #define pte_modify(_pte, newprot) \
        (__pte((pte_val(_pte) & _PAGE_CHG_MASK) | pgprot_val(newprot)))
 
index 69c0faa931945857e63a7eabb647fb1054e6609e..3b85d222f5a2d67f31c98b4065e40d7e3e5e52bd 100644 (file)
@@ -1 +1,7 @@
+/* XXX fix me! */
+#define tlb_start_vma(tlb, vma)                        do { } while (0)
+#define tlb_end_vma(tlb, vma)                  do { } while (0)
+#define tlb_remove_tlb_entry(tlb, pte, address) do { } while (0)
+#define tlb_flush(tlb)                         flush_tlb_mm((tlb)->mm)
+
 #include <asm-generic/tlb.h>