1. 19 Oct, 2016 1 commit
    • Tejun Heo's avatar
      workqueue: move wq_numa_init() to workqueue_init() · 2186d9f9
      Tejun Heo authored
      While splitting up workqueue initialization into two parts,
      ac8f73400782 ("workqueue: make workqueue available early during boot")
      put wq_numa_init() into workqueue_init_early().  Unfortunately, on
      some archs including power and arm64, cpu to node mapping isn't yet
      established by the time the early init is called leading to incorrect
      NUMA initialization and subsequently the following oops due to zero
      cpumask on node-specific unbound pools.
      
        Unable to handle kernel paging request for data at address 0x00000038
        Faulting instruction address: 0xc0000000000fc0cc
        Oops: Kernel access of bad area, sig: 11 [#1]
        SMP NR_CPUS=2048 NUMA PowerNV
        Modules linked in:
        CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.8.0-compiler_gcc-6.2.0-next-20161005 #94
        task: c0000007f5400000 task.stack: c000001ffc084000
        NIP: c0000000000fc0cc LR: c0000000000ed928 CTR: c0000000000fbfd0
        REGS: c000001ffc087780 TRAP: 0300   Not tainted  (4.8.0-compiler_gcc-6.2.0-next-20161005)
        MSR: 9000000002009033 <SF,HV,VEC,EE,ME,IR,DR,RI,LE>  CR: 48000424  XER: 00000000
        CFAR: c0000000000089dc DAR: 0000000000000038 DSISR: 40000000 SOFTE: 0
        GPR00: c0000000000ed928 c000001ffc087a00 c000000000e63200 c000000010d6d600
        GPR04: c0000007f5409200 0000000000000021 000000000748e08c 000000000000001f
        GPR08: 0000000000000000 0000000000000021 000000000748f1f8 0000000000000000
        GPR12: 0000000028000422 c00000000fb80000 c00000000000e0c8 0000000000000000
        GPR16: 0000000000000000 0000000000000000 0000000000000021 0000000000000001
        GPR20: ffffffffafb50401 0000000000000000 c000000010d6d600 000000000000ba7e
        GPR24: 000000000000ba7e c000000000d8bc58 afb504000afb5041 0000000000000001
        GPR28: 0000000000000000 0000000000000004 c0000007f5409280 0000000000000000
        NIP [c0000000000fc0cc] enqueue_task_fair+0xfc/0x18b0
        LR [c0000000000ed928] activate_task+0x78/0xe0
        Call Trace:
        [c000001ffc087a00] [c0000007f5409200] 0xc0000007f5409200 (unreliable)
        [c000001ffc087b10] [c0000000000ed928] activate_task+0x78/0xe0
        [c000001ffc087b50] [c0000000000ede58] ttwu_do_activate+0x68/0xc0
        [c000001ffc087b90] [c0000000000ef1b8] try_to_wake_up+0x208/0x4f0
        [c000001ffc087c10] [c0000000000d3484] create_worker+0x144/0x250
        [c000001ffc087cb0] [c000000000cd72d0] workqueue_init+0x124/0x150
        [c000001ffc087d00] [c000000000cc0e74] kernel_init_freeable+0x158/0x360
        [c000001ffc087dc0] [c00000000000e0e4] kernel_init+0x24/0x160
        [c000001ffc087e30] [c00000000000bfa0] ret_from_kernel_thread+0x5c/0xbc
        Instruction dump:
        62940401 3b800000 3aa00000 7f17c378 3a600001 3b600001 60000000 60000000
        60420000 72490021 ebfe0150 2f890001 <ebbf0038> 419e0de0 7fbee840 419e0e58
        ---[ end trace 0000000000000000 ]---
      
      Fix it by moving wq_numa_init() to workqueue_init().  As this means
      that the early intialization may not have full NUMA info for per-cpu
      pools and ignores NUMA affinity for unbound pools, fix them up from
      workqueue_init() after wq_numa_init().
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Reported-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: http://lkml.kernel.org/r/87twck5wqo.fsf@concordia.ellerman.id.au
      Fixes: ac8f73400782 ("workqueue: make workqueue available early during boot")
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      2186d9f9
  2. 17 Sep, 2016 7 commits
    • Tejun Heo's avatar
      workqueue: remove keventd_up() · 863b710b
      Tejun Heo authored
      keventd_up() no longer has in-kernel users.  Remove it and make
      wq_online static.
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      863b710b
    • Tejun Heo's avatar
      debugobj, workqueue: remove keventd_up() usage · 7092dff2
      Tejun Heo authored
      Now that workqueue can handle work item queueing from very early
      during boot, there is no need to gate schedule_work() while
      !keventd_up().  Remove it.
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      7092dff2
    • Tejun Heo's avatar
      slab, workqueue: remove keventd_up() usage · eac0337a
      Tejun Heo authored
      Now that workqueue can handle work item queueing from very early
      during boot, there is no need to gate schedule_delayed_work_on() while
      !keventd_up().  Remove it.
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Cc: Christoph Lameter <cl@linux.com>
      Cc: Pekka Enberg <penberg@kernel.org>
      Cc: David Rientjes <rientjes@google.com>
      Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: linux-mm@kvack.org
      eac0337a
    • Tejun Heo's avatar
      power, workqueue: remove keventd_up() usage · a81f80f3
      Tejun Heo authored
      Now that workqueue can handle work item queueing/cancelling from very
      early during boot, there is no need to gate cancel_delayed_work_sync()
      while !keventd_up().  Remove it.
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Acked-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Cc: Qiao Zhou <qiaozhou@asrmicro.com>
      a81f80f3
    • Tejun Heo's avatar
      tty, workqueue: remove keventd_up() usage · 1bb08024
      Tejun Heo authored
      Now that workqueue can handle work item queueing from very early
      during boot, there is no need to delay schedule_work() while
      !keventd_up().  Remove it.
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Cc: Jiri Slaby <jslaby@suse.cz>
      Cc: Alan Cox <alan@linux.intel.com>
      1bb08024
    • Tejun Heo's avatar
      mce, workqueue: remove keventd_up() usage · a2c2727d
      Tejun Heo authored
      Now that workqueue can handle work item queueing from very early
      during boot, there is no need to gate schedule_work() with
      keventd_up().  Remove it.
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: linux-edac@vger.kernel.org
      a2c2727d
    • Tejun Heo's avatar
      workqueue: make workqueue available early during boot · 3347fa09
      Tejun Heo authored
      Workqueue is currently initialized in an early init call; however,
      there are cases where early boot code has to be split and reordered to
      come after workqueue initialization or the same code path which makes
      use of workqueues is used both before workqueue initailization and
      after.  The latter cases have to gate workqueue usages with
      keventd_up() tests, which is nasty and easy to get wrong.
      
      Workqueue usages have become widespread and it'd be a lot more
      convenient if it can be used very early from boot.  This patch splits
      workqueue initialization into two steps.  workqueue_init_early() which
      sets up the basic data structures so that workqueues can be created
      and work items queued, and workqueue_init() which actually brings up
      workqueues online and starts executing queued work items.  The former
      step can be done very early during boot once memory allocation,
      cpumasks and idr are initialized.  The latter right after kthreads
      become available.
      
      This allows work item queueing and canceling from very early boot
      which is what most of these use cases want.
      
      * As systemd_wq being initialized doesn't indicate that workqueue is
        fully online anymore, update keventd_up() to test wq_online instead.
        The follow-up patches will get rid of all its usages and the
        function itself.
      
      * Flushing doesn't make sense before workqueue is fully initialized.
        The flush functions trigger WARN and return immediately before fully
        online.
      
      * Work items are never in-flight before fully online.  Canceling can
        always succeed by skipping the flush step.
      
      * Some code paths can no longer assume to be called with irq enabled
        as irq is disabled during early boot.  Use irqsave/restore
        operations instead.
      
      v2: Watchdog init, which requires timer to be running, moved from
          workqueue_init_early() to workqueue_init().
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Suggested-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Link: http://lkml.kernel.org/r/CA+55aFx0vPuMuxn00rBSM192n-Du5uxy+4AvKa0SBSOVJeuCGg@mail.gmail.com
      3347fa09
  3. 16 Sep, 2016 1 commit
  4. 14 Sep, 2016 3 commits
    • Linus Torvalds's avatar
      Merge branch 'uaccess-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs · 77e5bdf9
      Linus Torvalds authored
      Pull uaccess fixes from Al Viro:
       "Fixes for broken uaccess primitives - mostly lack of proper zeroing
        in copy_from_user()/get_user()/__get_user(), but for several
        architectures there's more (broken clear_user() on frv and
        strncpy_from_user() on hexagon)"
      
      * 'uaccess-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (28 commits)
        avr32: fix copy_from_user()
        microblaze: fix __get_user()
        microblaze: fix copy_from_user()
        m32r: fix __get_user()
        blackfin: fix copy_from_user()
        sparc32: fix copy_from_user()
        sh: fix copy_from_user()
        sh64: failing __get_user() should zero
        score: fix copy_from_user() and friends
        score: fix __get_user/get_user
        s390: get_user() should zero on failure
        ppc32: fix copy_from_user()
        parisc: fix copy_from_user()
        openrisc: fix copy_from_user()
        nios2: fix __get_user()
        nios2: copy_from_user() should zero the tail of destination
        mn10300: copy_from_user() should zero on access_ok() failure...
        mn10300: failing __get_user() and get_user() should zero
        mips: copy_from_user() must zero the destination on access_ok() failure
        ARC: uaccess: get_user to zero out dest in cause of fault
        ...
      77e5bdf9
    • Linus Torvalds's avatar
      Merge tag 'for-linus-4.8b-rc6-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip · b8f26e88
      Linus Torvalds authored
      Pull xen regression fix from David Vrabel:
       "Fix SMP boot in arm guests"
      
      * tag 'for-linus-4.8b-rc6-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip:
        arm/xen: fix SMP guests boot
      b8f26e88
    • Vitaly Kuznetsov's avatar
      arm/xen: fix SMP guests boot · de75abbe
      Vitaly Kuznetsov authored
      Commit 88e957d6 ("xen: introduce xen_vcpu_id mapping") broke SMP
      ARM guests on Xen. When FIFO-based event channels are in use (this is
      the default), evtchn_fifo_alloc_control_block() is called on
      CPU_UP_PREPARE event and this happens before we set up xen_vcpu_id
      mapping in xen_starting_cpu. Temporary fix the issue by setting direct
      Linux CPU id <-> Xen vCPU id mapping for all possible CPUs at boot. We
      don't currently support kexec/kdump on Xen/ARM so these ids always
      match.
      
      In future, we have several ways to solve the issue, e.g.:
      
      - Eliminate all hypercalls from CPU_UP_PREPARE, do them from the
        starting CPU. This can probably be done for both x86 and ARM and, if
        done, will allow us to get Xen's idea of vCPU id from CPUID/MPIDR on
        the starting CPU directly, no messing with ACPI/device tree
        required.
      
      - Save vCPU id information from ACPI/device tree on ARM and use it to
        initialize xen_vcpu_id mapping. This is the same trick we currently
        do on x86.
      Reported-by: default avatarJulien Grall <julien.grall@arm.com>
      Tested-by: default avatarWei Chen <Wei.Chen@arm.com>
      Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
      Acked-by: default avatarStefano Stabellini <sstabellini@kernel.org>
      Signed-off-by: default avatarDavid Vrabel <david.vrabel@citrix.com>
      de75abbe
  5. 13 Sep, 2016 28 commits