Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394...
authorLinus Torvalds <torvalds@woody.linux-foundation.org>
Mon, 10 Dec 2007 22:47:11 +0000 (14:47 -0800)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Mon, 10 Dec 2007 22:47:11 +0000 (14:47 -0800)
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6:
  firewire: OHCI 1.0 Isochronous Receive support

17 files changed:
arch/ia64/Makefile
arch/ia64/hp/sim/boot/Makefile
arch/ia64/hp/sim/boot/bootloader.lds
arch/ia64/kernel/acpi.c
arch/ia64/kernel/efi.c
arch/ia64/kernel/gate.lds.S
arch/ia64/kernel/ia64_ksyms.c
arch/ia64/kernel/iosapic.c
arch/ia64/kernel/kprobes.c
arch/ia64/kernel/setup.c
arch/ia64/kernel/signal.c
arch/ia64/kernel/vmlinux.lds.S
arch/ia64/lib/Makefile
arch/ia64/mm/tlb.c
arch/ia64/scripts/unwcheck.py [changed mode: 0755->0644]
arch/ia64/sn/kernel/io_common.c
include/asm-ia64/iosapic.h

index 34951aa2370b861d0f0b2b8e91cdf70188cadbd3..b916ccfdef843f158f1814cc74d278d389dcec70 100644 (file)
@@ -77,7 +77,7 @@ vmlinux.gz: vmlinux
        $(Q)$(MAKE) $(build)=$(boot) $@
 
 unwcheck: vmlinux
-       -$(Q)READELF=$(READELF) $(srctree)/arch/ia64/scripts/unwcheck.py $<
+       -$(Q)READELF=$(READELF) python $(srctree)/arch/ia64/scripts/unwcheck.py $<
 
 archclean:
        $(Q)$(MAKE) $(clean)=$(boot)
index df6e9968c84541c0dafdd3306b452fa762e3185f..2e805e0cc56059f51074ec738010a81d2232605f 100644 (file)
@@ -33,5 +33,5 @@ $(obj)/vmlinux.bin: vmlinux FORCE
 LDFLAGS_bootloader = -static -T
 
 $(obj)/bootloader: $(src)/bootloader.lds $(obj)/bootloader.o $(obj)/boot_head.o $(obj)/fw-emu.o \
-                   lib/lib.a arch/ia64/lib/lib.a FORCE
+                   lib/lib.a arch/ia64/lib/built-in.o arch/ia64/lib/lib.a FORCE
        $(call if_changed,ld)
index 69ae585310338ddc0f0e3f7578b9e9079ff43824..3977f25a1265031979ad807a961cf06862ffe1ee 100644 (file)
@@ -22,10 +22,11 @@ SECTIONS
   .sdata     : { *(.sdata) }
   _edata  =  .;
 
-  _bss = .;
+  __bss_start = .;
   .sbss      : { *(.sbss) *(.scommon) }
   .bss       : { *(.bss) *(COMMON) }
   . = ALIGN(64 / 8);
+  __bss_stop = .;
   _end = . ;
 
   /* Stabs debugging sections.  */
index 897e2083a3b1b4c77f8dd200d3ab593b377677e8..00b5d08f6da8d67da2f67c9506d1164e72e7e0a7 100644 (file)
@@ -860,7 +860,7 @@ int acpi_map_lsapic(acpi_handle handle, int *pcpu)
        lsapic = (struct acpi_madt_local_sapic *)obj->buffer.pointer;
 
        if ((lsapic->header.type != ACPI_MADT_TYPE_LOCAL_SAPIC) ||
-           (!lsapic->lapic_flags & ACPI_MADT_ENABLED)) {
+           (!(lsapic->lapic_flags & ACPI_MADT_ENABLED))) {
                kfree(buffer.pointer);
                return -EINVAL;
        }
index 8e8f8b6193eea5038fb9bff9a53baa03b7694f7b..242d7934112009340e36724787477bffcda63175 100644 (file)
@@ -370,7 +370,7 @@ efi_get_pal_addr (void)
                        continue;
                }
 
-               if (md->num_pages << EFI_PAGE_SHIFT > IA64_GRANULE_SIZE)
+               if (efi_md_size(md) > IA64_GRANULE_SIZE)
                        panic("Woah!  PAL code size bigger than a granule!");
 
 #if EFI_DEBUG
