1. 27 Dec, 2006 14 commits
  2. 24 Dec, 2006 2 commits
  3. 23 Dec, 2006 5 commits
    • OGAWA Hirofumi's avatar
      [PATCH] arch/i386/pci/mmconfig.c tlb flush fix · 8d1c4819
      OGAWA Hirofumi authored
      We use the fixmap for accessing pci config space in pci_mmcfg_read/write().
      The problem is in pci_exp_set_dev_base(). It is caching a last
      accessed address to avoid calling set_fixmap_nocache() whenever
      pci_mmcfg_read/write() is used.
      
        static inline void pci_exp_set_dev_base(int bus, int devfn)
        {
      	u32 dev_base = base | (bus << 20) | (devfn << 12);
      	if (dev_base != mmcfg_last_accessed_device) {
      		mmcfg_last_accessed_device = dev_base;
      		set_fixmap_nocache(FIX_PCIE_MCFG, dev_base);
      	}
        }
      
                  cpu0                                        cpu1
        ---------------------------------------------------------------------------
          pci_mmcfg_read("device-A")
              pci_exp_set_dev_base()
                  set_fixmap_nocache()
                                                    pci_mmcfg_read("device-B")
                                                        pci_exp_set_dev_base()
                                                            set_fixmap_nocache()
          pci_mmcfg_read("device-B")
              pci_exp_set_dev_base()
                  /* doesn't flush tlb */
      
      But if cpus accessed the above order, the second pci_mmcfg_read() on
      cpu0 doesn't flush the TLB, because "mmcfg_last_accessed_device" is
      device-B.  So, second pci_mmcfg_read() on cpu0 accesses a device-A via
      a previous TLB cache. This problem became the cause of several strange
      behavior.
      
      This patches fixes this situation by adds "mmcfg_last_accessed_cpu" check.
      
      [ Alternatively, we could make a per-cpu mapping area or something. Not
        that it's probably worth it, but if we wanted to avoid all locking and
        instead just disable preemption, that would be the way to go. --Linus ]
      Signed-off-by: default avatarOGAWA Hirofumi <hogawa@miraclelinux.com>
      Signed-off-by: default avatarOGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      8d1c4819
    • Ingo Molnar's avatar
      [PATCH] suspend: fix suspend on single-CPU systems · e1d9fd2e
      Ingo Molnar authored
      Clark Williams reported that suspend doesnt work on his laptop on
      2.6.20-rc1-rt kernels. The bug was introduced by the following cleanup
      commit:
      
       commit 112cecb2
       Author: Siddha, Suresh B <suresh.b.siddha@intel.com>
       Date:   Wed Dec 6 20:34:31 2006 -0800
      
          [PATCH] suspend: don't change cpus_allowed for task initiating the suspend
      
      because with this change 'error' is not initialized to 0 anymore, if
      there are no other online CPUs. (i.e. if the system is single-CPU).
      
      the fix is the initialize it to 0. The really weird thing is that my
      version of gcc does not warn about this non-initialized variable
      situation ...
      
      (also fix the kernel printk in the error branch, it was missing a
       newline)
      Reported-by: default avatarClark Williams <williams@redhat.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      e1d9fd2e
    • Linus Torvalds's avatar
      Fix reiserfs after "test_clear_page_dirty()" removal · ffaa8200
      Linus Torvalds authored
      Thanks to Len Brown for testing this fix, since while they have in the
      past, none of my machines run reiserfs at the moment.
      
      Cc: Vladimir V. Saveliev <vs@namesys.com>
      Acked-by: default avatarLen Brown <lenb@kernel.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      ffaa8200
    • Linus Torvalds's avatar
      Clean up and export cancel_dirty_page() to modules · 8368e328
      Linus Torvalds authored
      Make cancel_dirty_page() act more like all the other dirty and writeback
      accounting functions: test for "mapping" being NULL, and do the
      NR_FILE_DIRY accounting purely based on mapping_cap_account_dirty()).
      
      Also, add it to the exports, so that modular filesystems can use it.
      Acked-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      8368e328
    • Linus Torvalds's avatar
      Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6 · 18ed1c05
      Linus Torvalds authored
      * 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6: (68 commits)
        ACPI: replace kmalloc+memset with kzalloc
        ACPI: Add support for acpi_load_table/acpi_unload_table_id
        fbdev: update after backlight argument change
        ACPI: video: Add dev argument for backlight_device_register
        ACPI: Implement acpi_video_get_next_level()
        ACPI: Kconfig - depend on PM rather than selecting it
        ACPI: fix NULL check in drivers/acpi/osl.c
        ACPI: make drivers/acpi/ec.c:ec_ecdt static
        ACPI: prevent processor module from loading on failures
        ACPI: fix single linked list manipulation
        ACPI: ibm_acpi: allow clean removal
        ACPI: fix git automerge failure
        ACPI: ibm_acpi: respond to workqueue update
        ACPI: dock: add uevent to indicate change in device status
        ACPI: ec: Lindent once again
        ACPI: ec: Change #define to enums there possible.
        ACPI: ec: Style changes.
        ACPI: ec: Acquire Global Lock under EC mutex.
        ACPI: ec: Drop udelay() from poll mode. Loop by reading status field instead.
        ACPI: ec: Rename gpe_bit to gpe
        ...
      18ed1c05
  4. 22 Dec, 2006 19 commits
    • Marcel Holtmann's avatar
      [PATCH] Call init_timer() for ISDN PPP CCP reset state timer · dab6df63
      Marcel Holtmann authored
      The function isdn_ppp_ccp_reset_alloc_state() sets ->timer.function
      and ->timer.data and later on calls add_timer() with no init_timer()
      ever done.
      
      Noted by Al Viro.
      Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Karsten Keil <kkeil@suse.de>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      dab6df63
    • Linus Torvalds's avatar
      Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 · f2a67a57
      Linus Torvalds authored
      * master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6:
        [UDP]: Fix reversed logic in udp_get_port().
        [IPV6]: Dumb typo in generic csum_ipv6_magic()
        [SCTP]: make 2 functions static
        [SCTP]: Fix typo adaption -> adaptation as per the latest API draft.
        [SCTP]: Don't export include/linux/sctp.h to userspace.
        [TCP]: Fix ambiguity in the `before' relation.
        [ATM] drivers/atm/fore200e.c: Cleanups.
        [ATM]: Remove dead ATM_TNETA1570 option.
        NetLabel: correctly fill in unused CIPSOv4 level and category mappings
        NetLabel: perform input validation earlier on CIPSOv4 DOI add ops
      f2a67a57
    • Jens Axboe's avatar
      [PATCH] cfq-iosched: tighten allow merge criteria · 719d3402
      Jens Axboe authored
      The logic in cfq_allow_merge() wasn't clear enough - basically allow
      merging for the same queues only.  Do a fast check for 'rq and bio both
      sync/async' before doing the cfqq hash lookup.
      
      This is verified to work with the fixed elv_try_merge() from commit
      bb4067e3.
      Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      719d3402
    • David S. Miller's avatar
      [UDP]: Fix reversed logic in udp_get_port(). · 5c668704
      David S. Miller authored
      When this code was converted to use sk_for_each() the
      logic for the "best hash chain length" code was reversed,
      breaking everything.
      
      The original code was of the form:
      
      			size = 0;
      			do {
      				if (++size >= best_size_so_far)
      					goto next;
      			} while ((sk = sk->next) != NULL);
      			best_size_so_far = size;
      			best = result;
      		next:;
      
      and this got converted into:
      
      			sk_for_each(sk2, node, head)
      				if (++size < best_size_so_far) {
      					best_size_so_far = size;
      					best = result;
      				}
      
      Which does something very very different from the original.
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      5c668704
    • Al Viro's avatar
      [IPV6]: Dumb typo in generic csum_ipv6_magic() · b23e3536
      Al Viro authored
      ... duh
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b23e3536
    • Adrian Bunk's avatar
      [SCTP]: make 2 functions static · 24123186
      Adrian Bunk authored
      This patch makes the following needlessly global functions static:
      - ipv6.c: sctp_inet6addr_event()
      - protocol.c: sctp_inetaddr_event()
      Signed-off-by: default avatarAdrian Bunk <bunk@stusta.de>
      Signed-off-by: default avatarSridhar Samudrala <sri@us.ibm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      24123186
    • Ivan Skytte Jorgensen's avatar
    • Sridhar Samudrala's avatar
      [SCTP]: Don't export include/linux/sctp.h to userspace. · a3f7f142
      Sridhar Samudrala authored
      This file contains protocol definitions and there are no SCTP apps
      that use this file.
      Signed-off-by: default avatarSridhar Samudrala <sri@us.ibm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a3f7f142
    • Gerrit Renker's avatar
      [TCP]: Fix ambiguity in the `before' relation. · 9a036b9c
      Gerrit Renker authored
      While looking at DCCP sequence numbers, I stumbled over a problem with
      the following definition of before in tcp.h:
      
      static inline int before(__u32 seq1, __u32 seq2)
      {
              return (__s32)(seq1-seq2) < 0;
      }
      
      Problem: This definition suffers from an an ambiguity, i.e. always
      
                 before(a, (a + 2^31) % 2^32)) = 1
                 before((a + 2^31) % 2^32), a) = 1
      
               In text: when the difference between a and b amounts to 2^31,
               a is always considered `before' b, the function can not decide.
               The reason is that implicitly 0 is `before' 1 ... 2^31-1 ... 2^31
      
      Solution: There is a simple fix, by defining before in such a way that
                0 is no longer `before' 2^31, i.e. 0 `before' 1 ... 2^31-1
                By not using the middle between 0 and 2^32, before can be made
                unambiguous.
                This is achieved by testing whether seq2-seq1 > 0 (using signed
                32-bit arithmetic).
      
      I attach a patch to codify this. Also the `after' relation is basically
      a redefinition of `before', it is now defined as a macro after before.
      Signed-off-by: default avatarGerrit Renker <gerrit@erg.abdn.ac.uk>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9a036b9c
    • Adrian Bunk's avatar
      [ATM] drivers/atm/fore200e.c: Cleanups. · 1f8a5fb8
      Adrian Bunk authored
      This patch contains the following transformations from custom functions
      to standard kernel version:
      - fore200e_kmalloc() -> kzalloc()
      - fore200e_kfree() -> kfree()
      - fore200e_swap() -> cpu_to_be32()
      Signed-off-by: default avatarAdrian Bunk <bunk@stusta.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1f8a5fb8
    • Adrian Bunk's avatar
      [ATM]: Remove dead ATM_TNETA1570 option. · 52a91071
      Adrian Bunk authored
      This patch removes the unconverted ATM_TNETA1570 option that also lacks
      any code in the kernel.
      Signed-off-by: default avatarAdrian Bunk <bunk@stusta.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      52a91071
    • Paul Moore's avatar
      NetLabel: correctly fill in unused CIPSOv4 level and category mappings · caff5b6a
      Paul Moore authored
      Back when the original NetLabel patches were being changed to use Netlink
      attributes correctly some code was accidentially dropped which set all of the
      undefined CIPSOv4 level and category mappings to a sentinel value.  The result
      is the mappings data in the kernel contains bogus mappings which always map to
      zero.  This patch restores the old/correct behavior by initializing the mapping
      data to the correct sentinel value.
      Signed-off-by: default avatarPaul Moore <paul.moore@hp.com>
      Signed-off-by: default avatarJames Morris <jmorris@namei.org>
      caff5b6a
    • Paul Moore's avatar
      NetLabel: perform input validation earlier on CIPSOv4 DOI add ops · 1fd2a25b
      Paul Moore authored
      There are a couple of cases where the user input for a CIPSOv4 DOI add
      operation was not being done soon enough; the result was unexpected behavior
      which was resulting in oops/panics/lockups on some platforms.  This patch moves
      the existing input validation code earlier in the code path to protect against
      bogus user input.
      Signed-off-by: default avatarPaul Moore <paul.moore@hp.com>
      Signed-off-by: default avatarJames Morris <jmorris@namei.org>
      1fd2a25b
    • Peter Zijlstra's avatar
      [PATCH] Fix up page_mkclean_one(): virtual caches, s390 · c2fda5fe
      Peter Zijlstra authored
       - add flush_cache_page() for all those virtual indexed cache
         architectures.
      
       - handle s390.
      Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      c2fda5fe
    • Peter Korsgaard's avatar
      [PATCH] serial/uartlite: Only enable port if request_port succeeded · e21654a7
      Peter Korsgaard authored
      The uartlite driver used to always enable the port even if request_port
      failed causing havoc. This patch fixes it.
      Signed-off-by: default avatarPeter Korsgaard <jacmet@sunsite.dk>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      e21654a7
    • Eric W. Biederman's avatar
      [PATCH] Fix reparenting to the same thread group. (take 2) · b2b2cbc4
      Eric W. Biederman authored
      This patch fixes the case when we reparent to a different thread in the
      same thread group.  This modifies the code so that we do not send
      signals and do not change the signal to send to SIGCHLD unless we have
      change the thread group of our parents.  It also suppresses sending
      pdeath_sig in this cas as well since the result of geppid doesn't
      change.
      
      Thanks to Oleg for spotting my bug of only fixing this for non-ptraced
      tasks.
      Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Albert Cahalan <acahalan@gmail.com>
      Cc: Andrew Morton <akpm@osdl.org>
      Cc: Roland McGrath <roland@redhat.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Coywolf Qi Hunt <qiyong@fc-cn.com>
      Acked-by: default avatarOleg Nesterov <oleg@tv-sign.ru>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      b2b2cbc4
    • Andrew Morton's avatar
      [PATCH] build compile.h earlier · ef129412
      Andrew Morton authored
      compile.h is created super-late in the build.  But proc_misc.c want to include
      it, and it's generally not sane to have a header file in include/linux be
      created at the end of the build: it's either not present or, worse, wrong for
      most of the build.
      
      So the patch arranges for compile.h to be built at the start of the build
      process.  It also consolidates the compile.h rules with those for version.h
      and utsname.h, so they all get built together.
      
      I hope.  My chances of having got this right are about 2%.
      
      Cc: Sam Ravnborg <sam@ravnborg.org>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      ef129412
    • Ingo Molnar's avatar
      [PATCH] sched: fix bad missed wakeups in the i386, x86_64, ia64, ACPI and APM idle code · 0888f06a
      Ingo Molnar authored
      Fernando Lopez-Lezcano reported frequent scheduling latencies and audio
      xruns starting at the 2.6.18-rt kernel, and those problems persisted all
      until current -rt kernels. The latencies were serious and unjustified by
      system load, often in the milliseconds range.
      
      After a patient and heroic multi-month effort of Fernando, where he
      tested dozens of kernels, tried various configs, boot options,
      test-patches of mine and provided latency traces of those incidents, the
      following 'smoking gun' trace was captured by him:
      
                       _------=> CPU#
                      / _-----=> irqs-off
                     | / _----=> need-resched
                     || / _---=> hardirq/softirq
                     ||| / _--=> preempt-depth
                     |||| /
                     |||||     delay
         cmd     pid ||||| time  |   caller
            \   /    |||||   \   |   /
        IRQ_19-1479  1D..1    0us : __trace_start_sched_wakeup (try_to_wake_up)
        IRQ_19-1479  1D..1    0us : __trace_start_sched_wakeup <<...>-5856> (37 0)
        IRQ_19-1479  1D..1    0us : __trace_start_sched_wakeup (c01262ba 0 0)
        IRQ_19-1479  1D..1    0us : resched_task (try_to_wake_up)
        IRQ_19-1479  1D..1    0us : __spin_unlock_irqrestore (try_to_wake_up)
        ...
        <idle>-0     1...1   11us!: default_idle (cpu_idle)
        ...
        <idle>-0     0Dn.1  602us : smp_apic_timer_interrupt (c0103baf 1 0)
        ...
         <...>-5856  0D..2  618us : __switch_to (__schedule)
         <...>-5856  0D..2  618us : __schedule <<idle>-0> (20 162)
         <...>-5856  0D..2  619us : __spin_unlock_irq (__schedule)
         <...>-5856  0...1  619us : trace_stop_sched_switched (__schedule)
         <...>-5856  0D..1  619us : trace_stop_sched_switched <<...>-5856> (37 0)
      
      what is visible in this trace is that CPU#1 ran try_to_wake_up() for
      PID:5856, it placed PID:5856 on CPU#0's runqueue and ran resched_task()
      for CPU#0. But it decided to not send an IPI that no CPU - due to
      TS_POLLING. But CPU#0 never woke up after its NEED_RESCHED bit was set,
      and only rescheduled to PID:5856 upon the next lapic timer IRQ. The
      result was a 600+ usecs latency and a missed wakeup!
      
      the bug turned out to be an idle-wakeup bug introduced into the mainline
      kernel this summer via an optimization in the x86_64 tree:
      
          commit 495ab9c0
          Author: Andi Kleen <ak@suse.de>
          Date:   Mon Jun 26 13:59:11 2006 +0200
      
          [PATCH] i386/x86-64/ia64: Move polling flag into thread_info_status
      
          During some profiling I noticed that default_idle causes a lot of
          memory traffic. I think that is caused by the atomic operations
          to clear/set the polling flag in thread_info. There is actually
          no reason to make this atomic - only the idle thread does it
          to itself, other CPUs only read it. So I moved it into ti->status.
      
      the problem is this type of change:
      
              if (!hlt_counter && boot_cpu_data.hlt_works_ok) {
      -               clear_thread_flag(TIF_POLLING_NRFLAG);
      +               current_thread_info()->status &= ~TS_POLLING;
                      smp_mb__after_clear_bit();
                      while (!need_resched()) {
                              local_irq_disable();
      
      this changes clear_thread_flag() to an explicit clearing of TS_POLLING.
      clear_thread_flag() is defined as:
      
              clear_bit(flag, &ti->flags);
      
      and clear_bit() is a LOCK-ed atomic instruction on all x86 platforms:
      
        static inline void clear_bit(int nr, volatile unsigned long * addr)
        {
                __asm__ __volatile__( LOCK_PREFIX
                        "btrl %1,%0"
      
      hence smp_mb__after_clear_bit() is defined as a simple compile barrier:
      
        #define smp_mb__after_clear_bit()       barrier()
      
      but the explicit TS_POLLING clearing introduced by the patch:
      
      +               current_thread_info()->status &= ~TS_POLLING;
      
      is not an atomic op! So the clearing of the TS_POLLING bit is freely
      reorderable with the reading of the NEED_RESCHED bit - and both now
      reside in different memory addresses.
      
      CPU idle wakeup very much depends on ordered memory ops, the clearing of
      the TS_POLLING flag must always be done before we test need_resched()
      and hit the idle instruction(s). [Symmetrically, the wakeup code needs
      to set NEED_RESCHED before it tests the TS_POLLING flag, so memory
      ordering is paramount.]
      
      Fernando's dual-core Athlon64 system has a sufficiently advanced memory
      ordering model so that it triggered this scenario very often.
      
      ( And it also turned out that the reason why these latencies never
        triggered on my testsystems is that i routinely use idle=poll, which
        was the only idle variant not affected by this bug. )
      
      The fix is to change the smp_mb__after_clear_bit() to an smp_mb(), to
      act as an absolute barrier between the TS_POLLING write and the
      NEED_RESCHED read. This affects almost all idling methods (default,
      ACPI, APM), on all 3 x86 architectures: i386, x86_64, ia64.
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      Tested-by: default avatarFernando Lopez-Lezcano <nando@ccrma.Stanford.EDU>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      0888f06a
    • Hisashi Hifumi's avatar
      [PATCH] jbd: wait for already submitted t_sync_datalist buffer to complete · 6f5a9da1
      Hisashi Hifumi authored
      In the current jbd code, if a buffer on BJ_SyncData list is dirty and not
      locked, the buffer is refiled to BJ_Locked list, submitted to the IO and
      waited for IO completion.
      
      But the fsstress test showed the case that when a buffer was already
      submitted to the IO just before the buffer_dirty(bh) check, the buffer was
      not waited for IO completion.
      
      Following patch solves this problem.  If it is assumed that a buffer is
      submitted to the IO before the buffer_dirty(bh) check and still being
      written to disk, this buffer is refiled to BJ_Locked list.
      Signed-off-by: default avatarHisashi Hifumi <hifumi.hisashi@oss.ntt.co.jp>
      Cc: Jan Kara <jack@ucw.cz>
      Cc: "Stephen C. Tweedie" <sct@redhat.com>
      Cc: <linux-ext4@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      6f5a9da1