1. 21 12月, 2008 6 次提交
  2. 18 12月, 2008 1 次提交
    • D
      powerpc/fsl-booke: Fix the miss interrupt restore · 28707af0
      Dave Liu 提交于
      The commit e5e774d8
      powerpc/fsl-booke: Fix problem with _tlbil_va being interrupted
      introduce one issue. that casue the problem like this:
      
      Kernel BUG at c00b19fc [verbose debug info unavailable]
      Oops: Exception in kernel mode, sig: 5 [#1]
      MPC8572 DS
      Modules linked in:
      NIP: c00b19fc LR: c00b1c34 CTR: c0064e88
      REGS: ef02b7b0 TRAP: 0700   Not tainted  (2.6.28-rc8-00057-g1bda7128)
      MSR: 00021000 <ME>  CR: 44048028  XER: 20000000
      TASK = ef02c000[1] 'init' THREAD: ef02a000
      GPR00: 00000001 ef02b860 ef02c000 eec201a0 c0dec2c0 00000000 000078a1 00000400
      GPR08: c00b4e40 000078a1 c048ec00 a1780000 44048028 ecd26917 00000001 ef02b948
      GPR16: ffffffea 0000020c 00000000 00000000 00000003 0000000a 00000000 000078a1
      GPR24: eec201a0 00000000 ed849000 00000400 ef02b95c 00000001 ef02b978 ef02b984
      NIP [c00b19fc] __find_get_block+0x24/0x238
      LR [c00b1c34] __getblk+0x24/0x2a0
      Call Trace:
      [ef02b860] [c017b768] generic_make_request+0x290/0x328 (unreliable)
      [ef02b8b0] [c00b1c34] __getblk+0x24/0x2a0
      [ef02b910] [c00b4ae4] __bread+0x14/0xf8
      [ef02b920] [c00fc228] ext2_get_branch+0xf0/0x138
      [ef02b940] [c00fcc88] ext2_get_block+0xb8/0x828
      [ef02ba00] [c00bbdc8] do_mpage_readpage+0x188/0x808
      [ef02bac0] [c00bc5b4] mpage_readpages+0xec/0x144
      [ef02bb50] [c00fba38] ext2_readpages+0x24/0x34
      [ef02bb60] [c006ade0] __do_page_cache_readahead+0x150/0x230
      [ef02bbb0] [c0064bdc] filemap_fault+0x31c/0x3e0
      [ef02bbf0] [c00728b8] __do_fault+0x60/0x5b0
      [ef02bc50] [c0011e0c] do_page_fault+0x2d8/0x4c4
      [ef02bd10] [c000ed90] handle_page_fault+0xc/0x80
      [ef02bdd0] [c00c7adc] set_brk+0x74/0x9c
      [ef02bdf0] [c00c9274] load_elf_binary+0x70c/0x1180
      [ef02be70] [c00945f0] search_binary_handler+0xa8/0x274
      [ef02bea0] [c0095818] do_execve+0x19c/0x1d4
      [ef02bed0] [c000766c] sys_execve+0x58/0x84
      [ef02bef0] [c000e950] ret_from_syscall+0x0/0x3c
      [ef02bfb0] [c009c6fc] sys_dup+0x24/0x6c
      [ef02bfc0] [c0001e04] init_post+0xb0/0xf0
      [ef02bfd0] [c046c1ac] kernel_init+0xcc/0xf4
      [ef02bff0] [c000e6d0] kernel_thread+0x4c/0x68
      Instruction dump:
      4bffffa4 813f000c 4bffffac 9421ffb0 7c0802a6 7d800026 90010054 bf210034
      91810030 7c0000a6 68008000 54008ffe <0f000000> 3d20c04e 3b29ffb8 38000008
      
      The issue was the beqlr returns early but we haven't reenabled interrupts.
      Signed-off-by: NDave Liu <daveliu@freescale.com>
      Signed-off-by: NKumar Gala <galak@kernel.crashing.org>
      28707af0
  3. 16 12月, 2008 4 次提交
  4. 14 12月, 2008 1 次提交
    • K
      powerpc/fsl-booke: Fix problem with _tlbil_va being interrupted · e5e774d8
      Kumar Gala 提交于
      An example calling sequence which we did see:
      
      copy_user_highpage -> kmap_atomic -> flush_tlb_page -> _tlbil_va
      
      We got interrupted after setting up the MAS registers before the
      tlbwe and the interrupt handler that caused the interrupt also did
      a kmap_atomic (ide code) and thus on returning from the interrupt
      the MAS registers no longer contained the proper values.
      
      Since we dont save/restore MAS registers for normal interrupts we
      need to disable interrupts in _tlbil_va to ensure atomicity.
      Signed-off-by: NKumar Gala <galak@kernel.crashing.org>
      e5e774d8
  5. 06 12月, 2008 1 次提交
  6. 03 12月, 2008 10 次提交
  7. 01 12月, 2008 3 次提交
    • M
      powerpc: Fix build for 32-bit SMP configs · a1e0eb10
      Milton Miller 提交于
      attr_smt_snooze_delay is only defined for CONFIG_PPC64, so protect the
      attribute removal with the same condition.  This fixes this build error
      on 32-bit SMP configurations:
      
      /data/home/miltonm/next.git/arch/powerpc/kernel/sysfs.c: In function ‘unregister_cpu_online’:
      /data/home/miltonm/next.git/arch/powerpc/kernel/sysfs.c:722: error: ‘attr_smt_snooze_delay’ undeclared (first use in this function)
      /data/home/miltonm/next.git/arch/powerpc/kernel/sysfs.c:722: error: (Each undeclared identifier is reported only once
      /data/home/miltonm/next.git/arch/powerpc/kernel/sysfs.c:722: error: for each function it appears in.)
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      a1e0eb10
    • P
      powerpc: Fix system calls on Cell entered with XER.SO=1 · ab598b66
      Paul Mackerras 提交于
      It turns out that on Cell, on a kernel with CONFIG_VIRT_CPU_ACCOUNTING
      = y, if a program sets the SO (summary overflow) bit in the XER and
      then does a system call, the SO bit in CR0 will be set on return
      regardless of whether the system call detected an error.  Since CR0.SO
      is used as the error indication from the system call, this means that
      all system calls appear to fail.
      
      The reason is that the workaround for the timebase bug on Cell uses a
      compare instruction.  With CONFIG_VIRT_CPU_ACCOUNTING = y, the
      ACCOUNT_CPU_USER_ENTRY macro reads the timebase, so we end up doing a
      compare instruction, which copies XER.SO to CR0.SO.  Since we were
      doing this in the system call entry patch after clearing CR0.SO but
      before saving the CR, this meant that the saved CR image had CR0.SO
      set if XER.SO was set on entry.
      
      This fixes it by moving the clearing of CR0.SO to after the
      ACCOUNT_CPU_USER_ENTRY call in the system call entry path.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      Acked-by: NArnd Bergmann <arnd@arndb.de>
      Acked-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      ab598b66
    • A
      powerpc: Fix IRQ assignment for some PCIe devices · 4b824de9
      Adhemerval Zanella 提交于
      Currently, some PCIe devices on POWER6 machines do not get interrupts
      assigned correctly.  The problem is that OF doesn't create an
      "interrupt" property for them.  The fix is for of_irq_map_pci to fall
      back to using the value in the PCI interrupt-pin register in config
      space, as we do when there is no OF device-tree node for the device.
      
      I have verified that this works fine with a pair of Squib-E SAS
      adapter on a P6-570.
      Acked-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      4b824de9
  8. 19 11月, 2008 2 次提交
  9. 13 11月, 2008 1 次提交
  10. 11 11月, 2008 1 次提交
  11. 09 11月, 2008 1 次提交
    • K
      powerpc/fsl-booke: Fix synchronization bug w/local tlb invalidates · b41d6fee
      Kumar Gala 提交于
      The implemetation of _tlbil_pid() on Freescale Book-E cores needs
      an msync & isync after we flash invalidate the TLBs.  This was causing
      the following oops reported by Sebastian Andrzej Siewior:
      
        VFS: Mounted root (nfs filesystem) readonly.
        Freeing unused kernel memory: 148k init
        BUG: sleeping function called from invalid context at /home/bigeasy/git/linux-2.6-powerpc/mm/mmap.c:234
        in_atomic():1, irqs_disabled():0
        Call Trace:
        [df189df0] [c0007160] show_stack+0x48/0x148 (unreliable)
        [df189e30] [c0029480] __might_sleep+0xf0/0x100
        [df189e40] [c0070ac0] remove_vma+0x28/0x98
        [df189e50] [c0070c1c] exit_mmap+0xec/0x128
        [df189e80] [c002d2f4] mmput+0x54/0xec
        [df189ea0] [c0030b6c] exit_mm+0x10c/0x120
        [df189ed0] [c003288c] do_exit+0x1ac/0x6e8
        [df189f20] [c0032e48] do_group_exit+0x80/0xac
        [df189f40] [c000e9dc] ret_from_syscall+0x0/0x3c
        BUG: scheduling while atomic: udevd/956/0x10000002
        Modules linked in:
        Call Trace:
        [df189df0] [c0007160] show_stack+0x48/0x148 (unreliable)
        [df189e30] [c002ac88] __schedule_bug+0x58/0x6c
        [df189e40] [c023e6cc] schedule+0xa8/0x4a8
        [df189e90] [c002ad6c] __cond_resched+0x38/0x64
        [df189ea0] [c023ebc8] _cond_resched+0x3c/0x58
        [df189eb0] [c0030e70] put_files_struct+0x90/0xec
        [df189ed0] [c00328a8] do_exit+0x1c8/0x6e8
        [df189f20] [c0032e48] do_group_exit+0x80/0xac
        [df189f40] [c000e9dc] ret_from_syscall+0x0/0x3c
      Signed-off-by: NKumar Gala <galak@kernel.crashing.org>
      b41d6fee
  12. 06 11月, 2008 6 次提交
    • P
      powerpc: Eliminate unused do_gtod variable · 3cc69878
      Paul Mackerras 提交于
      Since we started using the generic timekeeping code, we haven't had a
      powerpc-specific version of do_gettimeofday, and hence there is now
      nothing that reads the do_gtod variable in arch/powerpc/kernel/time.c.
      This therefore removes it and the code that sets it.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      3cc69878
    • P
      powerpc: Improve resolution of VDSO clock_gettime · 597bc5c0
      Paul Mackerras 提交于
      Currently the clock_gettime implementation in the VDSO produces a
      result with microsecond resolution for the cases that are handled
      without a system call, i.e. CLOCK_REALTIME and CLOCK_MONOTONIC.  The
      nanoseconds field of the result is obtained by computing a
      microseconds value and multiplying by 1000.
      
      This changes the code in the VDSO to do the computation for
      clock_gettime with nanosecond resolution.  That means that the
      resolution of the result will ultimately depend on the timebase
      frequency.
      
      Because the timestamp in the VDSO datapage (stamp_xsec, the real time
      corresponding to the timebase count in tb_orig_stamp) is in units of
      2^-20 seconds, it doesn't have sufficient resolution for computing a
      result with nanosecond resolution.  Therefore this adds a copy of
      xtime to the VDSO datapage and updates it in update_gtod() along with
      the other time-related fields.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      597bc5c0
    • B
      powerpc/pci: Cosmetic cleanups of pci-common.c · 7eef440a
      Benjamin Herrenschmidt 提交于
      This does a few cosmetic cleanups, moving a couple of things around
      but without actually changing what the code does.
      
      (There is a minor change in ordering of operations in
      pcibios_setup_bus_devices but it should have no impact).
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      7eef440a
    • B
      powerpc/pci: Fix various pseries PCI hotplug issues · fd6852c8
      Benjamin Herrenschmidt 提交于
      The pseries PCI hotplug code has a number of issues, ranging from
      incorrect resource setup to crashes, depending on what is added,
      when, whether it contains a bridge, etc etc....
      
      This fixes a whole bunch of these, while actually simplifying the code
      a bit, using more generic code in the process and factoring out common
      code between adding of a PHB, a slot or a device.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      fd6852c8
    • B
      powerpc/pci: Make pcibios_allocate_bus_resources more robust · b5ae5f91
      Benjamin Herrenschmidt 提交于
      To properly fix PCI hotplug, it's useful to be able to make the fixup
      passes on all devices whether they were just hot plugged or already
      there.
      
      However, pcibios_allocate_bus_resources() wouldn't cope well with
      being called twice for a given bus.  This makes it ignore resources
      that have already been allocated, along with adding a bit of debug
      output.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      b5ae5f91
    • B
      powerpc/pci: Split pcibios_fixup_bus() into bus setup and device setup · 8b8da358
      Benjamin Herrenschmidt 提交于
      Currently, our PCI code uses the pcibios_fixup_bus() callback, which
      is called by the generic code when probing PCI buses, for two
      different things.
      
      One is to set up things related to the bus itself, such as reading
      bridge resources for P2P bridges, fixing them up, or setting up the
      iommu's associated with bridges on some platforms.
      
      The other is some setup for each individual device under that bridge,
      mostly setting up DMA mappings and interrupts.
      
      The problem is that this approach doesn't work well with PCI hotplug
      when an existing bus is re-probed for new children.  We fix this
      problem by splitting pcibios_fixup_bus into two routines:
      
      	pcibios_setup_bus_self() is now called to setup the bus itself
      
      	pcibios_setup_bus_devices() is now called to setup devices
      
      pcibios_fixup_bus() is then modified to call these two after reading the
      bridge bases, and the OF based PCI probe is modified to avoid calling
      into the first one when rescanning an existing bridge.
      
      [paulus@samba.org - fixed eeh.h for 32-bit compile now that pci-common.c
      is including it unconditionally.]
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      8b8da358
  13. 05 11月, 2008 3 次提交