1. 05 Aug, 2008 35 commits
  2. 04 Aug, 2008 5 commits
    • Huang Weiyi's avatar
      drivers/char/efirtc.c: removed duplicated #include · c2d5ceda
      Huang Weiyi authored
      Removed duplicated include <linux/smp_lock.h> in
      drivers/char/efirtc.c.
      Signed-off-by: default avatarHuang Weiyi <weiyi.huang@gmail.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      c2d5ceda
    • KOSAKI Motohiro's avatar
      mlock() fix return values · a477097d
      KOSAKI Motohiro authored
      Halesh says:
      
      Please find the below testcase provide to test mlock.
      
      Test Case :
      ===========================
      
      #include <sys/resource.h>
      #include <stdio.h>
      #include <sys/stat.h>
      #include <sys/types.h>
      #include <unistd.h>
      #include <sys/mman.h>
      #include <fcntl.h>
      #include <errno.h>
      #include <stdlib.h>
      
      int main(void)
      {
        int fd,ret, i = 0;
        char *addr, *addr1 = NULL;
        unsigned int page_size;
        struct rlimit rlim;
      
        if (0 != geteuid())
        {
         printf("Execute this pgm as root\n");
         exit(1);
        }
      
        /* create a file */
        if ((fd = open("mmap_test.c",O_RDWR|O_CREAT,0755)) == -1)
        {
         printf("cant create test file\n");
         exit(1);
        }
      
        page_size = sysconf(_SC_PAGE_SIZE);
      
        /* set the MEMLOCK limit */
        rlim.rlim_cur = 2000;
        rlim.rlim_max = 2000;
      
        if ((ret = setrlimit(RLIMIT_MEMLOCK,&rlim)) != 0)
        {
         printf("Cant change limit values\n");
         exit(1);
        }
      
        addr = 0;
        while (1)
        {
        /* map a page into memory each time*/
        if ((addr = (char *) mmap(addr,page_size, PROT_READ |
      PROT_WRITE,MAP_SHARED,fd,0)) == MAP_FAILED)
        {
         printf("cant do mmap on file\n");
         exit(1);
        }
      
        if (0 == i)
          addr1 = addr;
        i++;
        errno = 0;
        /* lock the mapped memory pagewise*/
        if ((ret = mlock((char *)addr, 1500)) == -1)
        {
         printf("errno value is %d\n", errno);
         printf("cant lock maped region\n");
         exit(1);
        }
        addr = addr + page_size;
       }
      }
      ======================================================
      
      This testcase results in an mlock() failure with errno 14 that is EFAULT,
      but it has nowhere been specified that mlock() will return EFAULT.  When I
      tested the same on older kernels like 2.6.18, I got the correct result i.e
      errno 12 (ENOMEM).
      
      I think in source code mlock(2), setting errno ENOMEM has been missed in
      do_mlock() , on mlock_fixup() failure.
      
      SUSv3 requires the following behavior frmo mlock(2).
      
      [ENOMEM]
          Some or all of the address range specified by the addr and
          len arguments does not correspond to valid mapped pages
          in the address space of the process.
      
      [EAGAIN]
          Some or all of the memory identified by the operation could not
          be locked when the call was made.
      
      This rule isn't so nice and slighly strange.  but many people think
      POSIX/SUS compliance is important.
      Reported-by: default avatarHalesh Sadashiv <halesh.sadashiv@ap.sony.com>
      Tested-by: default avatarHalesh Sadashiv <halesh.sadashiv@ap.sony.com>
      Signed-off-by: default avatarKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
      Cc: <stable@kernel.org>		[2.6.25.x, 2.6.26.x]
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      a477097d
    • Gerard Kam's avatar
      atmel_spi: fix hang due to missed interrupt · dc329442
      Gerard Kam authored
      For some time my at91sam9260 board with JFFS2 on serial flash (m25p80)
      would hang when accessing the serial flash and SPI bus.  Slowing the SPI
      clock down to 9 MHz reduced the occurrence of the hang from "always"
      during boot to a nuisance level that allowed other SW development to
      continue.  Finally had to address this issue when an application stresses
      the I/O to always cause a hang.
      
      Hang seems to be caused by a missed SPI interrupt, so that the task ends
      up waiting forever after calling spi_sync().  The fix has 2 parts.  First
      is to halt the DMA engine before the "current" PDC registers are loaded.
      This ensures that the "next" registers are loaded before the DMA operation
      takes off.  The second part of the fix is a kludge that adds a
      "completion" interrupt in case the ENDRX interrupt for the last segment of
      the DMA chaining operation was missed.
      
      The patch allows the SPI clock for the serial flash to be increased from 9
      MHz to 15 MHz (or more?).  No hangs or SPI overruns were encountered.
      
      Haavard: while this patch does indeed improve things, I still see overruns
      and CRC errors on my NGW100 board when running the DataFlash at 10 MHz.
      However, I think some improvement is better than nothing, so I'm passing
      this on for inclusion in 2.6.27.
      Signed-off-by: default avatarGerard Kam <gerardk5@verizon.net>
      Signed-off-by: default avatarHaavard Skinnemoen <haavard.skinnemoen@atmel.com>
      Cc: David Brownell <david-b@pacbell.net>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      dc329442
    • Ben Dooks's avatar
      spi: S3C24XX: reset register status on resume. · 5aa6cf30
      Ben Dooks authored
      Fix a bug in the spi_s3c24xx driver where it does not reset the registers
      of the hardware when resuming from suspend (this block has been reset over
      suspend).
      Signed-off-by: default avatarBen Dooks <ben-linux@fluff.org>
      Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      5aa6cf30
    • David S. Miller's avatar
      sparc64: Remove all cpumask_t local variables in xcall dispatch. · ae583885
      David S. Miller authored
      All of the xcall delivery implementation is cpumask agnostic, so
      we can pass around pointers to const cpumask_t objects everywhere.
      
      The sad remaining case is the argument to arch_send_call_function_ipi().
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ae583885