1. 14 Apr, 2017 2 commits
  2. 31 Mar, 2017 2 commits
  3. 23 Mar, 2017 9 commits
    • Tom Hromatka's avatar
      sysrq: Reset the watchdog timers while displaying high-resolution timers · 01070427
      Tom Hromatka authored
      On systems with a large number of CPUs, running sysrq-<q> can cause
      watchdog timeouts.  There are two slow sections of code in the sysrq-<q>
      path in timer_list.c.
      
      1. print_active_timers() - This function is called by print_cpu() and
         contains a slow goto loop.  On a machine with hundreds of CPUs, this
         loop took approximately 100ms for the first CPU in a NUMA node.
         (Subsequent CPUs in the same node ran much quicker.)  The total time
         to print all of the CPUs is ultimately long enough to trigger the
         soft lockup watchdog.
      
      2. print_tickdevice() - This function outputs a large amount of textual
         information.  This function also took approximately 100ms per CPU.
      
      Since sysrq-<q> is not a performance critical path, there should be no
      harm in touching the nmi watchdog in both slow sections above.  Touching
      it in just one location was insufficient on systems with hundreds of
      CPUs as occasional timeouts were still observed during testing.
      
      This issue was observed on an Oracle T7 machine with 128 CPUs, but I
      anticipate it may affect other systems with similarly large numbers of
      CPUs.
      Signed-off-by: default avatarTom Hromatka <tom.hromatka@oracle.com>
      Reviewed-by: default avatarRob Gardner <rob.gardner@oracle.com>
      Signed-off-by: John Stultz's avatarJohn Stultz <john.stultz@linaro.org>
      01070427
    • David Engraf's avatar
      timers, sched_clock: Update timeout for clock wrap · 1b8955bc
      David Engraf authored
      The scheduler clock framework may not use the correct timeout for the clock
      wrap. This happens when a new clock driver calls sched_clock_register()
      after the kernel called sched_clock_postinit(). In this case the clock wrap
      timeout is too long thus sched_clock_poll() is called too late and the clock
      already wrapped.
      
      On my ARM system the scheduler was no longer scheduling any other task than
      the idle task because the sched_clock() wrapped.
      Signed-off-by: default avatarDavid Engraf <david.engraf@sysgo.com>
      Signed-off-by: John Stultz's avatarJohn Stultz <john.stultz@linaro.org>
      1b8955bc
    • John Stultz's avatar
      MAINTAINERS: Add Stephen Boyd as timekeeping reviewer · e1c09219
      John Stultz authored
      After showing expertise and presenting on the timekeeping
      subsystem at ELC[1], Stephen clearly should be included in
      the maintainer list.
      
      [1] https://www.youtube.com/watch?v=Puv4mW55bF8Acked-by: default avatarStephen Boyd <sboyd@codeaurora.org>
      Signed-off-by: John Stultz's avatarJohn Stultz <john.stultz@linaro.org>
      e1c09219
    • Nicolai Stange's avatar
      clockevents: Make clockevents_config() static · 0695bd99
      Nicolai Stange authored
      A clockevent device's rate should be configured before or at registration
      and changed afterwards through clockevents_update_freq() only.
      
      For the configuration at registration, we already have
      clockevents_config_and_register().
      
      Right now, there are no clockevents_config() users outside of the
      clockevents core.
      
      To mitigiate the risk of drivers errorneously reconfiguring their rates
      through clockevents_config() *after* device registration, make
      clockevents_config() static.
      Signed-off-by: default avatarNicolai Stange <nicstange@gmail.com>
      Signed-off-by: John Stultz's avatarJohn Stultz <john.stultz@linaro.org>
      0695bd99
    • Nicolai Stange's avatar
      clocksource: h8300_timer8: Don't reset rate in ->set_state_oneshot() · a17e0178
      Nicolai Stange authored
      With the upcoming NTP correction related rate adjustments to be implemented
      in the clockevents core, the latter needs to get informed about every rate
      change of a clockevent device made after its registration.
      
      Currently, h8300_timer8 violates this requirement in that it registers its
      clockevent device with the correct rate, but resets its ->mult and ->rate
      values in timer8_clock_event_start(), called from its ->set_state_oneshot()
      function.
      
      It seems like
        commit 4633f4ca ("clocksource/drivers/h8300: Cleanup startup and
                              remove module code."),
      which introduced the rate initialization at registration, missed to remove
      the manual setting of ->mult and ->shift from timer8_clock_event_start().
      
      Purge the setting of ->mult, ->shift, ->min_delta_ns and ->max_delta_ns
      from timer8_clock_event_start().
      Signed-off-by: default avatarNicolai Stange <nicstange@gmail.com>
      Signed-off-by: John Stultz's avatarJohn Stultz <john.stultz@linaro.org>
      a17e0178
    • Nicolai Stange's avatar
      clocksource: em_sti: Compute rate before registration · 4e53aa2f
      Nicolai Stange authored
      With the upcoming NTP correction related rate adjustments to be implemented
      in the clockevents core, the latter needs to get informed about every rate
      change of a clockevent device made after its registration.
      
      Currently, em_sti violates this requirement in that it registers its
      clockevent device with a dummy rate and sets its final rate through
      clockevents_config() called from its ->set_state_oneshot().
      
      This patch moves the setting of the clockevent device's rate to its
      registration.
      
      I checked all current em_sti users in arch/arm/mach-shmobile and right now,
      none of them changes any rate in any clock tree relevant to em_sti after
      their respective time_init(). Since all em_sti instances are created after
      time_init(), none of them should ever observe any clock rate changes.
      
      - Determine the ->rate value in em_sti_probe() at device probing rather
        than at first usage.
      - Set the clockevent device's rate at its registration.
      - Although not strictly necessary for the upcoming clockevent core changes,
        set the clocksource's rate at its registration for consistency.
      Signed-off-by: default avatarNicolai Stange <nicstange@gmail.com>
      Signed-off-by: John Stultz's avatarJohn Stultz <john.stultz@linaro.org>
      4e53aa2f
    • Nicolai Stange's avatar
      clocksource: em_sti: Split clock prepare and enable steps · 3814ae09
      Nicolai Stange authored
      Currently, the em_sti driver prepares and enables the needed clock in
      em_sti_enable(), potentially called through its clockevent device's
      ->set_state_oneshot().
      
      However, the clk_prepare() step may sleep whereas tick_program_event() and
      thus, ->set_state_oneshot(), can be called in atomic context.
      
      Split the clk_prepare_enable() in em_sti_enable() into two steps:
      - prepare the clock at device probing via clk_prepare()
      - and enable it in em_sti_enable() via clk_enable().
      Slightly reorder resource initialization in em_sti_probe() in order to
      facilitate error handling in later patches.
      Signed-off-by: default avatarNicolai Stange <nicstange@gmail.com>
      Signed-off-by: John Stultz's avatarJohn Stultz <john.stultz@linaro.org>
      3814ae09
    • Nicolai Stange's avatar
      clocksource: sh_tmu: Compute rate before registration again · c3c0a20d
      Nicolai Stange authored
      With the upcoming NTP correction related rate adjustments to be implemented
      in the clockevents core, the latter needs to get informed about every rate
      change of a clockevent device made after its registration.
      
      Currently, sh_tmu violates this requirement in that it registers its
      clockevent device with a dummy rate and sets its final rate through
      clockevents_config() called from its ->set_state_oneshot() and
      ->set_state_periodic() functions respectively.
      
      This patch moves the setting of the clockevent device's rate to its
      registration.
      
      Note that there has been some back and forth regarding this question with
      respect to the clocksource also provided by this driver:
        commit 66f49121 ("clocksource: sh_tmu: compute mult and shift before
                              registration")
      moves the rate determination from the clocksource's ->enable() function to
      before its registration. OTOH, the later
        commit 0aeac458 ("clocksource: sh_tmu: __clocksource_updatefreq_hz()
                              update")
      basically reverts this, saying
        "Without this patch the old code uses clocksource_register() together
         with a hack that assumes a never changing clock rate."
      
      However, I checked all current sh_tmu users in arch/sh as well as in
      arch/arm/mach-shmobile carefully and right now, none of them changes any
      rate in any clock tree relevant to sh_tmu after their respective
      time_init(). Since all sh_tmu instances are created after time_init(), none
      of them should ever observe any clock rate changes.
      
      What's more, both, a clocksource as well as a clockevent device, can
      immediately get selected for use at their registration and thus, enabled
      at this point already. So it's probably safer to assume a "never changing
      clock rate" here.
      
      - Move the struct sh_tmu_channel's ->rate member to struct sh_tmu_device:
        it's a property of the underlying clock which is in turn specific to
        the sh_tmu_device.
      - Determine the ->rate value in sh_tmu_setup() at device probing rather
        than at first usage.
      - Set the clockevent device's rate at its registration.
      - Although not strictly necessary for the upcoming clockevent core changes,
        set the clocksource's rate at its registration for consistency.
      Signed-off-by: default avatarNicolai Stange <nicstange@gmail.com>
      Signed-off-by: John Stultz's avatarJohn Stultz <john.stultz@linaro.org>
      c3c0a20d
    • Nicolai Stange's avatar
      clocksource: sh_cmt: Compute rate before registration again · 890f423b
      Nicolai Stange authored
      With the upcoming NTP correction related rate adjustments to be implemented
      in the clockevents core, the latter needs to get informed about every rate
      change of a clockevent device made after its registration.
      
      Currently, sh_cmt violates this requirement in that it registers its
      clockevent device with a dummy rate and sets its final ->mult and ->shift
      values from its ->set_state_oneshot() and ->set_state_periodic() functions
      respectively.
      
      This patch moves the setting of the clockevent device's ->mult and ->shift
      values to before its registration.
      
      Note that there has been some back and forth regarding this question with
      respect to the clocksource also provided by this driver:
        commit f4d7c356 ("clocksource: sh_cmt: compute mult and shift before
                              registration")
      moves the rate determination from the clocksource's ->enable() function to
      before its registration. OTOH, the later
        commit 3593f5fe ("clocksource: sh_cmt: __clocksource_updatefreq_hz()
                              update")
      basically reverts this, saying
        "Without this patch the old code uses clocksource_register() together
         with a hack that assumes a never changing clock rate."
      
      However, I checked all current sh_cmt users in arch/sh as well as in
      arch/arm/mach-shmobile carefully and right now, none of them changes any
      rate in any clock tree relevant to sh_cmt after their respective
      time_init(). Since all sh_cmt instances are created after time_init(), none
      of them should ever observe any clock rate changes.
      
      What's more, both, a clocksource as well as a clockevent device, can
      immediately get selected for use at their registration and thus, enabled
      at this point already. So it's probably safer to assume a "never changing
      clock rate" here.
      
      - Move the struct sh_cmt_channel's ->rate member to struct sh_cmt_device:
        it's a property of the underlying clock which is in turn specific to
        the sh_cmt_device.
      - Determine the ->rate value in sh_cmt_setup() at device probing rather
        than at first usage.
      - Set the clockevent device's ->mult and ->shift values right before its
        registration.
      - Although not strictly necessary for the upcoming clockevent core changes,
        set the clocksource's rate at its registration for consistency.
      Signed-off-by: default avatarNicolai Stange <nicstange@gmail.com>
      Signed-off-by: John Stultz's avatarJohn Stultz <john.stultz@linaro.org>
      890f423b
  4. 20 Mar, 2017 5 commits
    • Linus Torvalds's avatar
      Linux 4.11-rc3 · 97da3854
      Linus Torvalds authored
      97da3854
    • Linus Torvalds's avatar
      mm/swap: don't BUG_ON() due to uninitialized swap slot cache · 452b94b8
      Linus Torvalds authored
      This BUG_ON() triggered for me once at shutdown, and I don't see a
      reason for the check.  The code correctly checks whether the swap slot
      cache is usable or not, so an uninitialized swap slot cache is not
      actually problematic afaik.
      
      I've temporarily just switched the BUG_ON() to a WARN_ON_ONCE(), since
      I'm not sure why that seemingly pointless check was there.  I suspect
      the real fix is to just remove it entirely, but for now we'll warn about
      it but not bring the machine down.
      
      Cc: "Huang, Ying" <ying.huang@intel.com>
      Cc: Tim Chen <tim.c.chen@linux.intel.com>
      Cc: Michal Hocko <mhocko@suse.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      452b94b8
    • Linus Torvalds's avatar
      Merge tag 'powerpc-4.11-5' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux · a07a6e41
      Linus Torvalds authored
      Pull more powerpc fixes from Michael Ellerman:
       "A couple of minor powerpc fixes for 4.11:
      
         - wire up statx() syscall
      
         - don't print a warning on memory hotplug when HPT resizing isn't
           available
      
        Thanks to: David Gibson, Chandan Rajendra"
      
      * tag 'powerpc-4.11-5' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux:
        powerpc/pseries: Don't give a warning when HPT resizing isn't available
        powerpc: Wire up statx() syscall
      a07a6e41
    • Linus Torvalds's avatar
      Merge branch 'parisc-4.11-2' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux · 4571bc5a
      Linus Torvalds authored
      Pull parisc fixes from Helge Deller:
      
       - Mikulas Patocka added support for R_PARISC_SECREL32 relocations in
         modules with CONFIG_MODVERSIONS.
      
       - Dave Anglin optimized the cache flushing for vmap ranges.
      
       - Arvind Yadav provided a fix for a potential NULL pointer dereference
         in the parisc perf code (and some code cleanups).
      
       - I wired up the new statx system call, fixed some compiler warnings
         with the access_ok() macro and fixed shutdown code to really halt a
         system at shutdown instead of crashing & rebooting.
      
      * 'parisc-4.11-2' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux:
        parisc: Fix system shutdown halt
        parisc: perf: Fix potential NULL pointer dereference
        parisc: Avoid compiler warnings with access_ok()
        parisc: Wire up statx system call
        parisc: Optimize flush_kernel_vmap_range and invalidate_kernel_vmap_range
        parisc: support R_PARISC_SECREL32 relocation in modules
      4571bc5a
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending · 8aa34172
      Linus Torvalds authored
      Pull SCSI target fixes from Nicholas Bellinger:
       "The bulk of the changes are in qla2xxx target driver code to address
        various issues found during Cavium/QLogic's internal testing (stable
        CC's included), along with a few other stability and smaller
        miscellaneous improvements.
      
        There are also a couple of different patch sets from Mike Christie,
        which have been a result of his work to use target-core ALUA logic
        together with tcm-user backend driver.
      
        Finally, a patch to address some long standing issues with
        pass-through SCSI export of TYPE_TAPE + TYPE_MEDIUM_CHANGER devices,
        which will make folks using physical (or virtual) magnetic tape happy"
      
      * git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending: (28 commits)
        qla2xxx: Update driver version to 9.00.00.00-k
        qla2xxx: Fix delayed response to command for loop mode/direct connect.
        qla2xxx: Change scsi host lookup method.
        qla2xxx: Add DebugFS node to display Port Database
        qla2xxx: Use IOCB interface to submit non-critical MBX.
        qla2xxx: Add async new target notification
        qla2xxx: Export DIF stats via debugfs
        qla2xxx: Improve T10-DIF/PI handling in driver.
        qla2xxx: Allow relogin to proceed if remote login did not finish
        qla2xxx: Fix sess_lock & hardware_lock lock order problem.
        qla2xxx: Fix inadequate lock protection for ABTS.
        qla2xxx: Fix request queue corruption.
        qla2xxx: Fix memory leak for abts processing
        qla2xxx: Allow vref count to timeout on vport delete.
        tcmu: Convert cmd_time_out into backend device attribute
        tcmu: make cmd timeout configurable
        tcmu: add helper to check if dev was configured
        target: fix race during implicit transition work flushes
        target: allow userspace to set state to transitioning
        target: fix ALUA transition timeout handling
        ...
      8aa34172
  5. 19 Mar, 2017 15 commits
  6. 18 Mar, 2017 7 commits
    • Nicholas Bellinger's avatar
      tcmu: Convert cmd_time_out into backend device attribute · 7d7a7435
      Nicholas Bellinger authored
      Instead of putting cmd_time_out under ../target/core/user_0/foo/control,
      which has historically been used by parameters needed for initial
      backend device configuration, go ahead and move cmd_time_out into
      a backend device attribute.
      
      In order to do this, tcmu_module_init() has been updated to create
      a local struct configfs_attribute **tcmu_attrs, that is based upon
      the existing passthrough_attrib_attrs along with the new cmd_time_out
      attribute.  Once **tcm_attrs has been setup, go ahead and point
      it at tcmu_ops->tb_dev_attrib_attrs so it's picked up by target-core.
      
      Also following MNC's previous change, ->cmd_time_out is stored in
      milliseconds but exposed via configfs in seconds.  Also, note this
      patch restricts the modification of ->cmd_time_out to before +
      after the TCMU device has been configured, but not while it has
      active fabric exports.
      
      Cc: Mike Christie <mchristi@redhat.com>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      7d7a7435
    • Mike Christie's avatar
      tcmu: make cmd timeout configurable · af980e46
      Mike Christie authored
      A single daemon could implement multiple types of devices
      using multuple types of real devices that may not support
      restarting from crashes and/or handling tcmu timeouts. This
      makes the cmd timeout configurable, so handlers that do not
      support it can turn if off for now.
      Signed-off-by: default avatarMike Christie <mchristi@redhat.com>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      af980e46
    • Mike Christie's avatar
      tcmu: add helper to check if dev was configured · 972c7f16
      Mike Christie authored
      This adds a helper to check if the dev was configured. It
      will be used in the next patch to prevent updates to some
      config settings after the device has been setup.
      Signed-off-by: default avatarMike Christie <mchristi@redhat.com>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      972c7f16
    • Linus Torvalds's avatar
      Merge tag 'openrisc-for-linus' of git://github.com/openrisc/linux · 93afaa45
      Linus Torvalds authored
      Pull OpenRISC fixes from Stafford Horne:
       "OpenRISC fixes for build issues that were exposed by kbuild robots
        after 4.11 merge. All from allmodconfig builds. This includes:
      
         - bug in the handling of 8-byte get_user() calls
      
         - module build failure due to multile missing symbol exports"
      
      * tag 'openrisc-for-linus' of git://github.com/openrisc/linux:
        openrisc: Export symbols needed by modules
        openrisc: fix issue handling 8 byte get_user calls
        openrisc: xchg: fix `computed is not used` warning
      93afaa45
    • Mike Christie's avatar
      target: fix race during implicit transition work flushes · 760bf578
      Mike Christie authored
      This fixes the following races:
      
      1. core_alua_do_transition_tg_pt could have read
      tg_pt_gp_alua_access_state and gone into this if chunk:
      
      if (!explicit &&
              atomic_read(&tg_pt_gp->tg_pt_gp_alua_access_state) ==
                 ALUA_ACCESS_STATE_TRANSITION) {
      
      and then core_alua_do_transition_tg_pt_work could update the
      state. core_alua_do_transition_tg_pt would then only set
      tg_pt_gp_alua_pending_state and the tg_pt_gp_alua_access_state would
      not get updated with the second calls state.
      
      2. core_alua_do_transition_tg_pt could be setting
      tg_pt_gp_transition_complete while the tg_pt_gp_transition_work
      is already completing. core_alua_do_transition_tg_pt then waits on the
      completion that will never be called.
      
      To handle these issues, we just call flush_work which will return when
      core_alua_do_transition_tg_pt_work has completed so there is no need
      to do the complete/wait. And, if core_alua_do_transition_tg_pt_work
      was running, instead of trying to sneak in the state change, we just
      schedule up another core_alua_do_transition_tg_pt_work call.
      
      Note that this does not handle a possible race where there are multiple
      threads call core_alua_do_transition_tg_pt at the same time. I think
      we need a mutex in target_tg_pt_gp_alua_access_state_store.
      Signed-off-by: default avatarMike Christie <mchristi@redhat.com>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      760bf578
    • Mike Christie's avatar
      target: allow userspace to set state to transitioning · 1ca4d4fa
      Mike Christie authored
      Userspace target_core_user handlers like tcmu-runner may want to set the
      ALUA state to transitioning while it does implicit transitions. This
      patch allows that state when set from configfs.
      Signed-off-by: default avatarMike Christie <mchristi@redhat.com>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      1ca4d4fa
    • Mike Christie's avatar
      target: fix ALUA transition timeout handling · d7175373
      Mike Christie authored
      The implicit transition time tells initiators the min time
      to wait before timing out a transition. We currently schedule
      the transition to occur in tg_pt_gp_implicit_trans_secs
      seconds so there is no room for delays. If
      core_alua_do_transition_tg_pt_work->core_alua_update_tpg_primary_metadata
      needs to write out info to a remote file, then the initiator can
      easily time out the operation.
      Signed-off-by: default avatarMike Christie <mchristi@redhat.com>
      Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
      d7175373