1. 02 11月, 2005 10 次提交
    • D
      [ARM] 3081/1: Remove GTWX5715 from ixp4xx_defconfig · 73ee723e
      Deepak Saxena 提交于
      Patch from Deepak Saxena
      
      CONFIG_MACH_GTWX5715 hardcodes the machine type in head-xscale.S so we
      can no longer boot on any other machine types. The proper fix would be
      to remove the hardcoding, but that machine is an off-the-shelf system
      and most users won't have access to the bootloader. :(
      Signed-off-by: NDeepak Saxena <dsaxena@plexity.net>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      73ee723e
    • L
      [ARM] 3052/1: add ixp2000 microcode loader · d01e8897
      Lennert Buytenhek 提交于
      Patch from Lennert Buytenhek
      
      This patch adds a microcode loader for the ixp2000 architecture.
      
      The ixp2000 is an xscale-based CPU with a number of additional small
      CPUs ('microengines') on die that can be programmed to do various
      things.  Depending on the ixp2000 model, there are between 2 and 16
      microengines.
      
      This code provides an API that allows configuring the microengines,
      loading code into them, and starting and stopping them and reading
      out a number of status registers, and is used by the microengine
      network driver that was recently announced to netdev.
      Signed-off-by: NLennert Buytenhek <buytenh@wantstofly.org>
      Signed-off-by: NDeepak Saxena <dsaxena@plexity.net>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      d01e8897
    • N
      [ARM] 2948/1: new preemption safe copy_{to|from}_user implementation · fadab094
      Nicolas Pitre 提交于
      Patch from Nicolas Pitre
      
      This patch provides a preemption safe implementation of copy_to_user
      and copy_from_user based on the copy template also used for memcpy.
      It is enabled unconditionally when CONFIG_PREEMPT=y.  Otherwise if the
      configured architecture is not ARMv3 then it is enabled as well as it
      gives better performances at least on StrongARM and XScale cores.  If
      ARMv3 is not too affected or if it doesn't matter too much then
      uaccess.S could be removed altogether.
      Signed-off-by: NNicolas Pitre <nico@cam.org>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      fadab094
    • N
      [ARM] 2947/1: copy template with new memcpy/memmove · 75494230
      Nicolas Pitre 提交于
      Patch from Nicolas Pitre
      
      This patch provides a new implementation for optimized memory copy
      functions on ARM.  It is made of two levels: a template that consists of
      the core copy code and separate files that define macros to be used with
      the core code depending on the type of copy needed. This allows for best
      performances while sharing the same core for implementing memcpy(),
      copy_from_user() and copy_to_user() for instance.
      
      Two reasons for this work:
      
      1) the current copy_to_user/copy_from_user implementation assumes no
         task switch will ever occur in the middle of each copied page making
         it completely unsafe with CONFIG_PREEMPT=y.
      
      2) current copy implementations are measurably suboptimal and optimizing
         different implementations separately is a pain and more opportunities
         for bugs.
      
      The reason for (1) is the fact that copy inside user pages are performed
      with the ldm instruction which has no mean for testing user protections
      and could possibly race with process preemption bypassing the COW mechanism
      for example.  This is a longstanding issue that we said ought to be fixed
      for about two years now.  The solution is to substitute those ldm insns
      with a series of ldrt or strt insns to enforce user memory protection.
      At least on StrongARM and XScale cores the ldm is not faster than the
      equivalent ldr/str insns with a warm i-cache so there is no measurable
      performance degradation with that change. The fact that the copy code is
      a template makes it pretty easy to reuse the same core code as for memcpy
      and benefit from the same performance optimizations.
      
      Now (2) is best demonstrated with actual throughput measurements.
      First, here is a summary of memcopy tests performed on a StrongARM core:
      
      	PTR alignment	buffer size	kernel version	this version
      	------------------------------------------------------------
      	  aligned	     32		 59.73		107.43
      	unaligned	     32		 61.31		 74.72
      	  aligned	    100		132.47		136.15
      	unaligned	    100	    	103.84		123.76
      	  aligned	   4096		130.67		130.80
      	unaligned	   4096	    	130.68		130.64
      	  aligned	1048576		 68.03		68.18
      	unaligned	1048576		 68.03		68.18
      
      The buffer size is in bytes and the measured speed in MB/s.  The copy
      was performed repeatedly with given buffer and throughput averaged over
      3 seconds.
      
      Here we can see that the current kernel version has a higher entry cost
      that shows up with small buffers.  As buffer size grows both implementation
      converge to the same throughput.
      
      Now here's the exact same test performed on an XScale core (PXA255):
      
      	PTR alignment	buffer size	kernel version	this version
      	------------------------------------------------------------
      	  aligned	     32		 46.99		 77.58
      	unaligned	     32		 53.61		 59.59
      	  aligned	    100		107.19		136.59
      	unaligned	    100		 83.61		 97.58
      	  aligned	   4096		129.13		129.98
      	unaligned	   4096		128.36		128.53
      	  aligned	1048576		 53.76		 59.41
      	unaligned	1048576		 33.67		 56.96
      
      Again we can see the entry setup cost being higher for the current kernel
      before getting to the main copy loop.  Then throughput results converge
      as long as the buffer remains in the cache. Then the 1MB case shows more
      differences probably due to better pld placement and/or less instruction
      interlocks in this proposed implementation.
      
      Disclaimer: The PXA system was running with slower clocks than the
      StrongARM system so trying to infer any conclusion by comparing those
      separate sets of results side by side would be completely inappropriate.
      
      So...  What this patch does is to replace both memcpy and memmove with
      an implementation based on the provided copy code template.  The memmove
      code is kept separate since it is used only if the memory areas involved
      do overlap in which case the code is a transposition of the template but
      with the copy occurring in the opposite direction (trying to fit that
      mode into the template turned it into a mess not worth it for memmove
      alone).  And obviously both memcpy and memmove were tested with all kinds
      of pointer alignments and buffer sizes to exercise all code paths for
      correctness.
      
      The next patch will provide the now trivial replacement implementation
      copy_to_user and copy_from_user.
      Signed-off-by: NNicolas Pitre <nico@cam.org>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      75494230
    • N
      [ARM] 2946/2: split --arch_clear_user() out of lib/uaccess.S · a0c6fdb9
      Nicolas Pitre 提交于
      Patch from Nicolas Pitre
      
      Required for future enhancement patches.
      Signed-off-by: NNicolas Pitre <nico@cam.org>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      a0c6fdb9
    • D
      [ARM] 3078/1: lubbock platform updates, mostly mmc detection · 85eb226c
      David Brownell 提交于
      Patch from David Brownell
      
      Lubbock updates:
      
        * Provide an address for the SMC91x chip that doesn't generate
          a boot-time warning (matching the EEPROM).
      
        * Update MMC support to (a) detect card insert/remove, and
          (b) report the readonly switch setting for SD cards.
      
      Previously, MMC/SD cards had to be present at boot time else they
      couldn't be detected.
      Signed-off-by: NDavid Brownell <dbrownell@users.sourceforge.net>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      85eb226c
    • B
      [ARM] 3071/1: RX3715 - add lcd/fb platform setup · e838ffc2
      Ben Dooks 提交于
      Patch from Ben Dooks
      
      Platform data for the LCD/framebuffer driver for
      the RX3715 LCD panel.
      Signed-off-by: NBen Dooks <ben-linux@fluff.org>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      e838ffc2
    • L
      [ARM] 3065/1: ixp2000 typo and whitespace fixes · fa87cedd
      Lennert Buytenhek 提交于
      Patch from Lennert Buytenhek
      
      Misc ixp2000 typo and whitespace fixes.
      Signed-off-by: NLennert Buytenhek <buytenh@wantstofly.org>
      Signed-off-by: NDeepak Saxena <dsaxena@plexity.net>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      fa87cedd
    • L
      [ARM] 3064/1: start using ixp2000_reg_wrb · e9b72e43
      Lennert Buytenhek 提交于
      Patch from Lennert Buytenhek
      
      Switch the users of ixp2000_reg_write that depend on writes being
      flushed out of the write buffer by the time that function returns
      over to ixp2000_reg_wrb.
      
      When using XCB=101, writes to the same functional unit are still
      guaranteed to complete in order, so we only need to protect against:
      - reordering of writes to different functional units
      - masking an interrupt and then reenabling the IRQ bit in CPSR
      Signed-off-by: NLennert Buytenhek <buytenh@wantstofly.org>
      Signed-off-by: NDeepak Saxena <dsaxena@plexity.net>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      e9b72e43
    • L
      [ARM] 3062/1: map in various enp2611 peripherals for the ixp2000 netdev driver · a6f1063b
      Lennert Buytenhek 提交于
      Patch from Lennert Buytenhek
      
      The enp2611 version of the ixp2000 netdev driver needs to be able to
      access a number of on-board peripherals.  ioremap() is not suitable
      for this, as that will cause XCB=000 mappings to be done, which will
      make the cpu susceptible to crashing on ixp2400 erratum #66.  Properly
      aligned iotable mappings with MT_IXP2000_DEVICE will cause section
      mappings with XCB=101 to be done, which is safe.
      Signed-off-by: NLennert Buytenhek <buytenh@wantstofly.org>
      Signed-off-by: NDeepak Saxena <dsaxena@plexity.net>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      a6f1063b
  2. 01 11月, 2005 2 次提交
  3. 31 10月, 2005 9 次提交
  4. 30 10月, 2005 12 次提交
    • R
      [ARM] 3069/1: Add spitz irda platform support · dc07845d
      Richard Purdie 提交于
      Patch from Richard Purdie
      
      Add spitz irda platform support
      Signed-off-by: NRichard Purdie <rpurdie@rpsys.net>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      dc07845d
    • R
      [ARM] 3068/1: Add corgi irda platform support · ca1140b5
      Richard Purdie 提交于
      Patch from Richard Purdie
      
      Add corgi irda platform support
      Signed-off-by: NRichard Purdie <rpurdie@rpsys.net>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      ca1140b5
    • R
      [ARM] 3067/1: Add poodle irda platform support · 8e4b8715
      Richard Purdie 提交于
      Patch from Richard Purdie
      
      Add poodle irda platform support
      Signed-off-by: NRichard Purdie <rpurdie@rpsys.net>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      8e4b8715
    • H
      [PATCH] mm: split page table lock · 4c21e2f2
      Hugh Dickins 提交于
      Christoph Lameter demonstrated very poor scalability on the SGI 512-way, with
      a many-threaded application which concurrently initializes different parts of
      a large anonymous area.
      
      This patch corrects that, by using a separate spinlock per page table page, to
      guard the page table entries in that page, instead of using the mm's single
      page_table_lock.  (But even then, page_table_lock is still used to guard page
      table allocation, and anon_vma allocation.)
      
      In this implementation, the spinlock is tucked inside the struct page of the
      page table page: with a BUILD_BUG_ON in case it overflows - which it would in
      the case of 32-bit PA-RISC with spinlock debugging enabled.
      
      Splitting the lock is not quite for free: another cacheline access.  Ideally,
      I suppose we would use split ptlock only for multi-threaded processes on
      multi-cpu machines; but deciding that dynamically would have its own costs.
      So for now enable it by config, at some number of cpus - since the Kconfig
      language doesn't support inequalities, let preprocessor compare that with
      NR_CPUS.  But I don't think it's worth being user-configurable: for good
      testing of both split and unsplit configs, split now at 4 cpus, and perhaps
      change that to 8 later.
      
      There is a benefit even for singly threaded processes: kswapd can be attacking
      one part of the mm while another part is busy faulting.
      Signed-off-by: NHugh Dickins <hugh@veritas.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      4c21e2f2
    • H
      [PATCH] mm: arm ready for split ptlock · 69b04754
      Hugh Dickins 提交于
      Prepare arm for the split page_table_lock: three issues.
      
      Signal handling's preserve and restore of iwmmxt context currently involves
      reading and writing that context to and from user space, while holding
      page_table_lock to secure the user page(s) against kswapd.  If we split the
      lock, then the structure might span two pages, secured by to read into and
      write from a kernel stack buffer, copying that out and in without locking (the
      structure is 160 bytes in size, and here we're near the top of the kernel
      stack).  Or would the overhead be noticeable?
      
      arm_syscall's cmpxchg emulation use pte_offset_map_lock, instead of
      pte_offset_map and mm-wide page_table_lock; and strictly, it should now also
      take mmap_sem before descending to pmd, to guard against another thread
      munmapping, and the page table pulled out beneath this thread.
      
      Updated two comments in fault-armv.c.  adjust_pte is interesting, since its
      modification of a pte in one part of the mm depends on the lock held when
      calling update_mmu_cache for a pte in some other part of that mm.  This can't
      be done with a split page_table_lock (and we've already taken the lowest lock
      in the hierarchy here): so we'll have to disable split on arm, unless
      CONFIG_CPU_CACHE_VIPT to ensures adjust_pte never used.
      Signed-off-by: NHugh Dickins <hugh@veritas.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      69b04754
    • H
      [PATCH] mm: kill check_user_page_readable · c34d1b4d
      Hugh Dickins 提交于
      check_user_page_readable is a problematic variant of follow_page.  It's used
      only by oprofile's i386 and arm backtrace code, at interrupt time, to
      establish whether a userspace stackframe is currently readable.
      
      This is problematic, because we want to push the page_table_lock down inside
      follow_page, and later split it; whereas oprofile is doing a spin_trylock on
      it (in the i386 case, forgotten in the arm case), and needs that to pin
      perhaps two pages spanned by the stackframe (which might be covered by
      different locks when we split).
      
      I think oprofile is going about this in the wrong way: it doesn't need to know
      the area is readable (neither i386 nor arm uses read protection of user
      pages), it doesn't need to pin the memory, it should simply
      __copy_from_user_inatomic, and see if that succeeds or not.  Sorry, but I've
      not got around to devising the sparse __user annotations for this.
      
      Then we can eliminate check_user_page_readable, and return to a single
      follow_page without the __follow_page variants.
      Signed-off-by: NHugh Dickins <hugh@veritas.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      c34d1b4d
    • H
      [PATCH] mm: arches skip ptlock · b462705a
      Hugh Dickins 提交于
      Convert those few architectures which are calling pud_alloc, pmd_alloc,
      pte_alloc_map on a user mm, not to take the page_table_lock first, nor drop it
      after.  Each of these can continue to use pte_alloc_map, no need to change
      over to pte_alloc_map_lock, they're neither racy nor swappable.
      
      In the sparc64 io_remap_pfn_range, flush_tlb_range then falls outside of the
      page_table_lock: that's okay, on sparc64 it's like flush_tlb_mm, and that has
      always been called from outside of page_table_lock in dup_mmap.
      Signed-off-by: NHugh Dickins <hugh@veritas.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      b462705a
    • H
      [PATCH] mm: init_mm without ptlock · 872fec16
      Hugh Dickins 提交于
      First step in pushing down the page_table_lock.  init_mm.page_table_lock has
      been used throughout the architectures (usually for ioremap): not to serialize
      kernel address space allocation (that's usually vmlist_lock), but because
      pud_alloc,pmd_alloc,pte_alloc_kernel expect caller holds it.
      
      Reverse that: don't lock or unlock init_mm.page_table_lock in any of the
      architectures; instead rely on pud_alloc,pmd_alloc,pte_alloc_kernel to take
      and drop it when allocating a new one, to check lest a racing task already
      did.  Similarly no page_table_lock in vmalloc's map_vm_area.
      
      Some temporary ugliness in __pud_alloc and __pmd_alloc: since they also handle
      user mms, which are converted only by a later patch, for now they have to lock
      differently according to whether or not it's init_mm.
      
      If sources get muddled, there's a danger that an arch source taking
      init_mm.page_table_lock will be mixed with common source also taking it (or
      neither take it).  So break the rules and make another change, which should
      break the build for such a mismatch: remove the redundant mm arg from
      pte_alloc_kernel (ppc64 scrapped its distinct ioremap_mm in 2.6.13).
      
      Exceptions: arm26 used pte_alloc_kernel on user mm, now pte_alloc_map; ia64
      used pte_alloc_map on init_mm, now pte_alloc_kernel; parisc had bad args to
      pmd_alloc and pte_alloc_kernel in unused USE_HPPA_IOREMAP code; ppc64
      map_io_page forgot to unlock on failure; ppc mmu_mapin_ram and ppc64 im_free
      took page_table_lock for no good reason.
      Signed-off-by: NHugh Dickins <hugh@veritas.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      872fec16
    • N
      [ARM] 3061/1: cleanup the XIP link address mess · 37d07b72
      Nicolas Pitre 提交于
      Patch from Nicolas Pitre
      
      Since vmlinux.lds.S is preprocessed, we can use the defines already
      present in asm/memory.h (allowed by patch #3060) for the XIP kernel link
      address instead of relying on a duplicated Makefile hardcoded value, and
      also get rid of its dependency on awk to handle it at the same time.
      
      While at it let's clean XIP stuff even further and make things clearer
      in head.S with a nice code reduction.
      Signed-off-by: NNicolas Pitre <nico@cam.org>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      37d07b72
    • N
      [ARM] 3060/1: allow constants found in asm/memory.h to be used in asm code · f09b9979
      Nicolas Pitre 提交于
      Patch from Nicolas Pitre
      
      This patch allows for assorted type of cleanups by letting assembly code
      use the same set of defines for constant values and avoid duplicated
      definitions that might not always be in sync, or that might simply be
      confusing due to the different names for the same thing.
      Signed-off-by: NNicolas Pitre <nico@cam.org>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      f09b9979
    • R
      Create platform_device.h to contain all the platform device details. · d052d1be
      Russell King 提交于
      Convert everyone who uses platform_bus_type to include
      linux/platform_device.h.
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      Acked-by: NGreg Kroah-Hartman <gregkh@suse.de>
      d052d1be
    • A
      [PATCH] type fix in arm/boot/compressed/misc.c · 942b6f62
      Al Viro 提交于
      spot the typo...
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      942b6f62
  5. 29 10月, 2005 4 次提交
  6. 28 10月, 2005 3 次提交