1. 26 Feb, 2007 1 commit
  2. 23 Feb, 2007 21 commits
  3. 13 Feb, 2007 1 commit
  4. 02 Feb, 2007 6 commits
  5. 18 Jan, 2007 11 commits
    • Russell King's avatar
      [ARM] Provide basic printk_clock() implementation · d57fe6c0
      Russell King authored
      Current sched_clock() implementations on ARM cause unbootable kernels
      with PRINTK_TIME support enabled.  To avoid this, provide a basic
      printk_clock() implementation which avoids sched_clock() being called
      before the page tables have been set up.
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      d57fe6c0
    • Russell King's avatar
      [ARM] Fix VFP initialisation issue for SMP systems · 08de961a
      Russell King authored
      When we install the handlers for context switching, we must enable
      VFP on all CPU cores, otherwise undefined (and random) effects
      occur.
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      08de961a
    • Richard Purdie's avatar
      [ARM] 4078/1: Fix ARM copypage cache coherency problems · 1b0c9083
      Richard Purdie authored
      If PG_dcache_dirty is set for a page, we need to flush the source page
      before performing any copypage operation using a different virtual address.
      
      This fixes the copypage implementations for XScale, StrongARM and ARMv6.
      
      This patch fixes segmentation faults seen in the dynamic linker under
      the usage patterns in glibc 2.4/2.5.
      Signed-off-by: default avatarRichard Purdie <rpurdie@rpsys.net>
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      1b0c9083
    • Russell King's avatar
      [ARM] Fix warnings from asm/system.h · 19eecd50
      Russell King authored
      Move adjust_cr() into arch/arm/mm/mmu.c, and move irqflags.h to
      a more appropriate place in the header file.
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      19eecd50
    • Russell King's avatar
      [ARM] Fix BUG()s in ioremap() code · 7a998b09
      Russell King authored
      We need to ensure that the area size is page aligned so that
      remap_area_pte() doesn't increment the address past the end of
      the desired area.
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      7a998b09
    • Russell King's avatar
      [ARM] Add more syscalls · 27d9101e
      Russell King authored
      Add:
        sys_unshare
        sys_set_robust_list
        sys_get_robust_list
        sys_splice
        sys_arm_sync_file_range
        sys_tee
        sys_vmsplice
        sys_move_pages
        sys_getcpu
      
      Special note about sys_arm_sync_file_range(), which is implemented as:
      
      asmlinkage long sys_arm_sync_file_range(int fd, unsigned int flags,
                                              loff_t offset, loff_t nbytes)
      {
              return sys_sync_file_range(fd, offset, nbytes, flags);
      }
      
      We can't export sys_sync_file_range() directly on ARM because the
      argument list someone picked does not fit in the available registers.
      Would be nice if... there was an arch maintainer review mechanism for
      new syscalls before they hit the kernel.
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      27d9101e
    • Russell King's avatar
      [ARM] Provide a method to alter the control register · b0e407ac
      Russell King authored
      i.MX needs to tweak the control register to support CPU frequency
      scaling.  Rather than have folk blindly try and change the control
      register by writing to it and then wondering why it doesn't work,
      provide a method (which is safe for UP only, and therefore only
      available for UP) to achieve this.
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      b0e407ac
    • Nicolas Pitre's avatar
      [ARM] 4016/1: prefetch macro is wrong wrt gcc's "delete-null-pointer-checks" · 563c5768
      Nicolas Pitre authored
       optimization
      
      The gcc manual says:
      
      |`-fdelete-null-pointer-checks'
      |     Use global dataflow analysis to identify and eliminate useless
      |     checks for null pointers.  The compiler assumes that dereferencing
      |     a null pointer would have halted the program.  If a pointer is
      |     checked after it has already been dereferenced, it cannot be null.
      |     Enabled at levels `-O2', `-O3', `-Os'.
      
      Now the problem can be seen with this test case:
      
      #include <linux/prefetch.h>
      extern void bar(char *x);
      void foo(char *x)
      {
      	prefetch(x);
      	if (x)
      		bar(x);
      }
      
      Because the constraint to the inline asm used in the prefetch() macro is
      a memory operand, gcc assumes that the asm code does dereference the
      pointer and the delete-null-pointer-checks optimization kicks in.
      Inspection of generated assembly for the above example shows that bar()
      is indeed called unconditionally without any test on the value of x.
      
      Of course in the prefetch case there is no real dereference and it
      cannot be assumed that a null pointer would have been caught at that
      point. This causes kernel oopses with constructs like
      hlist_for_each_entry() where the list's 'next' content is prefetched
      before the pointer is tested against NULL, and only when gcc feels like
      applying this optimization which doesn't happen all the time with more
      complex code.
      
      It appears that the way to prevent delete-null-pointer-checks
      optimization to occur in this case is to make prefetch() into a static
      inline function instead of a macro. At least this is what is done on
      x86_64 where a similar inline asm memory operand is used (I presume they
      would have seen the same problem if it didn't work) and resulting code
      for the above example confirms that.
      
      An alternative would consist of replacing the memory operand by a
      register operand containing the pointer, and use the addressing mode
      explicitly in the asm template. But that would be less optimal than an
      offsettable memory reference.
      Signed-off-by: default avatarNicolas Pitre <nico@cam.org>
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      563c5768
    • Russell King's avatar
      [ARM] Add sys_*at syscalls · 0cb96821
      Russell King authored
      Later glibc requires the *at syscalls.  Add them.
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      0cb96821
    • Russell King's avatar
    • Russell King's avatar
      [ARM] Handle HWCAP_VFP in VFP support code · 854de764
      Russell King authored
      Don't set HWCAP_VFP in the processor support file; not only does it
      depend on the processor features, but it also depends on the support
      code being present.  Therefore, only set it if the support code
      detects that we have a VFP coprocessor attached.
      
      Also, move the VFP handling of the coprocessor access register into
      the VFP support code.
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      854de764