1. 20 6月, 2011 4 次提交
  2. 16 6月, 2011 1 次提交
  3. 12 6月, 2011 1 次提交
  4. 10 6月, 2011 4 次提交
  5. 09 6月, 2011 8 次提交
  6. 08 6月, 2011 8 次提交
    • T
      x86: cpu-hotplug: Prevent softirq wakeup on wrong CPU · fd8a7de1
      Thomas Gleixner 提交于
      After a newly plugged CPU sets the cpu_online bit it enables
      interrupts and goes idle. The cpu which brought up the new cpu waits
      for the cpu_online bit and when it observes it, it sets the cpu_active
      bit for this cpu. The cpu_active bit is the relevant one for the
      scheduler to consider the cpu as a viable target.
      
      With forced threaded interrupt handlers which imply forced threaded
      softirqs we observed the following race:
      
      cpu 0                         cpu 1
      
      bringup(cpu1);
                                    set_cpu_online(smp_processor_id(), true);
      		              local_irq_enable();
      while (!cpu_online(cpu1));
                                    timer_interrupt()
                                      -> wake_up(softirq_thread_cpu1);
                                           -> enqueue_on(softirq_thread_cpu1, cpu0);
      
                                                                              ^^^^
      
      cpu_notify(CPU_ONLINE, cpu1);
        -> sched_cpu_active(cpu1)
           -> set_cpu_active((cpu1, true);
      
      When an interrupt happens before the cpu_active bit is set by the cpu
      which brought up the newly onlined cpu, then the scheduler refuses to
      enqueue the woken thread which is bound to that newly onlined cpu on
      that newly onlined cpu due to the not yet set cpu_active bit and
      selects a fallback runqueue. Not really an expected and desirable
      behaviour.
      
      So far this has only been observed with forced hard/softirq threading,
      but in theory this could happen without forced threaded hard/softirqs
      as well. It's probably unobservable as it would take a massive
      interrupt storm on the newly onlined cpu which causes the softirq loop
      to wake up the softirq thread and an even longer delay of the cpu
      which waits for the cpu_online bit.
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Reviewed-by: NPeter Zijlstra <peterz@infradead.org>
      Cc: stable@kernel.org # 2.6.39
      fd8a7de1
    • D
      MN10300: Add missing _sdata declaration · 40182373
      David Howells 提交于
      _sdata needs to be declared in the linker script now as of commit
      a2d063ac ("extable, core_kernel_data(): Make sure all archs define
      _sdata")
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      40182373
    • D
      MN10300: die_if_no_fixup() shouldn't use get_user() as it doesn't call set_fs() · db1c9dfa
      David Howells 提交于
      die_if_no_fixup() shouldn't use get_user() as it doesn't call set_fs() to
      indicate that it wants to probe a kernel address.  Instead it should use
      probe_kernel_read().
      
      This fixes the problem of gdb seeing SIGILL rather than SIGTRAP when hitting
      the KGDB special breakpoint upon SysRq+g being seen.  The problem was that
      die_if_no_fixup() was failing to read the opcode of the instruction that caused
      the exception, and thus not fixing up the exception.
      
      This caused gdb to get a S04 response to the $? request in its remote protocol
      rather than S05 - which would then cause it to continue with $C04 rather than
      $c in an attempt to pass the signal onto the inferior process.  The kernel,
      however, does not support $Cnn, and so objects by returning an E22 response,
      indicating an error.  gdb does not expect this and prints:
      
      	warning: Remote failure reply: E22
      
      and then returns to the gdb command prompt unable to continue.
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      db1c9dfa
    • D
      MN10300: Fix one of the kernel debugger cacheflush variants · 2e65d1f6
      David Howells 提交于
      One of the kernel debugger cacheflush variants escaped proper testing.  Two of
      the labels are wrong, being derived from the code that was copied to construct
      the variant.
      
      The first label results in the following assembler message:
      
          AS      arch/mn10300/mm/cache-dbg-flush-by-reg.o
        arch/mn10300/mm/cache-dbg-flush-by-reg.S: Assembler messages:
        arch/mn10300/mm/cache-dbg-flush-by-reg.S:123: Error: symbol `debugger_local_cache_flushinv_no_dcache' is already defined
      
      And the second label results in the following linker message:
      
        arch/mn10300/mm/built-in.o:(.text+0x1d39): undefined reference to `mn10300_local_icache_inv_range_reg_end'
        arch/mn10300/mm/built-in.o:(.text+0x1d39): relocation truncated to fit: R_MN10300_PCREL16 against undefined symbol `mn10300_local_icache_inv_range_reg_end'
      
      To test this file the following configuration pieces must be set:
      
      	CONFIG_AM34=y
      	CONFIG_MN10300_CACHE_WBACK=y
      	CONFIG_MN10300_DEBUGGER_CACHE_FLUSH_BY_REG=y
      	CONFIG_MN10300_CACHE_MANAGE_BY_REG=y
      	CONFIG_AM34_HAS_CACHE_SNOOP=n
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      2e65d1f6
    • J
      sparc: Remove unnecessary semicolons · 6cb79b3f
      Joe Perches 提交于
      Semicolons are not necessary after switch/while/for/if braces
      so remove them.
      Signed-off-by: NJoe Perches <joe@perches.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6cb79b3f
    • O
      Add support for allocating irqs for bootbus devices · 9eeb0898
      oftedal 提交于
      Some devices that can generate interrupts are connected directly to the
      CPU through the bootbus on sun4d. This patch allows IRQs to be allocated
      for such devices. The information used for allocating interrupts for
      sbus devices are present at the corresponding SBI node. For bootbus
      devices this information is present in the bootbus node.
      Signed-off-by: NKjetil Oftedal <oftedal@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9eeb0898
    • O
      Do not skip interrupt sources in sun4d interrupt handler and acknowledge interrupts correctly · ea160584
      oftedal 提交于
      During the introduction of genirq on sparc32 bugs were introduced in
      the interrupt handler for sun4d. The interrupts handler checks the status
      of the various sbus interfaces in the system and generates a virtual
      interrupt, based upon the location of the interrupt source. This lookup
      was broken by restructuring the code in such a way that index and shift
      operations were performed prior to comparing this against the values
      read from the interrupt controllers.
      
      This could cause the handler to loop eternally as the interrupt source
      could be skipped before any check was performed. Additionally
      sun4d_encode_irq performs shifting internally, so it should not be performed
      twice.
      
      In sun4d_unmask interrupts were not correctly acknowledged, as the
      corresponding bit it the interrupt mask was not actually cleared.
      Signed-off-by: NKjetil Oftedal <oftedal@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ea160584
    • O
      Restructure sun4d_build_device_irq so that timer interrupts can be allocated · 5fba1708
      oftedal 提交于
      sun4d_build_device_irq was called without a valid platform_device when
      the system timer was initialized on sun4d systems. This caused a NULL
      pointer crash.
      
      Josip Rodin suggested that the current sun4d_build_device_irq should be
      split into two functions. So that the timer initialization could skip
      the slot and sbus interface detection code in sun4d_build_device_irq, as
      this does not make sence due to the timer interrupts not being generated
      from a device located on sbus.
      Signed-off-by: NKjetil Oftedal <oftedal@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5fba1708
  7. 07 6月, 2011 1 次提交
    • J
      x86/amd-iommu: Fix boot crash with hidden PCI devices · 26018874
      Joerg Roedel 提交于
      Some PCIe cards ship with a PCI-PCIe bridge which is not
      visible as a PCI device in Linux. But the device-id of the
      bridge is present in the IOMMU tables which causes a boot
      crash in the IOMMU driver.
      This patch fixes by removing these cards from the IOMMU
      handling. This is a pure -stable fix, a real fix to handle
      this situation appriatly will follow for the next merge
      window.
      
      Cc: stable@kernel.org	# > 2.6.32
      Signed-off-by: NJoerg Roedel <joerg.roedel@amd.com>
      26018874
  8. 06 6月, 2011 8 次提交
    • J
      x86/amd-iommu: Use only per-device dma_ops · 27c2127a
      Joerg Roedel 提交于
      Unfortunatly there are systems where the AMD IOMMU does not
      cover all devices. This breaks with the current driver as it
      initializes the global dma_ops variable. This patch limits
      the AMD IOMMU to the devices listed in the IVRS table fixing
      DMA for devices not covered by the IOMMU.
      
      Cc: stable@kernel.org
      Signed-off-by: NJoerg Roedel <joerg.roedel@amd.com>
      27c2127a
    • J
      x86/amd-iommu: Fix 3 possible endless loops · 0de66d5b
      Joerg Roedel 提交于
      The driver contains several loops counting on an u16 value
      where the exit-condition is checked against variables that
      can have values up to 0xffff. In this case the loops will
      never exit. This patch fixed 3 such loops.
      
      Cc: stable@kernel.org
      Signed-off-by: NJoerg Roedel <joerg.roedel@amd.com>
      0de66d5b
    • M
      [S390] fix kvm defines for 31 bit compile · 6c61cfe9
      Martin Schwidefsky 提交于
      KVM is not available for 31 bit but the KVM defines cause warnings:
      
      arch/s390/include/asm/pgtable.h: In function 'ptep_test_and_clear_user_dirty':
      arch/s390/include/asm/pgtable.h:817: warning: integer constant is too large for 'unsigned long' type
      arch/s390/include/asm/pgtable.h:818: warning: integer constant is too large for 'unsigned long' type
      arch/s390/include/asm/pgtable.h: In function 'ptep_test_and_clear_user_young':
      arch/s390/include/asm/pgtable.h:837: warning: integer constant is too large for 'unsigned long' type
      arch/s390/include/asm/pgtable.h:838: warning: integer constant is too large for 'unsigned long' type
      
      Add 31 bit versions of the KVM defines to remove the warnings.
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      6c61cfe9
    • M
      [S390] use generic RCU page-table freeing code · 36409f63
      Martin Schwidefsky 提交于
      Replace the s390 specific rcu page-table freeing code with the
      generic variant. This requires to duplicate the definition for the
      struct mmu_table_batch as s390 does not use the generic tlb flush
      code.
      
      While we are at it remove the restriction that page table fragments
      can not be reused after a single fragment has been freed with rcu
      and split out allocation and freeing of page tables with pgstes.
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      36409f63
    • J
      [S390] qdio: Split SBAL entry flags · 3ec90878
      Jan Glauber 提交于
      The qdio SBAL entry flag is made-up of four different values that are
      independent of one another. Some of the bits are reserved by the
      hardware and should not be changed by qdio. Currently all four values
      are overwritten since the SBAL entry flag is defined as an u32.
      
      Split the SBAL entry flag into four u8's as defined by the hardware
      and don't touch the reserved bits.
      Signed-off-by: NJan Glauber <jang@linux.vnet.ibm.com>
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      3ec90878
    • C
      [S390] kvm-s390: fix stfle facilities numbers >=64 · 9950f8be
      Christian Borntraeger 提交于
      Currently KVM masks out the known good facilities only for the first
      double word, but passed the 2nd double word without filtering. This
      breaks some code on newer systems:
      
      [    0.593966] ------------[ cut here ]------------
      [    0.594086] WARNING: at arch/s390/oprofile/hwsampler.c:696
      [    0.594213] Modules linked in:
      [    0.594321] Modules linked in:
      [    0.594439] CPU: 0 Not tainted 3.0.0-rc1 #46
      [    0.594564] Process swapper (pid: 1, task: 00000001effa8038, ksp: 00000001effafab8)
      [    0.594735] Krnl PSW : 0704100180000000 00000000004ab89a (hwsampler_setup+0x75a/0x7b8)
      [    0.594910]            R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:0 CC:1 PM:0 EA:3
      [    0.595120] Krnl GPRS: ffffffff00000000 00000000ffffffea ffffffffffffffea 00000000004a98f8
      [    0.595351]            00000000004aa002 0000000000000001 000000000080e720 000000000088b9f8
      [    0.595522]            000000000080d3e8 0000000000000000 0000000000000000 000000000080e464
      [    0.595725]            0000000000000000 00000000005db198 00000000004ab3a2 00000001effafd98
      [    0.595901] Krnl Code: 00000000004ab88c: c0e5000673ca        brasl   %r14,57a020
      [    0.596071]            00000000004ab892: a7f4fc77            brc     15,4ab180
      [    0.596276]            00000000004ab896: a7f40001            brc     15,4ab898
      [    0.596454]           >00000000004ab89a: a7c8ffa1            lhi     %r12,-95
      [    0.596657]            00000000004ab89e: a7f4fc71            brc     15,4ab180
      [    0.596854]            00000000004ab8a2: a7f40001            brc     15,4ab8a4
      [    0.597029]            00000000004ab8a6: a7f4ff22            brc     15,4ab6ea
      [    0.597230]            00000000004ab8aa: c0200011009a        larl    %r2,6cb9de
      [    0.597441] Call Trace:
      [    0.597511] ([<00000000004ab3a2>] hwsampler_setup+0x262/0x7b8)
      [    0.597676]  [<0000000000875812>] oprofile_arch_init+0x32/0xd0
      [    0.597834]  [<0000000000875788>] oprofile_init+0x28/0x74
      [    0.597991]  [<00000000001001be>] do_one_initcall+0x3a/0x170
      [    0.598151]  [<000000000084fa22>] kernel_init+0x142/0x1ec
      [    0.598314]  [<000000000057db16>] kernel_thread_starter+0x6/0xc
      [    0.598468]  [<000000000057db10>] kernel_thread_starter+0x0/0xc
      [    0.598606] Last Breaking-Event-Address:
      [    0.598707]  [<00000000004ab896>] hwsampler_setup+0x756/0x7b8
      [    0.598863] ---[ end trace ce3179037f4e3e5b ]---
      
      So lets also mask the 2nd double word. Facilites 66,76,76,77 should be fine.
      Signed-off-by: NChristian Borntraeger <borntraeger@de.ibm.com>
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      9950f8be
    • C
      [S390] kvm-s390: Fix host crash on misbehaving guests · a578b37c
      Christian Borntraeger 提交于
      commit 9ff4cfb3 ([S390] kvm-390: Let
      kernel exit SIE instruction on work) fixed a problem of commit
      commit cd3b70f5 ([S390] virtualization
      aware cpu measurement) but uncovered another one.
      
      If a kvm guest accesses guest real memory that doesnt exist, the
      page fault handler calls the sie hook, which then rewrites
      the return psw from sie_inst to either sie_exit or sie_reenter.
      On return, the page fault handler will then detect the wrong access
      as a kernel fault causing a kernel oops in sie_reenter or sie_exit.
      
      We have to add these two addresses to the exception  table to allow
      graceful exits.
      Signed-off-by: NChristian Borntraeger <borntraeger@de.ibm.com>
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      a578b37c
    • M
      KVM: x86: use proper port value when checking io instruction permission · 221192bd
      Marcelo Tosatti 提交于
      Commit f6511935 moved the permission check for io instructions
      to the ->check_perm callback. It failed to copy the port value from RDX
      register for string and "in,out ax,dx" instructions.
      
      Fix it by reading RDX register at decode stage when appropriate.
      
      Fixes FC8.32 installation.
      Signed-off-by: NMarcelo Tosatti <mtosatti@redhat.com>
      221192bd
  9. 05 6月, 2011 1 次提交
  10. 04 6月, 2011 4 次提交