1. 28 Jul, 2008 40 commits
    • Manuel Lauss's avatar
      sh7760fb: write colormap value to hardware · c27ef92d
      Manuel Lauss authored
      The computed color value is never actually written to hardware
      colormap register.
      Signed-off-by: default avatarManuel Lauss <mano@roarinelk.homelinux.net>
      Cc: Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>
      Cc: Munakata Hisao <munakata.hisao@renesas.com>
      Cc: Paul Mundt <lethal@linux-sh.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      c27ef92d
    • Eric Sandeen's avatar
      eCryptfs: use page_alloc not kmalloc to get a page of memory · 7fcba054
      Eric Sandeen authored
      With SLUB debugging turned on in 2.6.26, I was getting memory corruption
      when testing eCryptfs.  The root cause turned out to be that eCryptfs was
      doing kmalloc(PAGE_CACHE_SIZE); virt_to_page() and treating that as a nice
      page-aligned chunk of memory.  But at least with SLUB debugging on, this
      is not always true, and the page we get from virt_to_page does not
      necessarily match the PAGE_CACHE_SIZE worth of memory we got from kmalloc.
      
      My simple testcase was 2 loops doing "rm -f fileX; cp /tmp/fileX ." for 2
      different multi-megabyte files.  With this change I no longer see the
      corruption.
      Signed-off-by: default avatarEric Sandeen <sandeen@redhat.com>
      Acked-by: default avatarMichael Halcrow <mhalcrow@us.ibm.com>
      Acked-by: default avatarRik van Riel <riel@redhat.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>
      7fcba054
    • Atsushi Nemoto's avatar
      gpio: fix build on CONFIG_GPIO_SYSFS=n · 25947d5a
      Atsushi Nemoto authored
      If CONFIG_GENERIC_GPIO=y && CONFIG_GPIO_SYSFS=n, gpio_export() in
      asm-generic/gpio.h refers -ENOSYS and causes build error.
      Signed-off-by: default avatarAtsushi Nemoto <anemo@mba.ocn.ne.jp>
      Acked-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>
      25947d5a
    • Yoichi Yuasa's avatar
      bio-integrity: remove EXPORT_SYMBOL for bio_integrity_init_slab() · e3b6e806
      Yoichi Yuasa authored
      I got section mismatch message about bio_integrity_init_slab().
      
      WARNING: fs/built-in.o(__ksymtab+0xb60): Section mismatch in reference from the variable __ksymtab_bio_integrity_init_slab to the function .init.text:bio_integrity_init_slab()
      
      The symbol bio_integrity_init_slab is exported and annotated __init Fix
      this by removing the __init annotation of bio_integrity_init_slab or drop
      the export.
      
      It only call from init_bio().  The EXPORT_SYMBOL() can be removed.
      Signed-off-by: default avatarYoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
      Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
      Cc: Jens Axboe <jens.axboe@oracle.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      e3b6e806
    • Hisashi Hifumi's avatar
      vfs: pagecache usage optimization for pagesize!=blocksize · 8ab22b9a
      Hisashi Hifumi authored
      When we read some part of a file through pagecache, if there is a
      pagecache of corresponding index but this page is not uptodate, read IO
      is issued and this page will be uptodate.
      
      I think this is good for pagesize == blocksize environment but there is
      room for improvement on pagesize != blocksize environment.  Because in
      this case a page can have multiple buffers and even if a page is not
      uptodate, some buffers can be uptodate.
      
      So I suggest that when all buffers which correspond to a part of a file
      that we want to read are uptodate, use this pagecache and copy data from
      this pagecache to user buffer even if a page is not uptodate.  This can
      reduce read IO and improve system throughput.
      
      I wrote a benchmark program and got result number with this program.
      
      This benchmark do:
      
        1: mount and open a test file.
      
        2: create a 512MB file.
      
        3: close a file and umount.
      
        4: mount and again open a test file.
      
        5: pwrite randomly 300000 times on a test file.  offset is aligned
           by IO size(1024bytes).
      
        6: measure time of preading randomly 100000 times on a test file.
      
      The result was:
      	2.6.26
              330 sec
      
      	2.6.26-patched
              226 sec
      
      Arch:i386
      Filesystem:ext3
      Blocksize:1024 bytes
      Memory: 1GB
      
      On ext3/4, a file is written through buffer/block.  So random read/write
      mixed workloads or random read after random write workloads are optimized
      with this patch under pagesize != blocksize environment.  This test result
      showed this.
      
      The benchmark program is as follows:
      
      #include <stdio.h>
      #include <sys/types.h>
      #include <sys/stat.h>
      #include <fcntl.h>
      #include <unistd.h>
      #include <time.h>
      #include <stdlib.h>
      #include <string.h>
      #include <sys/mount.h>
      
      #define LEN 1024
      #define LOOP 1024*512 /* 512MB */
      
      main(void)
      {
      	unsigned long i, offset, filesize;
      	int fd;
      	char buf[LEN];
      	time_t t1, t2;
      
      	if (mount("/dev/sda1", "/root/test1/", "ext3", 0, 0) < 0) {
      		perror("cannot mount\n");
      		exit(1);
      	}
      	memset(buf, 0, LEN);
      	fd = open("/root/test1/testfile", O_CREAT|O_RDWR|O_TRUNC);
      	if (fd < 0) {
      		perror("cannot open file\n");
      		exit(1);
      	}
      	for (i = 0; i < LOOP; i++)
      		write(fd, buf, LEN);
      	close(fd);
      	if (umount("/root/test1/") < 0) {
      		perror("cannot umount\n");
      		exit(1);
      	}
      	if (mount("/dev/sda1", "/root/test1/", "ext3", 0, 0) < 0) {
      		perror("cannot mount\n");
      		exit(1);
      	}
      	fd = open("/root/test1/testfile", O_RDWR);
      	if (fd < 0) {
      		perror("cannot open file\n");
      		exit(1);
      	}
      
      	filesize = LEN * LOOP;
      	for (i = 0; i < 300000; i++){
      		offset = (random() % filesize) & (~(LEN - 1));
      		pwrite(fd, buf, LEN, offset);
      	}
      	printf("start test\n");
      	time(&t1);
      	for (i = 0; i < 100000; i++){
      		offset = (random() % filesize) & (~(LEN - 1));
      		pread(fd, buf, LEN, offset);
      	}
      	time(&t2);
      	printf("%ld sec\n", t2-t1);
      	close(fd);
      	if (umount("/root/test1/") < 0) {
      		perror("cannot umount\n");
      		exit(1);
      	}
      }
      Signed-off-by: default avatarHisashi Hifumi <hifumi.hisashi@oss.ntt.co.jp>
      Cc: Nick Piggin <nickpiggin@yahoo.com.au>
      Cc: Christoph Hellwig <hch@infradead.org>
      Cc: Jan Kara <jack@ucw.cz>
      Cc: <linux-ext4@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      8ab22b9a
    • Simon Horman's avatar
    • Ben Dooks's avatar
      spi_s3c24xx: really assign busnum · cb1d0a7a
      Ben Dooks authored
      The original "Pass the bus number we expect the S3C24XX SPI driver to
      attach to via the platform data." [1] patch was mis-sent, and missed two
      important parts of the diff, which was to actually set the bus_num field
      and add the relevant field to the platform data.
      
      The previous commit 50f426b5 promised to
      add a bus_num field, but failed to include the two hunks that added this
      field to include/asm-arm/arch-s3c2410/spi.h and then pass it to the spi
      core when creating the new master field in drivers/spi/spi_s3c24xx.c.
      
      [1] git commit 50f426b5Signed-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>
      cb1d0a7a
    • Luotao Fu's avatar
      mpc52xx_psc_spi: fix block transfer · 9a7867e1
      Luotao Fu authored
      The block transfer routine in the mpc52xx psc spi driver misinterpret
      the datasheet.  According to the processor datasheet the chipselect is
      held as long as the EOF is not written.
      
      Theoretically blocks of any sizes can be transferred in this way.  The
      old routine however writes an EOF after every word, which has the size
      of size_of_word.  This makes the transfer slow.
      
      Also fixed some duplicate code.
      Signed-off-by: default avatarLuotao Fu <l.fu@pengutronix.de>
      Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
      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>
      9a7867e1
    • Adrian Bunk's avatar
      mm/hugetlb.c must #include <asm/io.h> · 78a34ae2
      Adrian Bunk authored
      This patch fixes the following build error on sh caused by commit
      aa888a74 ("hugetlb: support larger than
      MAX_ORDER"):
      
        mm/hugetlb.c: In function 'alloc_bootmem_huge_page':
        mm/hugetlb.c:958: error: implicit declaration of function 'virt_to_phys'
      Signed-off-by: default avatarAdrian Bunk <bunk@kernel.org>
      Cc: Hirokazu Takata <takata@linux-m32r.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      78a34ae2
    • Andrea Arcangeli's avatar
      mmu-notifiers: core · cddb8a5c
      Andrea Arcangeli authored
      With KVM/GFP/XPMEM there isn't just the primary CPU MMU pointing to pages.
       There are secondary MMUs (with secondary sptes and secondary tlbs) too.
      sptes in the kvm case are shadow pagetables, but when I say spte in
      mmu-notifier context, I mean "secondary pte".  In GRU case there's no
      actual secondary pte and there's only a secondary tlb because the GRU
      secondary MMU has no knowledge about sptes and every secondary tlb miss
      event in the MMU always generates a page fault that has to be resolved by
      the CPU (this is not the case of KVM where the a secondary tlb miss will
      walk sptes in hardware and it will refill the secondary tlb transparently
      to software if the corresponding spte is present).  The same way
      zap_page_range has to invalidate the pte before freeing the page, the spte
      (and secondary tlb) must also be invalidated before any page is freed and
      reused.
      
      Currently we take a page_count pin on every page mapped by sptes, but that
      means the pages can't be swapped whenever they're mapped by any spte
      because they're part of the guest working set.  Furthermore a spte unmap
      event can immediately lead to a page to be freed when the pin is released
      (so requiring the same complex and relatively slow tlb_gather smp safe
      logic we have in zap_page_range and that can be avoided completely if the
      spte unmap event doesn't require an unpin of the page previously mapped in
      the secondary MMU).
      
      The mmu notifiers allow kvm/GRU/XPMEM to attach to the tsk->mm and know
      when the VM is swapping or freeing or doing anything on the primary MMU so
      that the secondary MMU code can drop sptes before the pages are freed,
      avoiding all page pinning and allowing 100% reliable swapping of guest
      physical address space.  Furthermore it avoids the code that teardown the
      mappings of the secondary MMU, to implement a logic like tlb_gather in
      zap_page_range that would require many IPI to flush other cpu tlbs, for
      each fixed number of spte unmapped.
      
      To make an example: if what happens on the primary MMU is a protection
      downgrade (from writeable to wrprotect) the secondary MMU mappings will be
      invalidated, and the next secondary-mmu-page-fault will call
      get_user_pages and trigger a do_wp_page through get_user_pages if it
      called get_user_pages with write=1, and it'll re-establishing an updated
      spte or secondary-tlb-mapping on the copied page.  Or it will setup a
      readonly spte or readonly tlb mapping if it's a guest-read, if it calls
      get_user_pages with write=0.  This is just an example.
      
      This allows to map any page pointed by any pte (and in turn visible in the
      primary CPU MMU), into a secondary MMU (be it a pure tlb like GRU, or an
      full MMU with both sptes and secondary-tlb like the shadow-pagetable layer
      with kvm), or a remote DMA in software like XPMEM (hence needing of
      schedule in XPMEM code to send the invalidate to the remote node, while no
      need to schedule in kvm/gru as it's an immediate event like invalidating
      primary-mmu pte).
      
      At least for KVM without this patch it's impossible to swap guests
      reliably.  And having this feature and removing the page pin allows
      several other optimizations that simplify life considerably.
      
      Dependencies:
      
      1) mm_take_all_locks() to register the mmu notifier when the whole VM
         isn't doing anything with "mm".  This allows mmu notifier users to keep
         track if the VM is in the middle of the invalidate_range_begin/end
         critical section with an atomic counter incraese in range_begin and
         decreased in range_end.  No secondary MMU page fault is allowed to map
         any spte or secondary tlb reference, while the VM is in the middle of
         range_begin/end as any page returned by get_user_pages in that critical
         section could later immediately be freed without any further
         ->invalidate_page notification (invalidate_range_begin/end works on
         ranges and ->invalidate_page isn't called immediately before freeing
         the page).  To stop all page freeing and pagetable overwrites the
         mmap_sem must be taken in write mode and all other anon_vma/i_mmap
         locks must be taken too.
      
      2) It'd be a waste to add branches in the VM if nobody could possibly
         run KVM/GRU/XPMEM on the kernel, so mmu notifiers will only enabled if
         CONFIG_KVM=m/y.  In the current kernel kvm won't yet take advantage of
         mmu notifiers, but this already allows to compile a KVM external module
         against a kernel with mmu notifiers enabled and from the next pull from
         kvm.git we'll start using them.  And GRU/XPMEM will also be able to
         continue the development by enabling KVM=m in their config, until they
         submit all GRU/XPMEM GPLv2 code to the mainline kernel.  Then they can
         also enable MMU_NOTIFIERS in the same way KVM does it (even if KVM=n).
         This guarantees nobody selects MMU_NOTIFIER=y if KVM and GRU and XPMEM
         are all =n.
      
      The mmu_notifier_register call can fail because mm_take_all_locks may be
      interrupted by a signal and return -EINTR.  Because mmu_notifier_reigster
      is used when a driver startup, a failure can be gracefully handled.  Here
      an example of the change applied to kvm to register the mmu notifiers.
      Usually when a driver startups other allocations are required anyway and
      -ENOMEM failure paths exists already.
      
       struct  kvm *kvm_arch_create_vm(void)
       {
              struct kvm *kvm = kzalloc(sizeof(struct kvm), GFP_KERNEL);
      +       int err;
      
              if (!kvm)
                      return ERR_PTR(-ENOMEM);
      
              INIT_LIST_HEAD(&kvm->arch.active_mmu_pages);
      
      +       kvm->arch.mmu_notifier.ops = &kvm_mmu_notifier_ops;
      +       err = mmu_notifier_register(&kvm->arch.mmu_notifier, current->mm);
      +       if (err) {
      +               kfree(kvm);
      +               return ERR_PTR(err);
      +       }
      +
              return kvm;
       }
      
      mmu_notifier_unregister returns void and it's reliable.
      
      The patch also adds a few needed but missing includes that would prevent
      kernel to compile after these changes on non-x86 archs (x86 didn't need
      them by luck).
      
      [akpm@linux-foundation.org: coding-style fixes]
      [akpm@linux-foundation.org: fix mm/filemap_xip.c build]
      [akpm@linux-foundation.org: fix mm/mmu_notifier.c build]
      Signed-off-by: default avatarAndrea Arcangeli <andrea@qumranet.com>
      Signed-off-by: default avatarNick Piggin <npiggin@suse.de>
      Signed-off-by: default avatarChristoph Lameter <cl@linux-foundation.org>
      Cc: Jack Steiner <steiner@sgi.com>
      Cc: Robin Holt <holt@sgi.com>
      Cc: Nick Piggin <npiggin@suse.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Kanoj Sarcar <kanojsarcar@yahoo.com>
      Cc: Roland Dreier <rdreier@cisco.com>
      Cc: Steve Wise <swise@opengridcomputing.com>
      Cc: Avi Kivity <avi@qumranet.com>
      Cc: Hugh Dickins <hugh@veritas.com>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Anthony Liguori <aliguori@us.ibm.com>
      Cc: Chris Wright <chrisw@redhat.com>
      Cc: Marcelo Tosatti <marcelo@kvack.org>
      Cc: Eric Dumazet <dada1@cosmosbay.com>
      Cc: "Paul E. McKenney" <paulmck@us.ibm.com>
      Cc: Izik Eidus <izike@qumranet.com>
      Cc: Anthony Liguori <aliguori@us.ibm.com>
      Cc: Rik van Riel <riel@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      cddb8a5c
    • Andrea Arcangeli's avatar
      mmu-notifiers: add mm_take_all_locks() operation · 7906d00c
      Andrea Arcangeli authored
      mm_take_all_locks holds off reclaim from an entire mm_struct.  This allows
      mmu notifiers to register into the mm at any time with the guarantee that
      no mmu operation is in progress on the mm.
      
      This operation locks against the VM for all pte/vma/mm related operations
      that could ever happen on a certain mm.  This includes vmtruncate,
      try_to_unmap, and all page faults.
      
      The caller must take the mmap_sem in write mode before calling
      mm_take_all_locks().  The caller isn't allowed to release the mmap_sem
      until mm_drop_all_locks() returns.
      
      mmap_sem in write mode is required in order to block all operations that
      could modify pagetables and free pages without need of altering the vma
      layout (for example populate_range() with nonlinear vmas).  It's also
      needed in write mode to avoid new anon_vmas to be associated with existing
      vmas.
      
      A single task can't take more than one mm_take_all_locks() in a row or it
      would deadlock.
      
      mm_take_all_locks() and mm_drop_all_locks are expensive operations that
      may have to take thousand of locks.
      
      mm_take_all_locks() can fail if it's interrupted by signals.
      
      When mmu_notifier_register returns, we must be sure that the driver is
      notified if some task is in the middle of a vmtruncate for the 'mm' where
      the mmu notifier was registered (mmu_notifier_invalidate_range_start/end
      is run around the vmtruncation but mmu_notifier_register can run after
      mmu_notifier_invalidate_range_start and before
      mmu_notifier_invalidate_range_end).  Same problem for rmap paths.  And
      we've to remove page pinning to avoid replicating the tlb_gather logic
      inside KVM (and GRU doesn't work well with page pinning regardless of
      needing tlb_gather), so without mm_take_all_locks when vmtruncate frees
      the page, kvm would have no way to notice that it mapped into sptes a page
      that is going into the freelist without a chance of any further
      mmu_notifier notification.
      
      [akpm@linux-foundation.org: coding-style fixes]
      Signed-off-by: default avatarAndrea Arcangeli <andrea@qumranet.com>
      Acked-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Cc: Christoph Lameter <cl@linux-foundation.org>
      Cc: Jack Steiner <steiner@sgi.com>
      Cc: Robin Holt <holt@sgi.com>
      Cc: Nick Piggin <npiggin@suse.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Kanoj Sarcar <kanojsarcar@yahoo.com>
      Cc: Roland Dreier <rdreier@cisco.com>
      Cc: Steve Wise <swise@opengridcomputing.com>
      Cc: Avi Kivity <avi@qumranet.com>
      Cc: Hugh Dickins <hugh@veritas.com>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Anthony Liguori <aliguori@us.ibm.com>
      Cc: Chris Wright <chrisw@redhat.com>
      Cc: Marcelo Tosatti <marcelo@kvack.org>
      Cc: Eric Dumazet <dada1@cosmosbay.com>
      Cc: "Paul E. McKenney" <paulmck@us.ibm.com>
      Cc: Izik Eidus <izike@qumranet.com>
      Cc: Anthony Liguori <aliguori@us.ibm.com>
      Cc: Rik van Riel <riel@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      7906d00c
    • Andrea Arcangeli's avatar
      mmu-notifiers: add list_del_init_rcu() · 6beeac76
      Andrea Arcangeli authored
      Introduce list_del_init_rcu() and document it.
      Signed-off-by: default avatarAndrea Arcangeli <andrea@qumranet.com>
      Acked-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Cc: "Paul E. McKenney" <paulmck@us.ibm.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Christoph Lameter <cl@linux-foundation.org>
      Cc: Jack Steiner <steiner@sgi.com>
      Cc: Robin Holt <holt@sgi.com>
      Cc: Nick Piggin <npiggin@suse.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Kanoj Sarcar <kanojsarcar@yahoo.com>
      Cc: Roland Dreier <rdreier@cisco.com>
      Cc: Steve Wise <swise@opengridcomputing.com>
      Cc: Avi Kivity <avi@qumranet.com>
      Cc: Hugh Dickins <hugh@veritas.com>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Anthony Liguori <aliguori@us.ibm.com>
      Cc: Chris Wright <chrisw@redhat.com>
      Cc: Marcelo Tosatti <marcelo@kvack.org>
      Cc: Eric Dumazet <dada1@cosmosbay.com>
      Cc: "Paul E. McKenney" <paulmck@us.ibm.com>
      Cc: Izik Eidus <izike@qumranet.com>
      Cc: Anthony Liguori <aliguori@us.ibm.com>
      Cc: Rik van Riel <riel@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      6beeac76
    • David Brownell's avatar
      arm: fix HAVE_CLK merge goof · 93686ae8
      David Brownell authored
      This fixes a merge goof whereby ARCH_EP93XX got the "select HAVE_CLK" line
      which belongs instead with ARCH_AT91.
      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>
      93686ae8
    • Alexey Dobriyan's avatar
      __ratelimit() cpu flags can't be static · 4d9c377c
      Alexey Dobriyan authored
      Signed-off-by: default avatarAlexey Dobriyan <adobriyan@gmail.com>
      Cc: Dave Young <hidave.darkstar@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      4d9c377c
    • Hugh Dickins's avatar
      tmpfs: fix kernel BUG in shmem_delete_inode · 14fcc23f
      Hugh Dickins authored
      SuSE's insserve initscript ordering program hits kernel BUG at mm/shmem.c:814
      on 2.6.26.  It's using posix_fadvise on directories, and the shmem_readpage
      method added in 2.6.23 is letting POSIX_FADV_WILLNEED allocate useless pages
      to a tmpfs directory, incrementing i_blocks count but never decrementing it.
      
      Fix this by assigning shmem_aops (pointing to readpage and writepage and
      set_page_dirty) only when it's needed, on a regular file or a long symlink.
      
      Many thanks to Kel for outstanding bugreport and steps to reproduce it.
      Reported-by: default avatarKel Modderman <kel@otaku42.de>
      Tested-by: default avatarKel Modderman <kel@otaku42.de>
      Signed-off-by: default avatarHugh Dickins <hugh@veritas.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>
      14fcc23f
    • Hugh Dickins's avatar
      exec: include pagemap.h again to fix build · ca5b172b
      Hugh Dickins authored
      Fix compilation errors on avr32 and without CONFIG_SWAP, introduced by
      ba92a43d ("exec: remove some includes")
      
        In file included from include/asm/tlb.h:24,
                         from fs/exec.c:55:
        include/asm-generic/tlb.h: In function 'tlb_flush_mmu':
        include/asm-generic/tlb.h:76: error: implicit declaration of function 'release_pages'
        include/asm-generic/tlb.h: In function 'tlb_remove_page':
        include/asm-generic/tlb.h:105: error: implicit declaration of function 'page_cache_release'
        make[1]: *** [fs/exec.o] Error 1
      
      This straightforward part-revert is nobody's favourite patch to address
      the underlying tlb.h needs swap.h needs pagemap.h (but sparc won't like
      that) mess; but appropriate to fix the build now before any overhaul.
      Reported-by: default avatarYoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
      Reported-by: default avatarHaavard Skinnemoen <haavard.skinnemoen@atmel.com>
      Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
      Tested-by: default avatarAdrian Bunk <bunk@kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      ca5b172b
    • Linus Torvalds's avatar
      Merge branch 'cpus4096-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip · 63add2f2
      Linus Torvalds authored
      * 'cpus4096-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
        cpu masks: optimize and clean up cpumask_of_cpu()
        cpumask: export cpumask_of_cpu_map
        cpumask: change cpumask_of_cpu_ptr to use new cpumask_of_cpu
        cpumask: put cpumask_of_cpu_map in the initdata section
        cpumask: make cpumask_of_cpu_map generic
      63add2f2
    • James Bottomley's avatar
      ipwireless: fix compile failure · 3684a601
      James Bottomley authored
      There's a brown paper bag compile failure introduced by this patch
      
      commit a0138692
      Author: David Sterba <dsterba@suse.cz>
      Date:   Mon Jul 28 16:53:32 2008 +0200
      
          ipwireless: Preallocate received packet buffers with MRU size
      
      Really, it can't ever have been even compile tested.  It looks like the
      closing bracket is in the wrong place, so this is the fix.
      Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      3684a601
    • Ingo Molnar's avatar
      Merge branch 'linus' into cpus4096 · 9e3ee1c3
      Ingo Molnar authored
      Conflicts:
      
      	kernel/stop_machine.c
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      9e3ee1c3
    • Linus Torvalds's avatar
      cpu masks: optimize and clean up cpumask_of_cpu() · e56b3bc7
      Linus Torvalds authored
      Clean up and optimize cpumask_of_cpu(), by sharing all the zero words.
      
      Instead of stupidly generating all possible i=0...NR_CPUS 2^i patterns
      creating a huge array of constant bitmasks, realize that the zero words
      can be shared.
      
      In other words, on a 64-bit architecture, we only ever need 64 of these
      arrays - with a different bit set in one single world (with enough zero
      words around it so that we can create any bitmask by just offsetting in
      that big array). And then we just put enough zeroes around it that we
      can point every single cpumask to be one of those things.
      
      So when we have 4k CPU's, instead of having 4k arrays (of 4k bits each,
      with one bit set in each array - 2MB memory total), we have exactly 64
      arrays instead, each 8k bits in size (64kB total).
      
      And then we just point cpumask(n) to the right position (which we can
      calculate dynamically). Once we have the right arrays, getting
      "cpumask(n)" ends up being:
      
        static inline const cpumask_t *get_cpu_mask(unsigned int cpu)
        {
                const unsigned long *p = cpu_bit_bitmap[1 + cpu % BITS_PER_LONG];
                p -= cpu / BITS_PER_LONG;
                return (const cpumask_t *)p;
        }
      
      This brings other advantages and simplifications as well:
      
       - we are not wasting memory that is just filled with a single bit in
         various different places
      
       - we don't need all those games to re-create the arrays in some dense
         format, because they're already going to be dense enough.
      
      if we compile a kernel for up to 4k CPU's, "wasting" that 64kB of memory
      is a non-issue (especially since by doing this "overlapping" trick we
      probably get better cache behaviour anyway).
      
      [ mingo@elte.hu:
      
        Converted Linus's mails into a commit. See:
      
           http://lkml.org/lkml/2008/7/27/156
           http://lkml.org/lkml/2008/7/28/320
      
        Also applied a family filter - which also has the side-effect of leaving
        out the bits where Linus calls me an idio... Oh, never mind ;-)
      ]
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Al Viro <viro@ZenIV.linux.org.uk>
      Cc: Mike Travis <travis@sgi.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      e56b3bc7
    • Ingo Molnar's avatar
      Merge branch 'linus' into cpus4096 · 414f746d
      Ingo Molnar authored
      414f746d
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input · f934fb19
      Linus Torvalds authored
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
        Input: add driver for Atmel integrated touchscreen controller
        Input: ads7846 - optimize order of calculating Rt in ads7846_rx()
        Input: ads7846 - fix sparse endian warnings
        Input: uinput - remove duplicate include
        Input: serio - offload resume to kseriod
        Input: serio - mark serio_register_driver() __must_check
      f934fb19
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/teigland/dlm · 3988ba07
      Linus Torvalds authored
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/teigland/dlm:
        dlm: fix uninitialized variable for search_rsb_list callers
        dlm: release socket on error
        dlm: fix basts for granted CW waiting PR/CW
        dlm: check for null in device_write
      3988ba07
    • Linus Torvalds's avatar
      Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc · d9089c29
      Linus Torvalds authored
      * 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc: (25 commits)
        powerpc: Disable 64K hugetlb support when doing 64K SPU mappings
        powerpc/powermac: Fixup default serial port device for pmac_zilog
        powerpc/powermac: Use sane default baudrate for SCC debugging
        powerpc/mm: Implement _PAGE_SPECIAL & pte_special() for 64-bit
        powerpc: Show processor cache information in sysfs
        powerpc: Make core id information available to userspace
        powerpc: Make core sibling information available to userspace
        powerpc/vio: More fallout from dma_mapping_error API change
        ibmveth: Fix multiple errors with dma_mapping_error conversion
        powerpc/pseries: Fix CMO sysdev attribute API change fallout
        powerpc: Enable tracehook for the architecture
        powerpc: Add TIF_NOTIFY_RESUME support for tracehook
        powerpc: Add asm/syscall.h with the tracehook entry points
        powerpc: Make syscall tracing use tracehook.h helpers
        powerpc: Call tracehook_signal_handler() when setting up signal frames
        powerpc: Update cpu_sibling_maps dynamically
        powerpc: register_cpu_online should be __cpuinit
        powerpc: kill useless SMT code in prom_hold_cpus
        powerpc: Fix 8xx build failure
        powerpc: Fix vio build warnings
        ...
      d9089c29
    • Linus Torvalds's avatar
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6 · b10a8b72
      Linus Torvalds authored
      * git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6: (72 commits)
        sh: SuperH Mobile CEU and camera platform data for AP325RXA
        sh: Update smc911x platform data for AP325RXA
        sh: SuperH Mobile LCDC platform data for AP325RXA
        sh: Add SuperH Mobile CEU platform data for Migo-R
        sh: Add SuperH Mobile LCDC platform data for Migo-R
        sh: Move asid_cache() out of ifdef to fix SH-3/4 nommu build.
        sh: Workaround for __put_user_asm() bug with gcc 4.x on big-endian.
        sh: Wire up new syscalls.
        sh: fix uImage Entry Point
        sh_keysc: remove request_mem_region() and release_mem_region()
        sh: Don't miss pending signals returning to user mode after signal processing
        sh: Use clk_always_enable() on sh7366
        sh: Use clk_always_enable() on sh7343 / SE77343
        sh: Use clk_always_enable() on sh7722 / Migo-R / SE7722
        sh: Use clk_always_enable() on sh7723 / ap325rxa
        sh: Introduce clk_always_enable() function
        sh: Show all clocks and their state in /proc/clocks
        sh: Merge sh7343 and sh7722 clock code
        sh: Add SuperH Mobile MSTPCR bits to clock framework
        sh: Use arch_flags to simplify sh7722 siu clock code
        ...
      b10a8b72
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-for-linus · 37eaf8c7
      Linus Torvalds authored
      * git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-for-linus:
        stop_machine: fix up ftrace.c
        stop_machine: Wean existing callers off stop_machine_run()
        stop_machine(): stop_machine_run() changed to use cpu mask
        Hotplug CPU: don't check cpu_online after take_cpu_down
        Simplify stop_machine
        stop_machine: add ALL_CPUS option
        module: fix build warning with !CONFIG_KALLSYMS
      37eaf8c7
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb · 58f25071
      Linus Torvalds authored
      * git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb: (98 commits)
        V4L/DVB (8549): mxl5007: Fix an error at include file
        V4L/DVB (8548): pwc: Fix compilation
        V4L/DVB (8546): add tuner-3036 and dpc7146 drivers to feature-removal-schedule.txt
        V4L/DVB (8546): saa7146: fix read from uninitialized memory
        V4L/DVB (8544): gspca: probe/open race.
        V4L/DVB (8543): em28xx: Rename #define for Compro VideoMate ForYou/Stereo
        V4L/DVB (8542): em28xx: AMD ATI TV Wonder HD 600 entry at cards struct is duplicated
        V4L/DVB (8541): em28xx: HVR-950 entry is duplicated.
        V4L/DVB (8540): em28xx-cards: Add Compro VideoMate ForYou/Stereo model
        V4L/DVB (8539): em28xx-cards: New supported IDs for analog models
        V4L/DVB (8538): em28xx-cards: Add GrabBeeX+ USB2800 model
        V4L/DVB (8534): remove select's of FW_LOADER
        V4L/DVB (8522): videodev2: Fix merge conflict
        V4L/DVB (8532): mxl5007t: remove excessive locks
        V4L/DVB (8531): mxl5007t: move i2c gate handling outside of mutex protected code blocks
        V4L/DVB (8530): au0828: add support for new revision of HVR950Q
        V4L/DVB (8529): mxl5007t: enable _init and _sleep power management functionality
        V4L/DVB (8528): add support for MaxLinear MxL5007T silicon tuner
        V4L/DVB (8526): saa7146: fix VIDIOC_ENUM_FMT
        V4L/DVB (8525): fix a few assorted spelling mistakes.
        ...
      58f25071
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6 · c32f1a34
      Linus Torvalds authored
      * git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6:
        sparc: Set CONFIG_HAVE_ARCH_TRACEHOOK
        sparc: Add task_pt_regs().
        sparc: Add call to tracehook_signal_handler().
        sparc: Create and use TIF_NOTIFY_RESUME.
        sparc: Use tracehook routines in syscall_trace().
        sparc64: tracehook: CONFIG_HAVE_ARCH_TRACEHOOK
        sparc: Add user_stack_pointer().
        sparc64: tracehook_signal_handler
        sparc64: tracehook: TIF_NOTIFY_RESUME
        sparc: Add asm/syscall.h
        sparc64: tracehook syscall
        sparc: enable headers_export again
        sparc, sparc64: use arch/sparc/include
      c32f1a34
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 · 4f31f308
      Linus Torvalds authored
      * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
        net: missing bits of net-namespace / sysctl
        ipcomp: Fix warnings after ipcomp consolidation.
        dccp: Add check for truncated ICMPv6 DCCP error packets
        dccp: Fix incorrect length check for ICMPv4 packets
        dccp: Add check for sequence number in ICMPv6 message
        dccp: Fix sequence number check for ICMPv4 packets
        dccp: Bug-Fix - AWL was never updated
        dccp: Allow to distinguish original and retransmitted packets
      4f31f308
    • Randy Dunlap's avatar
      SubmittingPatches: add git pull & diffstat format info · 14863617
      Randy Dunlap authored
      Add git pull command info and diffstat summary info so that we don't
      have to search email archives for it repeatedly.
      Signed-off-by: default avatarRandy Dunlap <randy.dunlap@oracle.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      14863617
    • Stephen Rothwell's avatar
      more sysdev API change fallout - drivers/base/memory.c · 1f07be1c
      Stephen Rothwell authored
      Noticed because of this warning:
      
        drivers/base/memory.c:279: warning: initialization from incompatible pointer type
      Signed-off-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      1f07be1c
    • Thomas Gleixner's avatar
      ACPI/CPUIDLE: prevent setting pm_idle to NULL · b032bf70
      Thomas Gleixner authored
      pm_idle_save resp. pm_idle_old can be NULL when the restore code in
      acpi_processor_cst_has_changed() resp. cpuidle_uninstall_idle_handler()
      is called. This can set pm_idle unconditinally to NULL, which causes the
      kernel to panic when calling pm_idle in the x86 idle code. This was
      covered by an extra check for !pm_idle in the x86 idle code, which was
      removed during the x86 idle code refactoring.
      
      Instead of restoring the pm_idle check in the x86 code prevent the
      acpi/cpuidle code to set pm_idle to NULL.
      
      Reported by: Dhaval Giani http://lkml.org/lkml/2008/7/2/309
      Based on a debug patch from Ingo Molnar
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      b032bf70
    • Linus Torvalds's avatar
      Merge branch 'i2c-for-linus' of git://aeryn.fluff.org.uk/bjdooks/linux · 9ffc1699
      Linus Torvalds authored
      * 'i2c-for-linus' of git://aeryn.fluff.org.uk/bjdooks/linux:
        i2c: Blackfin I2C Driver: Functional power management support
        i2c: Documentation: upgrading clients HOWTO
        i2c: S3C24XX I2C frequency scaling support.
        i2c: i2c_gpio: keep probe resident for hotplugged devices.
        i2c: S3C2410: Pass the I2C bus number via drivers platform data
      9ffc1699
    • David Sterba's avatar
      ipwireless: Preallocate received packet buffers with MRU size · a0138692
      David Sterba authored
      ipwireless: Preallocate received packet buffers with MRU size
      
      Packets are assembled from link size (~300 bytes) up to PPP MRU
      (1500 by default). Try to preallocate full size rather than
      repeatedly advance buffer size by 256 bytes.
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.cz>
      Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      a0138692
    • David Sterba's avatar
      ipwireless: Put packets to pool start · 0f38c47a
      David Sterba authored
      ipwireless: Put packets to pool start
      
      Put packets to pool start, try to reuse cached memory.
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.cz>
      Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      0f38c47a
    • David Sterba's avatar
      ipwireless: Increase PPP outgoing queue size · bee9c7c0
      David Sterba authored
      ipwireless: Increase PPP outgoing queue size
      
      Increase default size of PPP outgoing queue. Currently set to 1, which
      means that a packet quickly following another pushed by PPP must wait
      until hardware actually sends the previous and PPP has to be waken up
      by ppp_wakeup(). This slows down upstream.
      
      Now PPP can push more packets at once which get buffered inside driver
      and pushed immediatelly to hardware when previous packet is out.
      
      Experiments show that size = 10 is quite good for all connection types
      (GPRS/EDGE/UMTS) and gains 4 KB/sec of upload for UMTS for batch uploads.
      Need for higher queue size than 10 occures in only < 0.1 % of cases.
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.cz>
      Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      bee9c7c0
    • David Sterba's avatar
      ipwireless: Explicitly request io and mem regions · 09e491e9
      David Sterba authored
      ipwireless: Explicitly request io and mem regions
      
      Documentation/pcmcia/driver-changes.txt says, that driver should call request_region
      for used memory/io regions since PCMCIA does not do this (since 2.6.8).
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.cz>
      Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      09e491e9
    • David Sterba's avatar
      ipwireless: Constify buffer variables · ff3e990e
      David Sterba authored
      ipwireless: Constify buffer variables
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.cz>
      Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      ff3e990e
    • David Sterba's avatar
      ipwireless: Do not return value from sending funcs · 93110f69
      David Sterba authored
      ipwireless: Do not return value from sending funcs
      
      Do not return value from do_send_fragment and do_send_packet, it's not used.
      The packet size checks are not useful too:
      
      * zero length packet will never be sent, caller always passes packet_header
        size which is either 1 or 3
      * MTU check is done in caller, no need to repeat
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.cz>
      Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      93110f69