1. 17 2月, 2007 3 次提交
  2. 10 2月, 2007 1 次提交
  3. 07 12月, 2006 2 次提交
  4. 22 10月, 2006 1 次提交
    • A
      [PATCH] x86-64: Revert timer routing behaviour back to 2.6.16 state · e70ea8c0
      Andi Kleen 提交于
      By default route the 8254 over the 8259 and only disable
      it on ATI boards where this causes double timer interrupts.
      
      This should unbreak some Nvidia boards where the timer doesn't
      seem to tick of it isn't enabled in the 8259. At least one
      VIA board also seemed to have a little trouble with the disabled
      8259.
      
      For 2.6.20 we'll try both dynamically without black listing, but I think
      for .19 this is the safer approach because it has been already well tested
      in earlier kernels. This also makes the x86-64 behaviour the same
      as i386.
      
      Command line options can change all this of course.
      Signed-off-by: NAndi Kleen <ak@suse.de>
      e70ea8c0
  5. 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
  6. 27 9月, 2006 1 次提交
  7. 26 9月, 2006 4 次提交
  8. 27 6月, 2006 4 次提交
  9. 26 3月, 2006 2 次提交
  10. 27 2月, 2006 2 次提交
  11. 18 2月, 2006 1 次提交
  12. 05 2月, 2006 4 次提交
  13. 12 1月, 2006 3 次提交
  14. 15 11月, 2005 2 次提交
    • S
      [PATCH] x86_64: Unmap NULL during early bootup · f6c2e333
      Siddha, Suresh B 提交于
      We should zap the low mappings, as soon as possible, so that we can catch
      kernel bugs more effectively. Previously early boot had NULL mapped
      and didn't trap on NULL references.
      
      This patch introduces boot_level4_pgt, which will always have low identity
      addresses mapped.  Druing boot, all the processors will use this as their
      level4 pgt.  On BP, we will switch to init_level4_pgt as soon as we enter C
      code and zap the low mappings as soon as we are done with the usage of
      identity low mapped addresses.  On AP's we will zap the low mappings as
      soon as we jump to C code.
      Signed-off-by: NSuresh Siddha <suresh.b.siddha@intel.com>
      Signed-off-by: NAshok Raj <ashok.raj@intel.com>
      Signed-off-by: NAndi Kleen <ak@suse.de>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      f6c2e333
    • A
      [PATCH] x86_64: Add 4GB DMA32 zone · a2f1b424
      Andi Kleen 提交于
      Add a new 4GB GFP_DMA32 zone between the GFP_DMA and GFP_NORMAL zones.
      
      As a bit of historical background: when the x86-64 port
      was originally designed we had some discussion if we should
      use a 16MB DMA zone like i386 or a 4GB DMA zone like IA64 or
      both. Both was ruled out at this point because it was in early
      2.4 when VM is still quite shakey and had bad troubles even
      dealing with one DMA zone.  We settled on the 16MB DMA zone mainly
      because we worried about older soundcards and the floppy.
      
      But this has always caused problems since then because
      device drivers had trouble getting enough DMA able memory. These days
      the VM works much better and the wide use of NUMA has proven
      it can deal with many zones successfully.
      
      So this patch adds both zones.
      
      This helps drivers who need a lot of memory below 4GB because
      their hardware is not accessing more (graphic drivers - proprietary
      and free ones, video frame buffer drivers, sound drivers etc.).
      Previously they could only use IOMMU+16MB GFP_DMA, which
      was not enough memory.
      
      Another common problem is that hardware who has full memory
      addressing for >4GB misses it for some control structures in memory
      (like transmit rings or other metadata).  They tended to allocate memory
      in the 16MB GFP_DMA or the IOMMU/swiotlb then using pci_alloc_consistent,
      but that can tie up a lot of precious 16MB GFPDMA/IOMMU/swiotlb memory
      (even on AMD systems the IOMMU tends to be quite small) especially if you have
      many devices.  With the new zone pci_alloc_consistent can just put
      this stuff into memory below 4GB which works better.
      
      One argument was still if the zone should be 4GB or 2GB. The main
      motivation for 2GB would be an unnamed not so unpopular hardware
      raid controller (mostly found in older machines from a particular four letter
      company) who has a strange 2GB restriction in firmware. But
      that one works ok with swiotlb/IOMMU anyways, so it doesn't really
      need GFP_DMA32. I chose 4GB to be compatible with IA64 and because
      it seems to be the most common restriction.
      
      The new zone is so far added only for x86-64.
      
      For other architectures who don't set up this
      new zone nothing changes. Architectures can set a compatibility
      define in Kconfig CONFIG_DMA_IS_DMA32 that will define GFP_DMA32
      as GFP_DMA. Otherwise it's a nop because on 32bit architectures
      it's normally not needed because GFP_NORMAL (=0) is DMA able
      enough.
      
      One problem is still that GFP_DMA means different things on different
      architectures. e.g. some drivers used to have #ifdef ia64  use GFP_DMA
      (trusting it to be 4GB) #elif __x86_64__ (use other hacks like
      the swiotlb because 16MB is not enough) ... . This was quite
      ugly and is now obsolete.
      
      These should be now converted to use GFP_DMA32 unconditionally. I haven't done
      this yet. Or best only use pci_alloc_consistent/dma_alloc_coherent
      which will use GFP_DMA32 transparently.
      Signed-off-by: NAndi Kleen <ak@suse.de>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      a2f1b424
  15. 13 9月, 2005 2 次提交
  16. 11 9月, 2005 1 次提交
  17. 08 7月, 2005 1 次提交
  18. 17 5月, 2005 1 次提交
    • A
      [PATCH] x86_64: Add pmtimer support · 312df5f1
      Andi Kleen 提交于
      There are unfortunately more and more multi processor Opteron systems which
      don't have HPET timer support in the southbridge.  This covers in particular
      Nvidia and VIA chipsets.  They also don't guarantee that the TSCs are
      synchronized between CPUs; and especially with MP powernow the systems are
      nearly unusable because the time gets very inconsistent between CPUs.
      
      The timer code for x86-64 was originally written under the assumption that we
      could fall back to the HPET timer on such systems.  But this doesn't work
      there.
      
      Another alternative is to use the ACPI PM timer as primary time source.  This
      patch does that.  The kernel only uses PM timer when there is no other choice
      because it has some disadvantages.
      
      Ported over from i386.  It should be faster than the i386 version because I
      dropped the "read three times" workaround, but is still considerable slower
      than HPET and also does not work together with vsyscalls which have to be
      disabled.
      
      Cc: <mark.langsdorf@amd.com>
      Signed-off-by: NAndi Kleen <ak@suse.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      312df5f1
  19. 17 4月, 2005 3 次提交
    • A
      [PATCH] x86_64: Switch SMP bootup over to new CPU hotplug state machine · a8ab26fe
      Andi Kleen 提交于
      This will allow hotplug CPU in the future and in general cleans up a lot of
      crufty code.  It also should plug some races that the old hackish way
      introduces.  Remove one old race workaround in NMI watchdog setup that is not
      needed anymore.
      
      I removed the old total sum of bogomips reporting code.  The brag value of
      BogoMips has been greatly devalued in the last years on the open market.
      
      Real CPU hotplug will need some more work, but the infrastructure for it is
      there now.
      
      One drawback: the new TSC sync algorithm is less accurate than before.  The
      old way of zeroing TSCs is too intrusive to do later.  Instead the TSC of the
      BP is duplicated now, which is less accurate.
      
      akpm:
      
      - sync_tsc_bp_init seems to have the sense of `init' inverted.
      
      - SPIN_LOCK_UNLOCKED is deprecated - use DEFINE_SPINLOCK.
      
      Cc: <rusty@rustcorp.com.au>
      Cc: <mingo@elte.hu>
      Signed-off-by: NAndi Kleen <ak@suse.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      a8ab26fe
    • A
      [PATCH] x86_64: Use a VMA for the 32bit vsyscall · 1e014410
      Andi Kleen 提交于
      Use a real VMA to map the 32bit vsyscall page
      
      This interacts better with Hugh's upcomming VMA walk optimization
      Also removes some ugly special cases.
      
      Code roughly modelled after the ppc64 vdso version from Ben Herrenschmidt.
      Signed-off-by: NAndi Kleen <ak@suse.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      1e014410
    • L
      Linux-2.6.12-rc2 · 1da177e4
      Linus Torvalds 提交于
      Initial git repository build. I'm not bothering with the full history,
      even though we have it. We can create a separate "historical" git
      archive of that later if we want to, and in the meantime it's about
      3.2GB when imported into git - space that would just make the early
      git days unnecessarily complicated, when we don't have a lot of good
      infrastructure for it.
      
      Let it rip!
      1da177e4