@@ -378,7 +378,7 @@ efi_get_pal_addr (void)
 
                printk(KERN_INFO "CPU %d: mapping PAL code [0x%lx-0x%lx) into [0x%lx-0x%lx)\n",
                        smp_processor_id(), md->phys_addr,
-                       md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT),
+                       md->phys_addr + efi_md_size(md),
                        vaddr & mask, (vaddr & mask) + IA64_GRANULE_SIZE);
 #endif
                return __va(md->phys_addr);
@@ -523,7 +523,7 @@ efi_init (void)
                        md = p;
                        printk("mem%02u: type=%u, attr=0x%lx, range=[0x%016lx-0x%016lx) (%luMB)\n",
                               i, md->type, md->attribute, md->phys_addr,
-                              md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT),
+                              md->phys_addr + efi_md_size(md),
                               md->num_pages >> (20 - EFI_PAGE_SHIFT));
                }
        }
@@ -656,7 +656,7 @@ efi_memory_descriptor (unsigned long phys_addr)
        for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) {
                md = p;
 
-               if (phys_addr - md->phys_addr < (md->num_pages << EFI_PAGE_SHIFT))
+               if (phys_addr - md->phys_addr < efi_md_size(md))
                         return md;
        }
        return NULL;
@@ -1158,7 +1158,7 @@ efi_initialize_iomem_resources(struct resource *code_resource,
 
                res->name = name;
                res->start = md->phys_addr;
-               res->end = md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - 1;
+               res->end = md->phys_addr + efi_md_size(md) - 1;
                res->flags = flags;
 
                if (insert_resource(&iomem_resource, res) < 0)
index 454d7a7dfa9d99e7a8d64382b1adce1ee67945f5..3cb1abc00e24f585119def5e51cc72da0d47ea37 100644 (file)
@@ -30,7 +30,7 @@ SECTIONS
         * the dynamic symbol table et al.  If this amount is insufficient,
         * ld -shared will barf.  Just increase it here.
         */
-       . = GATE_ADDR + 0x500;
+       . = GATE_ADDR + 0x600;
 
        .data.patch             : {
                __start_gate_mckinley_e9_patchlist = .;
index bd17190bebb637ece33a8225381a11f49d31b0eb..c3b4412ccc676a85ee76fb0c3a0a436c85b85f68 100644 (file)
@@ -63,6 +63,9 @@ EXPORT_SYMBOL(__udivdi3);
 EXPORT_SYMBOL(__moddi3);
 EXPORT_SYMBOL(__umoddi3);
 
+#include <asm/page.h>
+EXPORT_SYMBOL(copy_page);
+
 #if defined(CONFIG_MD_RAID456) || defined(CONFIG_MD_RAID456_MODULE)
 extern void xor_ia64_2(void);
 extern void xor_ia64_3(void);
index 274a593830432ba711a32725820f520071426a3d..398e2fd1cd2519ef2d6a2186308cd992073b0ec5 100644 (file)
@@ -199,19 +199,6 @@ static inline int __gsi_to_irq(unsigned int gsi)
        return -1;
 }
 
-/*
- * Translate GSI number to the corresponding IA-64 interrupt vector.  If no
- * entry exists, return -1.
- */
-inline int
-gsi_to_vector (unsigned int gsi)
-{
-       int irq = __gsi_to_irq(gsi);
-       if (check_irq_used(irq) < 0)
-               return -1;
-       return irq_to_vector(irq);
-}
-
 int
 gsi_to_irq (unsigned int gsi)
 {
@@ -429,7 +416,7 @@ iosapic_end_level_irq (unsigned int irq)
 #define iosapic_disable_level_irq      mask_irq
 #define iosapic_ack_level_irq          nop
 
-struct irq_chip irq_type_iosapic_level = {
+static struct irq_chip irq_type_iosapic_level = {
        .name =         "IO-SAPIC-level",
        .startup =      iosapic_startup_level_irq,
        .shutdown =     iosapic_shutdown_level_irq,
@@ -478,7 +465,7 @@ iosapic_ack_edge_irq (unsigned int irq)
 #define iosapic_disable_edge_irq       nop
 #define iosapic_end_edge_irq           nop
 
-struct irq_chip irq_type_iosapic_edge = {
+static struct irq_chip irq_type_iosapic_edge = {
        .name =         "IO-SAPIC-edge",
        .startup =      iosapic_startup_edge_irq,
        .shutdown =     iosapic_disable_edge_irq,
@@ -491,7 +478,7 @@ struct irq_chip irq_type_iosapic_edge = {
        .set_affinity = iosapic_set_affinity
 };
 
-unsigned int
+static unsigned int
 iosapic_version (char __iomem *addr)
 {
        /*
@@ -938,7 +925,7 @@ iosapic_register_platform_intr (u32 int_type, unsigned int gsi,
              case ACPI_INTERRUPT_CPEI:
                irq = vector = IA64_CPE_VECTOR;
                BUG_ON(bind_irq_vector(irq, vector, CPU_MASK_ALL));
-               delivery = IOSAPIC_LOWEST_PRIORITY;
+               delivery = IOSAPIC_FIXED;
                mask = 1;
                break;
              default:
index 5fd65d8302c8561e50cf12a576f0c54569c30d1d..fc4d2676264f363d766ce4d9b6c5f76176fd4cb4 100644 (file)
@@ -182,8 +182,8 @@ static int __kprobes unsupported_inst(uint template, uint  slot,
        qp = kprobe_inst & 0x3f;
        if (is_cmp_ctype_unc_inst(template, slot, major_opcode, kprobe_inst)) {
                if (slot == 1 && qp)  {
-                       printk(KERN_WARNING "Kprobes on cmp unc"
-                                       "instruction on slot 1 at <0x%lx>"
+                       printk(KERN_WARNING "Kprobes on cmp unc "
+                                       "instruction on slot 1 at <0x%lx> "
                                        "is not supported\n", addr);
                        return -EINVAL;
 
@@ -221,8 +221,8 @@ static int __kprobes unsupported_inst(uint template, uint  slot,
                         * bit 12 to be equal to 1
                         */
                        if (slot == 1 && qp) {
-                               printk(KERN_WARNING "Kprobes on test bit"
-                                               "instruction on slot at <0x%lx>"
+                               printk(KERN_WARNING "Kprobes on test bit "
+                                               "instruction on slot at <0x%lx> "
                                                "is not supported\n", addr);
                                return -EINVAL;
                        }
@@ -242,7 +242,7 @@ static int __kprobes unsupported_inst(uint template, uint  slot,
                         */
                        int x6=(kprobe_inst >> 27) & 0x3F;
                        if ((x6 == 0x10) || (x6 == 0x11)) {
-                               printk(KERN_WARNING "Kprobes on"
+                               printk(KERN_WARNING "Kprobes on "
                                        "Indirect Predict is not supported\n");
                                return -EINVAL;
                        }
@@ -430,6 +430,23 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
         *       real return address, and all the rest will point to
         *       kretprobe_trampoline
         */
+       hlist_for_each_entry_safe(ri, node, tmp, head, hlist) {
+               if (ri->task != current)
+                       /* another task is sharing our hash bucket */
+                       continue;
+
+               orig_ret_address = (unsigned long)ri->ret_addr;
+               if (orig_ret_address != trampoline_address)
+                       /*
+                        * This is the real return address. Any other
+                        * instances associated with this task are for
+                        * other calls deeper on the call stack
+                        */
+                       break;
+       }
+
+       regs->cr_iip = orig_ret_address;
+
        hlist_for_each_entry_safe(ri, node, tmp, head, hlist) {
                if (ri->task != current)
                        /* another task is sharing our hash bucket */
@@ -452,8 +469,6 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
 
        kretprobe_assert(ri, orig_ret_address, trampoline_address);
 
-       regs->cr_iip = orig_ret_address;
-
        reset_current_kprobe();
        spin_unlock_irqrestore(&kretprobe_lock, flags);
        preempt_enable_no_resched();
index 2b3751eef5ce716506706134e19b3d520b196119..4ac2b1f1bd3b7fb49b4407c32b0482a5226b7a61 100644 (file)
@@ -95,7 +95,6 @@ static struct resource bss_resource = {
        .name   = "Kernel bss",
        .flags  = IORESOURCE_BUSY | IORESOURCE_MEM
 };
-extern char _text[], _end[], _etext[], _edata[], _bss[];
 
 unsigned long ia64_max_cacheline_size;
 
@@ -206,7 +205,7 @@ static int __init register_memory(void)
        code_resource.end   = ia64_tpa(_etext) - 1;
        data_resource.start = ia64_tpa(_etext);
        data_resource.end   = ia64_tpa(_edata) - 1;
-       bss_resource.start  = ia64_tpa(_bss);
+       bss_resource.start  = ia64_tpa(__bss_start);
        bss_resource.end    = ia64_tpa(_end) - 1;
        efi_initialize_iomem_resources(&code_resource, &data_resource,
                        &bss_resource);
index cdb64cc4d9c85d93ad21b26756047d358387700a..4c730099d58fcbfae6140c4f523bf210426b733b 100644 (file)
@@ -98,7 +98,7 @@ restore_sigcontext (struct sigcontext __user *sc, struct sigscratch *scr)
        if ((flags & IA64_SC_FLAG_FPH_VALID) != 0) {
                struct ia64_psr *psr = ia64_psr(&scr->pt);
 
-               __copy_from_user(current->thread.fph, &sc->sc_fr[32], 96*16);
+               err |= __copy_from_user(current->thread.fph, &sc->sc_fr[32], 96*16);
                psr->mfh = 0;   /* drop signal handler's fph contents... */
                preempt_disable();
                if (psr->dfh)
@@ -244,7 +244,7 @@ static long
 setup_sigcontext (struct sigcontext __user *sc, sigset_t *mask, struct sigscratch *scr)
 {
        unsigned long flags = 0, ifs, cfm, nat;
-       long err;
+       long err = 0;
 
        ifs = scr->pt.cr_ifs;
 
@@ -257,12 +257,12 @@ setup_sigcontext (struct sigcontext __user *sc, sigset_t *mask, struct sigscratc
        ia64_flush_fph(current);
        if ((current->thread.flags & IA64_THREAD_FPH_VALID)) {
                flags |= IA64_SC_FLAG_FPH_VALID;
-               __copy_to_user(&sc->sc_fr[32], current->thread.fph, 96*16);
+               err = __copy_to_user(&sc->sc_fr[32], current->thread.fph, 96*16);
        }
 
        nat = ia64_get_scratch_nat_bits(&scr->pt, scr->scratch_unat);
 
-       err  = __put_user(flags, &sc->sc_flags);
+       err |= __put_user(flags, &sc->sc_flags);
        err |= __put_user(nat, &sc->sc_nat);
        err |= PUT_SIGSET(mask, &sc->sc_mask);
        err |= __put_user(cfm, &sc->sc_cfm);
index 00232b4357ba20eeab9ef1dd82dddbaf489d0a57..757e419ebcf81f0ea1da02916e82d7302dc8395f 100644 (file)
@@ -240,11 +240,12 @@ SECTIONS
   .sdata : AT(ADDR(.sdata) - LOAD_OFFSET)
        { *(.sdata) *(.sdata1) *(.srdata) }
   _edata  =  .;
-  _bss = .;
+  __bss_start = .;
   .sbss : AT(ADDR(.sbss) - LOAD_OFFSET)
        { *(.sbss) *(.scommon) }
   .bss : AT(ADDR(.bss) - LOAD_OFFSET)
        { *(.bss) *(COMMON) }
+  __bss_stop = .;
 
   _end = .;
 
index 46edf8444c7ed0c9d3351e30e2c080e9a8fd7f0a..98771e2a78afdb9040c5c05cdcc8b3cfde9fc44b 100644 (file)
@@ -11,8 +11,8 @@ lib-y := __divsi3.o __udivsi3.o __modsi3.o __umodsi3.o                        \
        flush.o ip_fast_csum.o do_csum.o                                \
        memset.o strlen.o xor.o
 
-lib-$(CONFIG_ITANIUM)  += copy_page.o copy_user.o memcpy.o
-lib-$(CONFIG_MCKINLEY) += copy_page_mck.o memcpy_mck.o
+obj-$(CONFIG_ITANIUM)  += copy_page.o copy_user.o memcpy.o
+obj-$(CONFIG_MCKINLEY) += copy_page_mck.o memcpy_mck.o
 lib-$(CONFIG_PERFMON)  += carta_random.o
 
 AFLAGS___divdi3.o      =
index 1682fc639038e79f64e5a1e1cb96ad846e843035..cef164729db79d77d5b3cb8c694787cf10b8cc6f 100644 (file)
@@ -180,7 +180,7 @@ ia64_tlb_init (void)
        long status;
 
        if ((status = ia64_pal_vm_page_size(&tr_pgbits, &purge.mask)) != 0) {
-               printk(KERN_ERR "PAL_VM_PAGE_SIZE failed with status=%ld;"
+               printk(KERN_ERR "PAL_VM_PAGE_SIZE failed with status=%ld; "
                       "defaulting to architected purge page-sizes.\n", status);
                purge.mask = 0x115557000UL;
        }
old mode 100755 (executable)
new mode 100644 (file)
index 4594770e685a300dbb2ce3e85ab845829a1cf289..c4eb84f9e78119c624889e02b43bbfbcca489730 100644 (file)
@@ -347,7 +347,7 @@ sn_common_bus_fixup(struct pci_bus *bus,
        if (controller->node >= num_online_nodes()) {
                struct pcibus_bussoft *b = SN_PCIBUS_BUSSOFT(bus);
 
-               printk(KERN_WARNING "Device ASIC=%u XID=%u PBUSNUM=%u"
+               printk(KERN_WARNING "Device ASIC=%u XID=%u PBUSNUM=%u "
                       "L_IO=%lx L_MEM=%lx BASE=%lx\n",
                       b->bs_asic_type, b->bs_xid, b->bs_persist_busnum,
                       b->bs_legacy_io, b->bs_legacy_mem, b->bs_base);
@@ -545,19 +545,18 @@ sn_io_late_init(void)
                nasid = NASID_GET(bussoft->bs_base);
                cnode = nasid_to_cnodeid(nasid);
                if ((bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCP) ||
-                   (bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCE)) {
-                       /* TIO PCI Bridge: find nearest node with CPUs */
+                   (bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCE) ||
+                   (bussoft->bs_asic_type == PCIIO_ASIC_TYPE_PIC)) {
+                       /* PCI Bridge: find nearest node with CPUs */
                        int e = sn_hwperf_get_nearest_node(cnode, NULL,
                                                           &near_cnode);
                        if (e < 0) {
                                near_cnode = (cnodeid_t)-1; /* use any node */
-                               printk(KERN_WARNING "pcibr_bus_fixup: failed "
-                                      "to find near node with CPUs to TIO "
+                               printk(KERN_WARNING "sn_io_late_init: failed "
+                                      "to find near node with CPUs for "
                                       "node %d, err=%d\n", cnode, e);
                        }
                        PCI_CONTROLLER(bus)->node = near_cnode;
-               } else if (bussoft->bs_asic_type == PCIIO_ASIC_TYPE_PIC) {
-                       PCI_CONTROLLER(bus)->node = cnode;
                }
        }
 
index b8f712859140504c7c3cff48f518a0f7fd7d8014..a3a4288daae81186ecbb112c8645035f2ba26936 100644 (file)
@@ -80,7 +80,6 @@ extern int iosapic_remove (unsigned int gsi_base);
 #else
 #define iosapic_remove(gsi_base)                               (-EINVAL)
 #endif /* CONFIG_HOTPLUG */
-extern int gsi_to_vector (unsigned int gsi);
 extern int gsi_to_irq (unsigned int gsi);
 extern int iosapic_register_intr (unsigned int gsi, unsigned long polarity,
                                  unsigned long trigger);
@@ -94,7 +93,6 @@ extern int __init iosapic_register_platform_intr (u32 int_type,
                                           u16 eid, u16 id,
                                           unsigned long polarity,
                                           unsigned long trigger);
-extern unsigned int iosapic_version (char __iomem *addr);
 
 #ifdef CONFIG_NUMA
 extern void __devinit map_iosapic_to_node (unsigned int, int);