1. 02 4月, 2007 1 次提交
    • A
      [PATCH] x86-64: Disable local APIC timer use on AMD systems with C1E · 3556ddfa
      Andi Kleen 提交于
      AMD dual core laptops with C1E do not run the APIC timer correctly
      when they go idle. Previously the code assumed this only happened
      on C2 or deeper.  But not all of these systems report support C2.
      
      Use a AMD supplied snippet to detect C1E being enabled and then disable
      local apic timer use.
      
      This supercedes an earlier workaround using DMI detection of specific systems.
      
      Thanks to Mark Langsdorf for the detection snippet.
      Signed-off-by: NAndi Kleen <ak@suse.de>
      3556ddfa
  2. 24 3月, 2007 1 次提交
  3. 23 3月, 2007 2 次提交
  4. 19 3月, 2007 1 次提交
    • T
      [PATCH] i386: trust the PM-Timer calibration of the local APIC timer · ca1b940c
      Thomas Gleixner 提交于
      When PM-Timer is available for local APIC timer calibration we can skip the
      verification of the calibrated time value.  The resulting error is quite
      small on a bunch of evaluated platforms and is less harming than the
      observed false positives.
      
      We need to keep the verification on systems, which have no PM-Timer to
      avoid bogus local APIC timer calibrations in the range of factor 2-10,
      which can be observed when swicthing off the PM-timer support in the kernel
      configuration.
      
      The wrong calibration values are probably caused by SMM code trying to
      emulate a PS/2 keyboard from a (maybe connected or not) USB keyboard.  This
      prohibits the accurate delivery of PIT interrupts, which are used to
      calibrate the local APIC timer.  Unfortunately we have no way to disable
      this BIOS misfeature in the early boot process.
      
      Add also the dropped cpu_relax() back to the wait loops.
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Acked-by: NIngo Molnar <mingo@elte.hu>
      Acked-by: NAndi Kleen <ak@suse.de>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      ca1b940c
  5. 05 3月, 2007 1 次提交
  6. 27 2月, 2007 1 次提交
    • L
      Revert "[PATCH] i386: add idle notifier" · ea3d5226
      Linus Torvalds 提交于
      This reverts commit 2ff2d3d7.
      
      Uwe Bugla reports that he cannot mount a floppy drive any more, and Jiri
      Slaby bisected it down to this commit.
      
      Benjamin LaHaise also points out that this is a big hot-path, and that
      interrupt delivery while idle is very common and should not go through
      all these expensive gyrations.
      
      Fix up conflicts in arch/i386/kernel/apic.c and arch/i386/kernel/irq.c
      due to other unrelated irq changes.
      
      Cc: Stephane Eranian <eranian@hpl.hp.com>
      Cc: Andi Kleen <ak@suse.de>
      Cc: Andrew Morton <akpm@osdl.org>
      Cc: Uwe Bugla <uwe.bugla@gmx.de>
      Cc: Jiri Slaby <jirislaby@gmail.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      ea3d5226
  7. 17 2月, 2007 3 次提交
    • T
      [PATCH] i386 rework local apic timer calibration · d36b49b9
      Thomas Gleixner 提交于
      The local apic timer calibration has two problem cases:
      
      1.  The calibration is based on readout of the PIT/HPET timer to detect the
         wrap of the periodic tick.  It happens that a box gets stuck in the
         calibration loop due to a PIT with a broken readout function.
      
      2.  CoreDuo boxen show a sporadic PIT runs too slow defect, which results
         in a wrong lapic calibration.  The PIT goes back to normal operation once
         the lapic timer is switched to periodic mode.
      
      Both are existing and unfixed problems in the current upstream kernel and
      prevent certain laptops and other systems from booting Linux.
      
      Rework the code to address both problems:
      
      - Make the calibration interrupt driven.  This removes the wait_timer_tick
        magic hackery from lapic.c and time_hpet.c.  The clockevents framework
        allows easy substitution of the global tick event handler for the
        calibration.  This is more accurate than monitoring jiffies.  At this point
        of the boot process, nothing disturbes the interrupt delivery, so the
        results are very accurate.
      
      - Verify the calibration against the PM timer, when available by using the
        early access function.  When the measured calibration period is outside of
        an one percent window, then the lapic timer calibration is adjusted to the
        pm timer result.
      
      - Verify the calibration by running the lapic timer with the calibration
        handler.  Disable lapic timer in case of deviation.
      
      This also removes the "synchronization" of the local apic timer to the global
      tick.  This synchronization never worked, as there is no way to synchronize
      PIT(HPET) and local APIC timer.  The synchronization by waiting for the tick
      just alignes the local APIC timer for the first events, but later the events
      drift away due to the different clocks.  Removing the "sync" is just
      randomizing the asynchronous behaviour at setup time.
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Cc: Zachary Amsden <zach@vmware.com>
      Cc: "Eric W. Biederman" <ebiederm@xmission.com>
      Cc: Rohit Seth <rohitseth@google.com>
      Cc: Andi Kleen <ak@suse.de>
      Cc: john stultz <johnstul@us.ibm.com>
      Cc: Roman Zippel <zippel@linux-m68k.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      d36b49b9
    • T
      [PATCH] clockevents: i386 drivers · e9e2cdb4
      Thomas Gleixner 提交于
      Add clockevent drivers for i386: lapic (local) and PIT/HPET (global).  Update
      the timer IRQ to call into the PIT/HPET driver's event handler and the
      lapic-timer IRQ to call into the lapic clockevent driver.  The assignement of
      timer functionality is delegated to the core framework code and replaces the
      compile and runtime evalution in do_timer_interrupt_hook()
      
      Use the clockevents broadcast support and implement the lapic_broadcast
      function for ACPI.
      
      No changes to existing functionality.
      
      [ kdump fix from Vivek Goyal <vgoyal@in.ibm.com> ]
      [ fixes based on review feedback from Arjan van de Ven <arjan@infradead.org> ]
      Cleanups-from: Adrian Bunk <bunk@stusta.de>
      Build-fixes-from: Andrew Morton <akpm@osdl.org>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Cc: john stultz <johnstul@us.ibm.com>
      Cc: Roman Zippel <zippel@linux-m68k.org>
      Cc: Andi Kleen <ak@suse.de>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      e9e2cdb4
    • T
      [PATCH] i386, apic: clean up the APIC code · e05d723f
      Thomas Gleixner 提交于
      The apic code is quite unstructured and missing a lot of comments.
      
      - Restructure the code into helper functions, timer, setup/shutdown,
        interrupt and power management blocks.
      - Fixup comments.
      - Namespace fixups
      - Inline helpers for version and is_integrated
      - Combine the ack_bad_irq functions
      
      No functional changes.
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Cc: Zachary Amsden <zach@vmware.com>
      Cc: "Eric W. Biederman" <ebiederm@xmission.com>
      Cc: Rohit Seth <rohitseth@google.com>
      Cc: Andi Kleen <ak@suse.de>
      Cc: john stultz <johnstul@us.ibm.com>
      Cc: Roman Zippel <zippel@linux-m68k.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      e05d723f
  8. 13 2月, 2007 2 次提交
    • S
      [PATCH] i386: add idle notifier · 2ff2d3d7
      Stephane Eranian 提交于
      Add a notifier mechanism to the low level idle loop.  You can register a
      callback function which gets invoked on entry and exit from the low level idle
      loop.  The low level idle loop is defined as the polling loop, low-power call,
      or the mwait instruction.  Interrupts processed by the idle thread are not
      considered part of the low level loop.
      
      The notifier can be used to measure precisely how much is spent in useless
      execution (or low power mode).  The perfmon subsystem uses it to turn on/off
      monitoring.
      Signed-off-by: Nstephane eranian <eranian@hpl.hp.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NAndi Kleen <ak@suse.de>
      2ff2d3d7
    • Z
      [PATCH] i386: vMI timer patches · bbab4f3b
      Zachary Amsden 提交于
      VMI timer code.  It works by taking over the local APIC clock when APIC is
      configured, which requires a couple hooks into the APIC code.  The backend
      timer code could be commonized into the timer infrastructure, but there are
      some pieces missing (stolen time, in particular), and the exact semantics of
      when to do accounting for NO_IDLE need to be shared between different
      hypervisors as well.  So for now, VMI timer is a separate module.
      
      [Adrian Bunk: cleanups]
      
      Subject: VMI timer patches
      Signed-off-by: NZachary Amsden <zach@vmware.com>
      Signed-off-by: NAndi Kleen <ak@suse.de>
      Cc: Andi Kleen <ak@suse.de>
      Cc: Jeremy Fitzhardinge <jeremy@xensource.com>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Chris Wright <chrisw@sous-sol.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      bbab4f3b
  9. 07 12月, 2006 1 次提交
  10. 06 10月, 2006 1 次提交
  11. 05 10月, 2006 1 次提交
    • D
      IRQ: Maintain regs pointer globally rather than passing to IRQ handlers · 7d12e780
      David Howells 提交于
      Maintain a per-CPU global "struct pt_regs *" variable which can be used instead
      of passing regs around manually through all ~1800 interrupt handlers in the
      Linux kernel.
      
      The regs pointer is used in few places, but it potentially costs both stack
      space and code to pass it around.  On the FRV arch, removing the regs parameter
      from all the genirq function results in a 20% speed up of the IRQ exit path
      (ie: from leaving timer_interrupt() to leaving do_IRQ()).
      
      Where appropriate, an arch may override the generic storage facility and do
      something different with the variable.  On FRV, for instance, the address is
      maintained in GR28 at all times inside the kernel as part of general exception
      handling.
      
      Having looked over the code, it appears that the parameter may be handed down
      through up to twenty or so layers of functions.  Consider a USB character
      device attached to a USB hub, attached to a USB controller that posts its
      interrupts through a cascaded auxiliary interrupt controller.  A character
      device driver may want to pass regs to the sysrq handler through the input
      layer which adds another few layers of parameter passing.
      
      I've build this code with allyesconfig for x86_64 and i386.  I've runtested the
      main part of the code on FRV and i386, though I can't test most of the drivers.
      I've also done partial conversion for powerpc and MIPS - these at least compile
      with minimal configurations.
      
      This will affect all archs.  Mostly the changes should be relatively easy.
      Take do_IRQ(), store the regs pointer at the beginning, saving the old one:
      
      	struct pt_regs *old_regs = set_irq_regs(regs);
      
      And put the old one back at the end:
      
      	set_irq_regs(old_regs);
      
      Don't pass regs through to generic_handle_irq() or __do_IRQ().
      
      In timer_interrupt(), this sort of change will be necessary:
      
      	-	update_process_times(user_mode(regs));
      	-	profile_tick(CPU_PROFILING, regs);
      	+	update_process_times(user_mode(get_irq_regs()));
      	+	profile_tick(CPU_PROFILING);
      
      I'd like to move update_process_times()'s use of get_irq_regs() into itself,
      except that i386, alone of the archs, uses something other than user_mode().
      
      Some notes on the interrupt handling in the drivers:
      
       (*) input_dev() is now gone entirely.  The regs pointer is no longer stored in
           the input_dev struct.
      
       (*) finish_unlinks() in drivers/usb/host/ohci-q.c needs checking.  It does
           something different depending on whether it's been supplied with a regs
           pointer or not.
      
       (*) Various IRQ handler function pointers have been moved to type
           irq_handler_t.
      Signed-Off-By: NDavid Howells <dhowells@redhat.com>
      (cherry picked from 1b16e7ac850969f38b375e511e3fa2f474a33867 commit)
      7d12e780
  12. 26 9月, 2006 3 次提交
    • A
      [PATCH] i386: Make enable_local_apic static · 3d08a256
      Adrian Bunk 提交于
      enable_local_apic can now become static.
      
      Cc: len.brown@intel.com
      Signed-off-by: NAdrian Bunk <bunk@stusta.de>
      Signed-off-by: NAndi Kleen <ak@suse.de>
      3d08a256
    • R
      [PATCH] i386: Replace i386 open-coded cmdline parsing with · 1a3f239d
      Rusty Russell 提交于
      This patch replaces the open-coded early commandline parsing
      throughout the i386 boot code with the generic mechanism (already used
      by ppc, powerpc, ia64 and s390).  The code was inconsistent with
      whether it deletes the option from the cmdline or not, meaning some of
      these will get passed through the environment into init.
      
      This transformation is mainly mechanical, but there are some notable
      parts:
      
      1) Grammar: s/linux never set's it up/linux never sets it up/
      
      2) Remove hacked-in earlyprintk= option scanning.  When someone
         actually implements CONFIG_EARLY_PRINTK, then they can use
         early_param().
      [AK: actually it is implemented, but I'm adding the early_param it in the next
      x86-64 patch]
      
      3) Move declaration of generic_apic_probe() from setup.c into asm/apic.h
      
      4) Various parameters now moved into their appropriate files (thanks Andi).
      
      5) All parse functions which examine arg need to check for NULL,
         except one where it has subtle humor value.
      
      AK: readded acpi_sci handling which was completely dropped
      AK: moved some more variables into acpi/boot.c
      
      Cc: len.brown@intel.com
      Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
      Signed-off-by: NAndi Kleen <ak@suse.de>
      1a3f239d
    • D
      [PATCH] i386: Add SMP support on i386 to reservation framework · b7471c6d
      Don Zickus 提交于
      This patch includes the changes to make the nmi watchdog on i386 SMP aware.
      A bunch of code was moved around to make it simpler to read.  In addition,
      it is now possible to determine if a particular NMI was the result of the
      watchdog or not.  This feature allows the kernel to filter out unknown NMIs
      easier.
      Signed-off-by: NDon Zickus <dzickus@redhat.com>
      Signed-off-by: NAndi Kleen <ak@suse.de>
      b7471c6d
  13. 01 7月, 2006 1 次提交
  14. 27 6月, 2006 2 次提交
  15. 23 6月, 2006 2 次提交
  16. 22 5月, 2006 1 次提交
    • V
      [PATCH] i386 kdump boot cpu physical apicid fix · be0d03f1
      Vivek Goyal 提交于
      o Kdump second kernel boot fails after a system crash if second kernel
        is UP and acpi=off and if crash occurred on a non-boot cpu.
      
      o Issue here is that MP tables report boot cpu lapic id as 0 but second
        kernel is booting on a different processor and MP table data is stale
        in this context. Hence apic_id_registered() check fails in setup_local_APIC()
        when called from APIC_init_uniprocessor().
      
      o Problem is not seen if ACPI is enabled as in that case
        boot_cpu_physical_apicid is read from the LAPIC.
      
      o Problem is not seen with SMP kernels as well because in this case also
        boot_cpu_physical_apicid is read from LAPIC. (smp_boot_cpus()).
      
      o The problem is fixed by reading boot_cpu_physical_apicid from LAPIC
        if it is a UP kernel and CRASH_DUMP is enabled.
      Signed-off-by: NVivek Goyal <vgoyal@in.ibm.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      be0d03f1
  17. 02 5月, 2006 1 次提交
  18. 10 4月, 2006 1 次提交
    • A
      [PATCH] i386: Consolidate modern APIC handling · 95d769aa
      Andi Kleen 提交于
      AMD systems have a modern APIC that supports 8 bit IDs, but
      don't have a XAPIC version number.  Add a new "modern_apic"
      subfunction that handles this correctly and use it (nearly)
      everywhere where XAPIC is tested for.
      
      I removed one wart: the code specified that external APICs
      would use an 8bit APIC ID. But I checked a real 82093 data sheet
      and it says clearly that they only use 4bit. So I removed
      this special case since it would a bit awkward to implement now.
      
      I removed the valid APIC tests in mptable parsing completely. On any modern
      system they only check against the full field width (8bit) anyways
      and are no-ops. This also fixes them doing the wrong thing
      on >8 core Opterons.
      
      This makes i386 boot again on 16 core Opterons.
      
      Cc: Ingo Molnar <mingo@elte.hu>
      Signed-off-by: NAndi Kleen <ak@suse.de>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      95d769aa
  19. 01 4月, 2006 2 次提交
    • O
      [PATCH] Don't pass boot parameters to argv_init[] · 9b41046c
      OGAWA Hirofumi 提交于
      The boot cmdline is parsed in parse_early_param() and
      parse_args(,unknown_bootoption).
      
      And __setup() is used in obsolete_checksetup().
      
      	start_kernel()
      		-> parse_args()
      			-> unknown_bootoption()
      				-> obsolete_checksetup()
      
      If __setup()'s callback (->setup_func()) returns 1 in
      obsolete_checksetup(), obsolete_checksetup() thinks a parameter was
      handled.
      
      If ->setup_func() returns 0, obsolete_checksetup() tries other
      ->setup_func().  If all ->setup_func() that matched a parameter returns 0,
      a parameter is seted to argv_init[].
      
      Then, when runing /sbin/init or init=app, argv_init[] is passed to the app.
      If the app doesn't ignore those arguments, it will warning and exit.
      
      This patch fixes a wrong usage of it, however fixes obvious one only.
      Signed-off-by: NOGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      9b41046c
    • V
      [PATCH] i386 kdump timer vector lockup fix · 1a75a3f0
      Vivek Goyal 提交于
      Porting the patch I posted for x86_64 to i386.
      
      http://marc.theaimsgroup.com/?l=linux-kernel&m=114178139610707&w=2
      
      o While using kdump, after a system crash when second kernel boots, timer
        vector gets (0x31) locked and CPU does not see timer interrupts
        travelling from IOAPIC to APIC.  Currently it does not lead to boot
        failure in second kernel as timer interrupts continues to come as ExtInt
        through LAPIC directly, but fixing it is good in case some boards do not
        support the other mode.
      
      o After a system crash, it is not safe to service interrupts any more,
        hence interrupts are disabled.  This leads to pending interrupts at
        LAPIC.  LAPIC sends these interrupts to the CPU during early boot of
        second kernel.  Other pending interrupts are discarded saying unexpected
        trap but timer interrupt is serviced and CPU does not issue an LAPIC EOI
        because it think this interrupt came from i8259 and sends ack to 8259.
        This leads to vector 0x31 locking as LAPIC does not clear respective ISR
        and keeps on waiting for EOI.
      
      o This patch issues extra EOI for the pending interrupts who have ISR set.
      
      o Though today only timer seems to be the special case because in early
        boot it thinks interrupts are coming from i8259 and uses
        mask_and_ack_8259A() as ack handler and does not issue LAPIC EOI.  But
        probably doing it in generic manner for all vectors makes sense.
      Signed-off-by: NVivek Goyal <vgoyal@in.ibm.com>
      Cc: "Eric W. Biederman" <ebiederm@xmission.com>
      Cc: Andi Kleen <ak@muc.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      1a75a3f0
  20. 23 3月, 2006 1 次提交
  21. 15 3月, 2006 1 次提交
    • M
      [PATCH] Plug kdump shutdown race window · 67963132
      Maneesh Soni 提交于
      lapic_shutdown() re-enables interrupts which is un-desirable for panic
      case, so use local_irq_save() and local_irq_restore() to keep the irqs
      disabled for kexec on panic case, and close a possible race window while
      kdump shutdown as shown in this stack trace
      
         -- BUG: spinlock lockup on CPU#1, bash/4396, c52781a0
         [<c01c1870>] _raw_spin_lock+0xb7/0xd2
         [<c029e148>] _spin_lock+0x6/0x8
         [<c011b33f>] scheduler_tick+0xe7/0x328
         [<c0128a7c>] update_process_times+0x51/0x5d
         [<c0114592>] smp_apic_timer_interrupt+0x4f/0x58
         [<c01141ff>] lapic_shutdown+0x76/0x7e
         [<c0104d7c>] apic_timer_interrupt+0x1c/0x30
         [<c01141ff>] lapic_shutdown+0x76/0x7e
         [<c0116659>] machine_crash_shutdown+0x83/0xaa
         [<c013cc36>] crash_kexec+0xc1/0xe3
         [<c029e148>] _spin_lock+0x6/0x8
         [<c013cc22>] crash_kexec+0xad/0xe3
         [<c0215280>] __handle_sysrq+0x84/0xfd
         [<c018d937>] write_sysrq_trigger+0x2c/0x35
         [<c015e47b>] vfs_write+0xa2/0x13b
         [<c015ea73>] sys_write+0x3b/0x64
         [<c0103c69>] syscall_call+0x7/0xb
      Signed-off-by: NManeesh Soni <maneesh@in.ibm.com>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      67963132
  22. 08 2月, 2006 1 次提交
    • A
      [PATCH] Fix bad apic fix on i386 · e1a8e6c9
      Andi Kleen 提交于
      Fix wrong '!' in bad apic fix
      
      I forgot to remove the ! when moving the code from x86-64 to i386 x86-64
      tested !disable_apic, but of course for cpu_has_apic it shouldn't be
      negated.
      
      Credit goes to Jan Beulich for spotting it with eagle eyes.
      
      Cc: Jan Beulich <jbeulich@novell.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Signed-off-by: NAndi Kleen <ak@suse.de>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      e1a8e6c9
  23. 05 2月, 2006 1 次提交
  24. 12 1月, 2006 2 次提交
  25. 07 1月, 2006 1 次提交
  26. 07 11月, 2005 1 次提交
    • Z
      [PATCH] i386: LVT entries remaining unmasked on reboot · 77f72b19
      Zwane Mwaikambo 提交于
      Excerpt from bugzilla entry
      
      http://bugzilla.kernel.org/show_bug.cgi?id=5518
      
      "i386 version of Reboot-through-BIOS is unsafe: it forgets to mask APIC LVT
      interrupts before jumping to a BIOS entry point.  As a result, BIOS ends up
      bombarded with interrupts early on boot.  The BIOS does not expect it since
      following a "normal" hardware cpu reset, all APIC LVT registers have the
      Mask bit (16) set and can't generate interrupts.
      
      For example, the version of Phoenix BIOS used by VMware enables interrupts
      for the first time before masking/clearing APIC LVT.  The APIC Timer LVT
      register is still set up for a timer interrupt delivery with a high vector
      from the previous Linux incarnation (0xef in our case).  The BIOS has not
      fully initialized its IDT at this point and the real mode gate for 0xef
      remains all zeros.  Vector 0xef dispatches BIOS to address 0:0, BIOS takes
      a #GP and eventually hangs.
      
      machine_shutdown() does attempt to shut down APIC before jumping to BIOS,
      but it is ineffective"
      Signed-off-by: NZwane Mwaikambo <zwane@arm.linux.org.uk>
      Cc: "Seth, Rohit" <rohit.seth@intel.com>
      Cc: Zachary Amsden <zach@vmware.com>
      Cc: "Eric W. Biederman" <ebiederm@xmission.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      77f72b19
  27. 01 11月, 2005 1 次提交
  28. 31 10月, 2005 2 次提交
    • V
      [PATCH] kdump/i386: apic verification failure fix · 009b29d9
      Vivek Goyal 提交于
      o Removes the unnecessary call to local_irq_disable().
      
      o Kdump was failing while second kernel was coming up. Check for presence
        of boot cpu apic id was failing in (apic_id_registered), hence hitting
        BUG().
      
      o This should not have failed because before calling setup_local_APIC(), it is
        ensured that even if BIOS has not reported boot cpu, then hard set the
        prence of it. Problem happens because of usage of hard_smp_processor_id()
        which is hardcoded to zero in case of non SMP kernel. In kdump case second
        kernel can boot on a cpu whose boot cpu id is not zero.
      
      o Using boot_cpu_physical_apicid instead to hard set the presence of boot cpu.
      Signed-off-by: NVivek Goyal <vgoyal@in.ibm.com>
      Cc: "Eric W. Biederman" <ebiederm@xmission.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      009b29d9
    • E
      [PATCH] i386: move apic init in init_IRQs · f2b36db6
      Eric W. Biederman 提交于
      All kinds of ugliness exists because we don't initialize
      the apics during init_IRQs.
      - We calibrate jiffies in non apic mode even when we are using apics.
      - We have to have special code to initialize the apics when non-smp.
      - The legacy i8259 must exist and be setup correctly, even
        when we won't use it past initialization.
      - The kexec on panic code must restore the state of the io_apics.
      - init/main.c needs a special case for !smp smp_init on x86
      
      In addition to pure code movement I needed a couple
      of non-obvious changes:
      - Move setup_boot_APIC_clock into APIC_late_time_init for
        simplicity.
      - Use cpu_khz to generate a better approximation of loops_per_jiffies
        so I can verify the timer interrupt is working.
      - Call setup_apic_nmi_watchdog again after cpu_khz is initialized on
        the boot cpu.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      f2b36db6
  29. 27 9月, 2005 1 次提交