1. 02 5月, 2013 6 次提交
  2. 13 4月, 2013 1 次提交
    • D
      x86-32: Fix possible incomplete TLB invalidate with PAE pagetables · 1de14c3c
      Dave Hansen 提交于
      This patch attempts to fix:
      
      	https://bugzilla.kernel.org/show_bug.cgi?id=56461
      
      The symptom is a crash and messages like this:
      
      	chrome: Corrupted page table at address 34a03000
      	*pdpt = 0000000000000000 *pde = 0000000000000000
      	Bad pagetable: 000f [#1] PREEMPT SMP
      
      Ingo guesses this got introduced by commit 611ae8e3 ("x86/tlb:
      enable tlb flush range support for x86") since that code started to free
      unused pagetables.
      
      On x86-32 PAE kernels, that new code has the potential to free an entire
      PMD page and will clear one of the four page-directory-pointer-table
      (aka pgd_t entries).
      
      The hardware aggressively "caches" these top-level entries and invlpg
      does not actually affect the CPU's copy.  If we clear one we *HAVE* to
      do a full TLB flush, otherwise we might continue using a freed pmd page.
      (note, we do this properly on the population side in pud_populate()).
      
      This patch tracks whenever we clear one of these entries in the 'struct
      mmu_gather', and ensures that we follow up with a full tlb flush.
      
      BTW, I disassembled and checked that:
      
      	if (tlb->fullmm == 0)
      and
      	if (!tlb->fullmm && !tlb->need_flush_all)
      
      generate essentially the same code, so there should be zero impact there
      to the !PAE case.
      Signed-off-by: NDave Hansen <dave.hansen@linux.intel.com>
      Cc: Peter Anvin <hpa@zytor.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Artem S Tashkinov <t.artem@mailcity.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      1de14c3c
  3. 12 4月, 2013 2 次提交
  4. 11 4月, 2013 5 次提交
  5. 10 4月, 2013 3 次提交
  6. 09 4月, 2013 8 次提交
    • S
      ARM: S3C24XX: Fix interrupt pending register offset of the EINT controller · 646dd2f0
      Sylwester Nawrocki 提交于
      The external pending interrupt register address (EINTPEND) offset is
      0xa8, not 0x08. Without this patch the external interrupts are not
      properly acknowledged, which may lead to an interrupt storm and the
      system hang as soon as any external interrupt is requested.
      Signed-off-by: NSylwester Nawrocki <s.nawrocki@samsung.com>
      Reviewed-by: NHeiko Stuebner <heiko@sntech.de>
      Signed-off-by: NKukjin Kim <kgene.kim@samsung.com>
      646dd2f0
    • S
      ARM: S3C24XX: Correct NR_IRQS definition for s3c2440 · b530f742
      Sylwester Nawrocki 提交于
      Due to NR_IRQS being incorrectly defined not all IRQ domains can
      be registered for S3C2440. It causes following errors on a s3c2440
      SoC based board:
      
      NR_IRQS:89
      S3C2440: IRQ Support
      irq: clearing pending status 00000002
      ------------[ cut here ]------------
      WARNING: at kernel/irq/irqdomain.c:234 0xc0056ed0()
      ...
      irq: could not create irq-domain
      ...
      s3c2410-wdt s3c2410-wdt: failed to install irq (-22)
      s3c2410-wdt: probe of s3c2410-wdt failed with error -22
      ...
      samsung-uart s3c2440-uart.0: cannot get irq 74
      
      Fix this by increasing NR_IRQS to at least (IRQ_S3C2443_AC97 + 1)
      if CPU_S3C2440 is selected, so the subintc IRQ domain gets properly
      registered.
      Signed-off-by: NTomasz Figa <tomasz.figa@gmail.com>
      Signed-off-by: NSylwester Nawrocki <s.nawrocki@samsung.com>
      Acked-by: NHeiko Stuebner <heiko@sntech.de>
      Signed-off-by: NKukjin Kim <kgene.kim@samsung.com>
      b530f742
    • D
      ARM i.MX6: Fix ldb_di clock selection · e8094b2c
      Dirk Behme 提交于
      According to the recent i.MX6 Quad technical reference manual, mode 0x4 (100b)
      of the CCM_CS2DCR register (address 0x020C402C) bits [11-9] and [14-12] select
      the PLL3 clock, and not the PLL3 PFD1 540M clock. In our code, the PLL3 root
      clock is named 'pll3_usb_otg', select this instead of the 540M clock.
      Signed-off-by: NDirk Behme <dirk.behme@de.bosch.com>
      Signed-off-by: NShawn Guo <shawn.guo@linaro.org>
      e8094b2c
    • S
      ARM: imx: provide twd clock lookup from device tree · 2bb4b70b
      Shawn Guo 提交于
      While booting from device tree, imx6q used to provide twd clock lookup
      by calling clk_register_clkdev() in clock driver.  However, the commit
      bd603455 (ARM: use device tree to get smp_twd clock) forces DT boot to
      look up the clock from device tree.  It causes the failure below when
      twd driver tries to get the clock, and hence kernel has to calibrate the
      local timer frequency.
      
       smp_twd: clock not found -2
       ...
       Calibrating local timer... 396.13MHz.
      
      Fix the regression by providing twd clock lookup from device tree, and
      remove the unused twd clk_register_clkdev() call from clock driver.
      Signed-off-by: NShawn Guo <shawn.guo@linaro.org>
      2bb4b70b
    • M
      ARM: imx35 Bugfix admux clock · 75498083
      Markus Pargmann 提交于
      The admux clock seems to be the audmux clock as tests show. audmux does
      not work without this clock enabled. Currently imx35 does not register a
      clock device for audmux. This patch adds this registration. imx-audmux
      driver already handles a clock device, so no changes are necessary
      there.
      Signed-off-by: NMarkus Pargmann <mpa@pengutronix.de>
      Cc: stable@vger.kernel.org
      Signed-off-by: NSascha Hauer <s.hauer@pengutronix.de>
      Signed-off-by: NShawn Guo <shawn.guo@linaro.org>
      75498083
    • M
      ARM: clk-imx35: Bugfix iomux clock · cab1e0a3
      Markus Pargmann 提交于
      This patch enables iomuxc_gate clock. It is necessary to be able to
      reconfigure iomux pads. Without this clock enabled, the
      clk_disable_unused function will disable this clock and the iomux pads
      are not configurable anymore. This happens at every boot. After a reboot
      (watchdog system reset) the clock is not enabled again, so all iomux pad
      reconfigurations in boot code are without effect.
      
      The iomux pads should be always configurable, so this patch always
      enables it.
      Signed-off-by: NMarkus Pargmann <mpa@pengutronix.de>
      Cc: stable@vger.kernel.org
      Signed-off-by: NSascha Hauer <s.hauer@pengutronix.de>
      Signed-off-by: NShawn Guo <shawn.guo@linaro.org>
      cab1e0a3
    • G
      m68k: define a local gpio_request_one() function · b2dfaa8d
      Greg Ungerer 提交于
      Compiling for linux-3.9-rc1 and later fails with:
      
      drivers/gpio/devres.c: In function 'devm_gpio_request_one':
      drivers/gpio/devres.c:90:2: error: implicit declaration of function 'gpio_request_one' [-Werror=implicit-function-declaration]
      
      So provide a local gpio_request_one() function. Code largely borrowed from
      blackfin's local gpio_request_one() function.
      Signed-off-by: NGreg Ungerer <gerg@uclinux.org>
      Acked-by: NLinus Walleij <linus.walleij@linaro.org>
      b2dfaa8d
    • C
      ARC: Add implicit compiler barrier to raw_local_irq* functions · 79e5f05e
      Christian Ruppert 提交于
      ARC irqsave/restore macros were missing the compiler barrier, causing a
      stale load in irq-enabled region be used in irq-safe region, despite
      being changed, because the register holding the value was still live.
      
      The problem manifested as random crashes in timer code when stress
      testing ARCLinux (3.9-rc3) on a !SMP && !PREEMPT_COUNT
      
      Here's the exact sequence which caused this:
       (0). tv1[x] <----> t1 <---> t2
       (1). mod_timer(t1) interrupted after it calls timer_pending()
       (2). mod_timer(t2) completes
       (3). mod_timer(t1) resumes but messes up the list
       (4). __runt_timers( ) uses bogus timer_list entry / crashes in
            timer->function
      
      Essentially mod_timer() was racing against itself and while the spinlock
      serialized the tv1[] timer link list, timer_pending() called outside the
      spinlock, cached timer link list element in a register.
      With low register pressure (and a deep register file), lack of barrier
      in raw_local_irqsave() as well as preempt_disable (!PREEMPT_COUNT
      version), there was nothing to force gcc to reload across the spinlock,
      causing a stale value in reg be used for link list manipulation - ensuing
      a corruption.
      
      ARcompact disassembly which shows the culprit generated code:
      
      mod_timer:
          push_s blink
          mov_s r13,r0	# timer, timer
      ..
          ###### timer_pending( )
          ld_s r3,[r13]       # <------ <variable>.entry.next LOADED
          brne r3, 0, @.L163
      
      .L163:
      ..
          ###### spin_lock_irq( )
          lr  r5, [status32]  # flags
          bic r4, r5, 6       # temp, flags,
          and.f 0, r5, 6      # flags,
          flag.nz r4
      
          ###### detach_if_pending( ) begins
      
          tst_s r3,r3  <--------------
      			# timer_pending( ) checks timer->entry.next
                              # r3 is NOT reloaded by gcc, using stale value
          beq.d @.L169
          mov.eq r0,0
      
          #####  detach_timer( ): __list_del( )
      
          ld r4,[r13,4]    	# <variable>.entry.prev, D.31439
          st r4,[r3,4]     	# <variable>.prev, D.31439
          st r3,[r4]       	# <variable>.next, D.30246
      
      We initially tried to fix this by adding barrier() to preempt_* macros
      for !PREEMPT_COUNT but Linus clarified that it was anything but wrong.
      http://www.spinics.net/lists/kernel/msg1512709.html
      
      [vgupta: updated commitlog]
      
      Reported-by/Signed-off-by: Christian Ruppert <christian.ruppert@abilis.com>
      Cc: Christian Ruppert <christian.ruppert@abilis.com>
      Cc: Pierrick Hascoet <pierrick.hascoet@abilis.com>
      Debugged-by/Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      79e5f05e
  7. 08 4月, 2013 5 次提交
  8. 07 4月, 2013 1 次提交
  9. 06 4月, 2013 1 次提交
    • J
      x86: Fix rebuild with EFI_STUB enabled · 91870824
      Jan Beulich 提交于
      eboot.o and efi_stub_$(BITS).o didn't get added to "targets", and hence
      their .cmd files don't get included by the build machinery, leading to
      the files always getting rebuilt.
      
      Rather than adding the two files individually, take the opportunity and
      add $(VMLINUX_OBJS) to "targets" instead, thus allowing the assignment
      at the top of the file to be shrunk quite a bit.
      
      At the same time, remove a pointless flags override line - the variable
      assigned to was misspelled anyway, and the options added are
      meaningless for assembly sources.
      
      [ hpa: the patch is not minimal, but I am taking it for -urgent anyway
        since the excess impact of the patch seems to be small enough. ]
      Signed-off-by: NJan Beulich <jbeulich@suse.com>
      Link: http://lkml.kernel.org/r/515C5D2502000078000CA6AD@nat28.tlf.novell.com
      Cc: Matthew Garrett <mjg@redhat.com>
      Cc: Matt Fleming <matt.fleming@intel.com>
      Signed-off-by: NH. Peter Anvin <hpa@linux.intel.com>
      91870824
  10. 05 4月, 2013 6 次提交
  11. 03 4月, 2013 2 次提交