14 Nov, 2018

40 commits

  • [ Upstream commit 1e44224fb0528b4c0cc176bde2bb31e9127eb14b ]

    For each system in a given pevent, read_event_files() reads in a
    temporary 'sys' string. Be sure to free this string before moving onto
    to the next system and/or leaving read_event_files().

    Fixes the following coverity complaints:

    Error: RESOURCE_LEAK (CWE-772):

    tools/perf/util/trace-event-read.c:343: overwrite_var: Overwriting
    "sys" in "sys = read_string()" leaks the storage that "sys" points to.

    tools/perf/util/trace-event-read.c:353: leaked_storage: Variable "sys"
    going out of scope leaks the storage it points to.

    Signed-off-by: Sanskriti Sharma
    Reviewed-by: Jiri Olsa
    Cc: Joe Lawrence
    Link: http://lkml.kernel.org/r/1538490554-8161-6-git-send-email-sansharm@redhat.com
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Sanskriti Sharma
     
  • [ Upstream commit a1108c7b2efb892350ba6a0e932dfd45622f4e2b ]

    Clang warns when one enumerated type is implicitly converted to another.

    drivers/spi/spi-ep93xx.c:342:62: warning: implicit conversion from
    enumeration type 'enum dma_transfer_direction' to different enumeration
    type 'enum dma_data_direction' [-Wenum-conversion]
    nents = dma_map_sg(chan->device->dev, sgt->sgl, sgt->nents, dir);
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
    ./include/linux/dma-mapping.h:428:58: note: expanded from macro
    'dma_map_sg'
    #define dma_map_sg(d, s, n, r) dma_map_sg_attrs(d, s, n, r, 0)
    ~~~~~~~~~~~~~~~~ ^
    drivers/spi/spi-ep93xx.c:348:57: warning: implicit conversion from
    enumeration type 'enum dma_transfer_direction' to different enumeration
    type 'enum dma_data_direction' [-Wenum-conversion]
    dma_unmap_sg(chan->device->dev, sgt->sgl, sgt->nents, dir);
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
    ./include/linux/dma-mapping.h:429:62: note: expanded from macro
    'dma_unmap_sg'
    #define dma_unmap_sg(d, s, n, r) dma_unmap_sg_attrs(d, s, n, r, 0)
    ~~~~~~~~~~~~~~~~~~ ^
    drivers/spi/spi-ep93xx.c:377:56: warning: implicit conversion from
    enumeration type 'enum dma_transfer_direction' to different enumeration
    type 'enum dma_data_direction' [-Wenum-conversion]
    dma_unmap_sg(chan->device->dev, sgt->sgl, sgt->nents, dir);
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
    ./include/linux/dma-mapping.h:429:62: note: expanded from macro
    'dma_unmap_sg'
    #define dma_unmap_sg(d, s, n, r) dma_unmap_sg_attrs(d, s, n, r, 0)
    ~~~~~~~~~~~~~~~~~~ ^
    3 warnings generated.

    dma_{,un}map_sg expect an enum of type dma_data_direction but this
    driver uses dma_transfer_direction for everything. Convert the driver to
    use dma_data_direction for these two functions.

    There are two places that strictly require an enum of type
    dma_transfer_direction: the direction member in struct dma_slave_config
    and the direction parameter in dmaengine_prep_slave_sg. To avoid using
    an explicit cast, add a simple function, ep93xx_dma_data_to_trans_dir,
    to safely map between the two types because they are not 1 to 1 in
    meaning.

    Signed-off-by: Nathan Chancellor
    Reviewed-by: Nick Desaulniers
    Reviewed-by: Mika Westerberg
    Signed-off-by: Mark Brown
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Nathan Chancellor
     
  • [ Upstream commit 7325b4bbe5952e3e939f15de812f2ee0c0d33ca9 ]

    The driver may sleep with holding a spinlock.

    The function call paths (from bottom to top) in Linux-4.16 are:

    [FUNC] nvm_dev_dma_alloc(GFP_KERNEL)
    drivers/lightnvm/pblk-core.c, 754:
    nvm_dev_dma_alloc in pblk_line_submit_smeta_io
    drivers/lightnvm/pblk-core.c, 1048:
    pblk_line_submit_smeta_io in pblk_line_init_bb
    drivers/lightnvm/pblk-core.c, 1434:
    pblk_line_init_bb in pblk_line_replace_data
    drivers/lightnvm/pblk-recovery.c, 980:
    pblk_line_replace_data in pblk_recov_l2p
    drivers/lightnvm/pblk-recovery.c, 976:
    spin_lock in pblk_recov_l2p

    [FUNC] bio_map_kern(GFP_KERNEL)
    drivers/lightnvm/pblk-core.c, 762:
    bio_map_kern in pblk_line_submit_smeta_io
    drivers/lightnvm/pblk-core.c, 1048:
    pblk_line_submit_smeta_io in pblk_line_init_bb
    drivers/lightnvm/pblk-core.c, 1434:
    pblk_line_init_bb in pblk_line_replace_data
    drivers/lightnvm/pblk-recovery.c, 980:
    pblk_line_replace_data in pblk_recov_l2p
    drivers/lightnvm/pblk-recovery.c, 976:
    spin_lock in pblk_recov_l2p

    To fix these bugs, the call to pblk_line_replace_data()
    is moved out of the spinlock protection.

    These bugs are found by my static analysis tool DSAC.

    Signed-off-by: Jia-Ju Bai
    Reviewed-by: Javier González
    Signed-off-by: Matias Bjørling
    Signed-off-by: Jens Axboe
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Jia-Ju Bai
     
  • [ Upstream commit 95dcd64bc5a27080beaa344edfe5bdcca3d2e7dc ]

    Technically this is not required because disabling the PWM should be
    enough. However, when support for atomic operations was implemented in
    the PWM subsystem, only actual changes to the PWM channel are applied
    during pwm_config(), which means that during after resume from suspend
    the old settings won't be applied.

    One possible solution is for the PWM driver to implement its own PM
    operations such that settings from before suspend get applied on resume.
    This has the disadvantage of completely ignoring any particular ordering
    requirements that PWM user drivers might have, so it is best to leave it
    up to the user drivers to apply the settings that they want at the
    appropriate time.

    Another way to solve this would be to read back the current state of the
    PWM at the time of resume. That way, in case the configuration was lost
    during suspend, applying the old settings in PWM user drivers would
    actually get them applied because they differ from the current settings.
    However, not all PWM drivers support reading the hardware state, and not
    all hardware may support it.

    The best workaround at this point seems to be to let PWM user drivers
    tell the PWM subsystem that the PWM is turned off by, in addition to
    disabling it, also setting the duty cycle to 0. This causes the resume
    operation to apply a configuration that is different from the current
    configuration, resulting in the proper state from before suspend getting
    restored.

    Signed-off-by: Thierry Reding
    Signed-off-by: Guenter Roeck
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Thierry Reding
     
  • [ Upstream commit b5130dc2224d1881f24224c0590c6d97f2168d6a ]

    When running as a level 3 guest with no host provided sthyi support
    sclp_ocf_cpc_name_copy() will only return zeroes. Zeroes are not a
    valid group name, so let's not indicate that the group name field is
    valid.

    Also the group name is not dependent on stsi, let's not return based
    on stsi before setting it.

    Fixes: 95ca2cb57985 ("KVM: s390: Add sthyi emulation")
    Signed-off-by: Janosch Frank
    Signed-off-by: Martin Schwidefsky
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Janosch Frank
     
  • [ Upstream commit df52eab23d703142c766ac00bdb8db19d71238d0 ]

    Configuring generic network device parameters on tun will fail in
    presence of IFLA_INFO_KIND attribute in IFLA_LINKINFO nested attribute
    since tun_validate() always return failure.

    This can be visualized with following ip-link(8) command sequences:

    # ip link set dev tun0 group 100
    # ip link set dev tun0 group 100 type tun
    RTNETLINK answers: Invalid argument

    with contrast to dummy and veth drivers:

    # ip link set dev dummy0 group 100
    # ip link set dev dummy0 type dummy

    # ip link set dev veth0 group 100
    # ip link set dev veth0 group 100 type veth

    Fix by returning zero in tun_validate() when @data is NULL that is
    always in case since rtnl_link_ops->maxtype is zero in tun driver.

    Fixes: f019a7a594d9 ("tun: Implement ip link del tunXXX")
    Signed-off-by: Serhey Popovych
    Signed-off-by: David S. Miller
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Serhey Popovych
     
  • [ Upstream commit 5948185b97fa1f83d7855e638a72982a1073ebf5 ]

    This commit makes it possible to use devlink to split the 100G CXP
    Netronome into two 40G interfaces. Currently when you ask for 2
    interfaces, the math in src/nfp_devlink.c:nfp_devlink_port_split
    calculates that you want 5 lanes per port because for some reason
    eth_port.port_lanes=10 (shouldn't this be 12 for CXP?). What we really
    want when asking for 2 breakout interfaces is 4 lanes per port. This
    commit makes that happen by calculating based on 8 lanes if 10 are
    present.

    Signed-off-by: Ryan C Goodfellow
    Reviewed-by: Jakub Kicinski
    Reviewed-by: Greg Weeks
    Signed-off-by: David S. Miller
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Ryan C Goodfellow
     
  • [ Upstream commit 1448a2a5360ae06f25e2edc61ae070dff5c0beb4 ]

    If we fail to allocate the request queue for a disk, we still need to
    free that disk, not just the previous ones. Additionally, we need to
    cleanup the previous request queues.

    Signed-off-by: Omar Sandoval
    Signed-off-by: Jens Axboe
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Omar Sandoval
     
  • [ Upstream commit 71327f547ee3a46ec5c39fdbbd268401b2578d0e ]

    Move queue allocation next to disk allocation to fix a couple of issues:

    - If add_disk() hasn't been called, we should clear disk->queue before
    calling put_disk().
    - If we fail to allocate a request queue, we still need to put all of
    the disks, not just the ones that we allocated queues for.

    Signed-off-by: Omar Sandoval
    Signed-off-by: Jens Axboe
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Omar Sandoval
     
  • [ Upstream commit 9506a7425b094d2f1d9c877ed5a78f416669269b ]

    It was found that when debug_locks was turned off because of a problem
    found by the lockdep code, the system performance could drop quite
    significantly when the lock_stat code was also configured into the
    kernel. For instance, parallel kernel build time on a 4-socket x86-64
    server nearly doubled.

    Further analysis into the cause of the slowdown traced back to the
    frequent call to debug_locks_off() from the __lock_acquired() function
    probably due to some inconsistent lockdep states with debug_locks
    off. The debug_locks_off() function did an unconditional atomic xchg
    to write a 0 value into debug_locks which had already been set to 0.
    This led to severe cacheline contention in the cacheline that held
    debug_locks. As debug_locks is being referenced in quite a few different
    places in the kernel, this greatly slow down the system performance.

    To prevent that trashing of debug_locks cacheline, lock_acquired()
    and lock_contended() now checks the state of debug_locks before
    proceeding. The debug_locks_off() function is also modified to check
    debug_locks before calling __debug_locks_off().

    Signed-off-by: Waiman Long
    Cc: Andrew Morton
    Cc: Linus Torvalds
    Cc: Paul E. McKenney
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: Will Deacon
    Link: http://lkml.kernel.org/r/1539913518-15598-1-git-send-email-longman@redhat.com
    Signed-off-by: Ingo Molnar
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Waiman Long
     
  • [ Upstream commit 31d86033a0749a0463ea654130b2de5c163154f1 ]

    DMA needs to be cleaned up not only on timeout, but on all errors where
    it has been setup before.

    Fixes: 73e8b0528346 ("i2c: rcar: add DMA support")
    Signed-off-by: Wolfram Sang
    Signed-off-by: Wolfram Sang
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Wolfram Sang
     
  • [ Upstream commit ba0e41ca81b935b958006c7120466e2217357827 ]

    Add a testcase to check the syntax and field types for
    synthetic_events interface.

    Link: http://lkml.kernel.org/r/153986838264.18251.16627517536956299922.stgit@devbox

    Acked-by: Shuah Khan
    Signed-off-by: Masami Hiramatsu
    Signed-off-by: Steven Rostedt (VMware)
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Masami Hiramatsu
     
  • [ Upstream commit 8c3bf9b62b667456a57aefcf1689e826df146159 ]

    Clang currently warns:

    drivers/net/ethernet/qlogic/qla3xxx.c:384:24: warning: signed shift
    result (0xF00000000) requires 37 bits to represent, but 'int' only has
    32 bits [-Wshift-overflow]
    ((ISP_NVRAM_MASK << 16) | qdev->eeprom_cmd_data));
    ~~~~~~~~~~~~~~ ^ ~~
    1 warning generated.

    The warning is certainly accurate since ISP_NVRAM_MASK is defined as
    (0x000F << 16) which is then shifted by 16, resulting in 64424509440,
    well above UINT_MAX.

    Given that this is the only location in this driver where ISP_NVRAM_MASK
    is shifted again, it seems likely that ISP_NVRAM_MASK was originally
    defined without a shift and during the move of the shift to the
    definition, this statement wasn't properly removed (since ISP_NVRAM_MASK
    is used in the statenent right above this). Only the maintainers can
    confirm this since this statment has been here since the driver was
    first added to the kernel.

    Link: https://github.com/ClangBuiltLinux/linux/issues/127
    Signed-off-by: Nathan Chancellor
    Signed-off-by: David S. Miller
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Nathan Chancellor
     
  • [ Upstream commit 6aa676761d4c1acfa31320e55fa1f83f3fcbbc7a ]

    Commit:

    c5bedc6847c3b ("x86/fpu: Get rid of PF_USED_MATH usage, convert it to fpu->fpstate_active")

    introduced the 'fpu' variable at top of __restore_xstate_sig(),
    which now shadows the other definition:

    arch/x86/kernel/fpu/signal.c:318:28: warning: symbol 'fpu' shadows an earlier one
    arch/x86/kernel/fpu/signal.c:271:20: originally declared here

    Remove the shadowed definition of 'fpu', as the two definitions are the same.

    Signed-off-by: Sebastian Andrzej Siewior
    Reviewed-by: Andy Lutomirski
    Cc: Borislav Petkov
    Cc: Dave Hansen
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Fixes: c5bedc6847c3b ("x86/fpu: Get rid of PF_USED_MATH usage, convert it to fpu->fpstate_active")
    Link: http://lkml.kernel.org/r/20181016202525.29437-3-bigeasy@linutronix.de
    Signed-off-by: Ingo Molnar
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Sebastian Andrzej Siewior
     
  • [ Upstream commit 0ed149cf5239cc6e7e65bf00f769e8f1e91076c0 ]

    The size of the resulting cpu map can be smaller than a multiple of
    sizeof(u64), resulting in SIGBUS on cpus like Sparc as the next event
    will not be aligned properly.

    Signed-off-by: David S. Miller
    Cc: Jiri Olsa
    Cc: Kan Liang
    Fixes: 6c872901af07 ("perf cpu_map: Add cpu_map event synthesize function")
    Link: http://lkml.kernel.org/r/20181011.224655.716771175766946817.davem@davemloft.net
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    David Miller
     
  • [ Upstream commit 36b8d4628d3cc8f5a748e508cce8673bc00fc63c ]

    When a build is run from something like a cron job, the user's $PATH is
    rather minimal, of note, not including /usr/sbin in my own case. Because
    of that, an automated rpm package build ultimately fails to find
    libperf-jvmti.so, because somewhere within the build, this happens...

    /bin/sh: alternatives: command not found
    /bin/sh: alternatives: command not found
    Makefile.config:849: No openjdk development package found, please install
    JDK package, e.g. openjdk-8-jdk, java-1.8.0-openjdk-devel

    ...and while the build continues, libperf-jvmti.so isn't built, and
    things fall down when rpm tries to find all the %files specified. Exact
    same system builds everything just fine when the job is launched from a
    login shell instead of a cron job, since alternatives is in $PATH, so
    openjdk is actually found.

    The test required to get into this section of code actually specifies
    the full path, as does a block just above it, so let's do that here too.

    Signed-off-by: Jarod Wilson
    Acked-by: Jiri Olsa
    Cc: Alexander Shishkin
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Cc: Stephane Eranian
    Cc: William Cohen
    Fixes: d4dfdf00d43e ("perf jvmti: Plug compilation into perf build")
    Link: http://lkml.kernel.org/r/20180906221812.11167-1-jarod@redhat.com
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Jarod Wilson
     
  • [ Upstream commit 9845c49cc9bbb317a0bc9e9cf78d8e09d54c9af0 ]

    The comment and the code around the update_min_vruntime() call in
    dequeue_entity() are not in agreement.

    >From commit:

    b60205c7c558 ("sched/fair: Fix min_vruntime tracking")

    I think that we want to update min_vruntime when a task is sleeping/migrating.
    So, the check is inverted there - fix it.

    Signed-off-by: Song Muchun
    Cc: Linus Torvalds
    Cc: Mike Galbraith
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Fixes: b60205c7c558 ("sched/fair: Fix min_vruntime tracking")
    Link: http://lkml.kernel.org/r/20181014112612.2614-1-smuchun@gmail.com
    Signed-off-by: Ingo Molnar
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Song Muchun
     
  • [ Upstream commit b3e1eb8e7ac9aaa283989496651d99267c4cad6c ]

    So that when it is unset, ie. '-1', userspace can see it
    properly.

    Signed-off-by: David S. Miller
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    David S. Miller
     
  • [ Upstream commit 455adb3174d2c8518cef1a61140c211f6ac224d2 ]

    Like x86 and arm, call perf_sample_event_took() in perf event
    NMI interrupt handler.

    Signed-off-by: David S. Miller
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    David S. Miller
     
  • [ Upstream commit cfdc3170d214046b9509183fe9b9544dc644d40b ]

    It is important to clear the hw->state value for non-stopped events
    when they are added into the PMU. Otherwise when the event is
    scheduled out, we won't read the counter because HES_UPTODATE is still
    set. This breaks 'perf stat' and similar use cases, causing all the
    events to show zero.

    This worked for multi-pcr because we make explicit sparc_pmu_start()
    calls in calculate_multiple_pcrs(). calculate_single_pcr() doesn't do
    this because the idea there is to accumulate all of the counter
    settings into the single pcr value. So we have to add explicit
    hw->state handling there.

    Like x86, we use the PERF_HES_ARCH bit to track truly stopped events
    so that we don't accidently start them on a reload.

    Related to all of this, sparc_pmu_start() is missing a userpage update
    so add it.

    Signed-off-by: David S. Miller
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    David S. Miller
     
  • [ Upstream commit 94aafb74cee0002e2f2eb6dc5376f54d5951ab4d ]

    Michael reported that he could not stat following event:

    $ perf stat -e unc_p_freq_ge_1200mhz_cycles -a -- ls
    event syntax error: '..e_1200mhz_cycles'
    \___ value too big for format, maximum is 255
    Run 'perf list' for a list of valid events

    The event is unwrapped into:

    uncore_pcu/event=0xb,filter_band0=1200/

    where filter_band0 format says it's one byte only:

    # cat uncore_pcu/format/filter_band0
    config1:0-7

    while JSON files specifies bigger number:

    "Filter": "filter_band0=1200",

    all the filter_band* formats show 1 byte width:

    # cat uncore_pcu/format/filter_band1
    config1:8-15
    # cat uncore_pcu/format/filter_band2
    config1:16-23
    # cat uncore_pcu/format/filter_band3
    config1:24-31

    The reason of the issue is that filter_band* values are supposed to be
    in 100Mhz units.. it's stated in the JSON help for the events, like:

    filter_band3=XXX, with XXX in 100Mhz units

    This patch divides the filter_band* values by 100, plus there's couple
    of changes that actually change the number completely, like:

    - "Filter": "edge=1,filter_band2=4000",
    + "Filter": "edge=1,filter_band2=30",

    Reported-by: Michael Petlan
    Signed-off-by: Jiri Olsa
    Acked-by: Andi Kleen
    Cc: Alexander Shishkin
    Cc: Kan Liang
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/20181010080339.GB15790@krava
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Jiri Olsa
     
  • [ Upstream commit 9dffff200fd178f11dd50eb1fd8ccd0650c9284e ]

    bydst table/list lookups use rcu, so insertions must use rcu versions.

    Fixes: a7c44247f704e ("xfrm: policy: make xfrm_policy_lookup_bytype lockless")
    Signed-off-by: Florian Westphal
    Signed-off-by: Steffen Klassert
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Florian Westphal
     
  • [ Upstream commit 1b9caa10b31dda0866f4028e4bfb923fb6e4072f ]

    This reverts commit ac0e2cd555373ae6f8f3a3ad3fbbf5b6d1e7aaaa.

    Michael reported an issue with oversized terms values assignment
    and I noticed there was actually a misunderstanding of the max
    value check in the past.

    The above commit's changelog says:

    If bit 21 is set, there is parsing issues as below.

    $ perf stat -a -e uncore_qpi_0/event=0x200002,umask=0x8/
    event syntax error: '..pi_0/event=0x200002,umask=0x8/'
    \___ value too big for format, maximum is 511

    But there's no issue there, because the event value is distributed
    along the value defined by the format. Even if the format defines
    separated bit, the value is treated as a continual number, which
    should follow the format definition.

    In above case it's 9-bit value with last bit separated:
    $ cat uncore_qpi_0/format/event
    config:0-7,21

    Hence the value 0x200002 is correctly reported as format violation,
    because it exceeds 9 bits. It should have been 0x102 instead, which
    sets the 9th bit - the bit 21 of the format.

    $ perf stat -vv -a -e uncore_qpi_0/event=0x102,umask=0x8/
    Using CPUID GenuineIntel-6-2D
    ...
    ------------------------------------------------------------
    perf_event_attr:
    type 10
    size 112
    config 0x200802
    sample_type IDENTIFIER
    ...

    Reported-by: Michael Petlan
    Signed-off-by: Jiri Olsa
    Cc: Alexander Shishkin
    Cc: Andi Kleen
    Cc: Kan Liang
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Fixes: ac0e2cd55537 ("perf tools: Fix PMU term format max value calculation")
    Link: http://lkml.kernel.org/r/20181003072046.29276-1-jolsa@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Jiri Olsa
     
  • [ Upstream commit 262f9d811c7608f1e74258ceecfe1fa213bdf912 ]

    If the current process has unlimited RLIMIT_MEMLOCK,
    we should should leave it as is.

    Fixes: 941ff6f11c02 ("bpf: fix rlimit in reuseport net selftest")
    Signed-off-by: John Sperbeck
    Signed-off-by: Eric Dumazet
    Acked-by: Daniel Borkmann
    Signed-off-by: Daniel Borkmann
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Eric Dumazet
     
  • commit f5e758b8358f6c27e8a351ddf0b441a64cdabb94 upstream.

    PMIC_IRQB and PMIC_KEYINB lines on Exynos4210-based Origen board have
    external pull-up resistors, so disable any pull control for those lines
    in respective pin controller node. This fixes support for MAX8997
    interrupts and enables operation of wakeup from MAX8997 RTC alarm.

    Signed-off-by: Marek Szyprowski
    Fixes: 17419726aaa1 ("ARM: dts: add max8997 device node for exynos4210-origen board")
    Cc:
    Signed-off-by: Krzysztof Kozlowski
    Signed-off-by: Greg Kroah-Hartman

    Marek Szyprowski
     
  • commit 706d51681d636a0c4a5ef53395ec3b803e45ed4d upstream.

    Future Intel processors will support "Enhanced IBRS" which is an "always
    on" mode i.e. IBRS bit in SPEC_CTRL MSR is enabled once and never
    disabled.

    From the specification [1]:

    "With enhanced IBRS, the predicted targets of indirect branches
    executed cannot be controlled by software that was executed in a less
    privileged predictor mode or on another logical processor. As a
    result, software operating on a processor with enhanced IBRS need not
    use WRMSR to set IA32_SPEC_CTRL.IBRS after every transition to a more
    privileged predictor mode. Software can isolate predictor modes
    effectively simply by setting the bit once. Software need not disable
    enhanced IBRS prior to entering a sleep state such as MWAIT or HLT."

    If Enhanced IBRS is supported by the processor then use it as the
    preferred spectre v2 mitigation mechanism instead of Retpoline. Intel's
    Retpoline white paper [2] states:

    "Retpoline is known to be an effective branch target injection (Spectre
    variant 2) mitigation on Intel processors belonging to family 6
    (enumerated by the CPUID instruction) that do not have support for
    enhanced IBRS. On processors that support enhanced IBRS, it should be
    used for mitigation instead of retpoline."

    The reason why Enhanced IBRS is the recommended mitigation on processors
    which support it is that these processors also support CET which
    provides a defense against ROP attacks. Retpoline is very similar to ROP
    techniques and might trigger false positives in the CET defense.

    If Enhanced IBRS is selected as the mitigation technique for spectre v2,
    the IBRS bit in SPEC_CTRL MSR is set once at boot time and never
    cleared. Kernel also has to make sure that IBRS bit remains set after
    VMEXIT because the guest might have cleared the bit. This is already
    covered by the existing x86_spec_ctrl_set_guest() and
    x86_spec_ctrl_restore_host() speculation control functions.

    Enhanced IBRS still requires IBPB for full mitigation.

    [1] Speculative-Execution-Side-Channel-Mitigations.pdf
    [2] Retpoline-A-Branch-Target-Injection-Mitigation.pdf
    Both documents are available at:
    https://bugzilla.kernel.org/show_bug.cgi?id=199511

    Originally-by: David Woodhouse
    Signed-off-by: Sai Praneeth Prakhya
    Signed-off-by: Thomas Gleixner
    Cc: Tim C Chen
    Cc: Dave Hansen
    Cc: Ravi Shankar
    Link: https://lkml.kernel.org/r/1533148945-24095-1-git-send-email-sai.praneeth.prakhya@intel.com
    Signed-off-by: Greg Kroah-Hartman

    Sai Praneeth
     
  • commit f77084d96355f5fba8e2c1fb3a51a393b1570de7 upstream.

    The WARN_ON_ONCE(__read_cr3() != build_cr3()) in switch_mm_irqs_off()
    triggers every once in a while during a snapshotted system upgrade.

    The warning triggers since commit decab0888e6e ("x86/mm: Remove
    preempt_disable/enable() from __native_flush_tlb()"). The callchain is:

    get_page_from_freelist() -> post_alloc_hook() -> __kernel_map_pages()

    with CONFIG_DEBUG_PAGEALLOC enabled.

    Disable preemption during CR3 reset / __flush_tlb_all() and add a comment
    why preemption has to be disabled so it won't be removed accidentaly.

    Add another preemptible() check in __flush_tlb_all() to catch callers with
    enabled preemption when PGE is enabled, because PGE enabled does not
    trigger the warning in __native_flush_tlb(). Suggested by Andy Lutomirski.

    Fixes: decab0888e6e ("x86/mm: Remove preempt_disable/enable() from __native_flush_tlb()")
    Signed-off-by: Sebastian Andrzej Siewior
    Signed-off-by: Thomas Gleixner
    Cc: Andy Lutomirski
    Cc: Dave Hansen
    Cc: Peter Zijlstra
    Cc: Borislav Petkov
    Cc: stable@vger.kernel.org
    Link: https://lkml.kernel.org/r/20181017103432.zgv46nlu3hc7k4rq@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Sebastian Andrzej Siewior
     
  • …thout value is provided

    commit ccde460b9ae5c2bd5e4742af0a7f623c2daad566 upstream.

    memory_corruption_check[{_period|_size}]()'s handlers do not check input
    argument before passing it to kstrtoul() or simple_strtoull(). The argument
    would be a NULL pointer if each of the kernel parameters, without its
    value, is set in command line and thus cause the following panic.

    PANIC: early exception 0xe3 IP 10:ffffffff73587c22 error 0 cr2 0x0
    [ 0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 4.18-rc8+ #2
    [ 0.000000] RIP: 0010:kstrtoull+0x2/0x10
    ...
    [ 0.000000] Call Trace
    [ 0.000000] ? set_corruption_check+0x21/0x49
    [ 0.000000] ? do_early_param+0x4d/0x82
    [ 0.000000] ? parse_args+0x212/0x330
    [ 0.000000] ? rdinit_setup+0x26/0x26
    [ 0.000000] ? parse_early_options+0x20/0x23
    [ 0.000000] ? rdinit_setup+0x26/0x26
    [ 0.000000] ? parse_early_param+0x2d/0x39
    [ 0.000000] ? setup_arch+0x2f7/0xbf4
    [ 0.000000] ? start_kernel+0x5e/0x4c2
    [ 0.000000] ? load_ucode_bsp+0x113/0x12f
    [ 0.000000] ? secondary_startup_64+0xa5/0xb0

    This patch adds checks to prevent the panic.

    Signed-off-by: He Zhe <zhe.he@windriver.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: gregkh@linuxfoundation.org
    Cc: kstewart@linuxfoundation.org
    Cc: pombredanne@nexb.com
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/1534260823-87917-1-git-send-email-zhe.he@windriver.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    He Zhe
     
  • commit 357d291ce035d1b757568058f3c9898c60d125b1 upstream.

    The boot loader version reported via sysfs is wrong in case of the
    kernel being booted via the Xen PVH boot entry. it should be 2.12
    (0x020c), but it is reported to be 2.18 (0x0212).

    As the current way to set the version is error prone use the more
    readable variant (2 << 8) | 12.

    Signed-off-by: Juergen Gross
    Cc: # 4.12
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: boris.ostrovsky@oracle.com
    Cc: bp@alien8.de
    Cc: corbet@lwn.net
    Cc: linux-doc@vger.kernel.org
    Cc: xen-devel@lists.xenproject.org
    Link: http://lkml.kernel.org/r/20181010061456.22238-2-jgross@suse.com
    Signed-off-by: Ingo Molnar
    Signed-off-by: Greg Kroah-Hartman

    Juergen Gross
     
  • commit 53c613fe6349994f023245519265999eed75957f upstream.

    STIBP is a feature provided by certain Intel ucodes / CPUs. This feature
    (once enabled) prevents cross-hyperthread control of decisions made by
    indirect branch predictors.

    Enable this feature if

    - the CPU is vulnerable to spectre v2
    - the CPU supports SMT and has SMT siblings online
    - spectre_v2 mitigation autoselection is enabled (default)

    After some previous discussion, this leaves STIBP on all the time, as wrmsr
    on crossing kernel boundary is a no-no. This could perhaps later be a bit
    more optimized (like disabling it in NOHZ, experiment with disabling it in
    idle, etc) if needed.

    Note that the synchronization of the mask manipulation via newly added
    spec_ctrl_mutex is currently not strictly needed, as the only updater is
    already being serialized by cpu_add_remove_lock, but let's make this a
    little bit more future-proof.

    Signed-off-by: Jiri Kosina
    Signed-off-by: Thomas Gleixner
    Cc: Peter Zijlstra
    Cc: Josh Poimboeuf
    Cc: Andrea Arcangeli
    Cc: "WoodhouseDavid"
    Cc: Andi Kleen
    Cc: Tim Chen
    Cc: "SchauflerCasey"
    Cc: stable@vger.kernel.org
    Link: https://lkml.kernel.org/r/nycvar.YFH.7.76.1809251438240.15880@cbobk.fhfr.pm
    Signed-off-by: Greg Kroah-Hartman

    Jiri Kosina
     
  • commit ac237c28d5ac1b241d58b1b7b4b9fa10efb22fb5 upstream.

    The Creative Audigy SE (SB0570) card currently exhibits an audible pop
    whenever playback is stopped or resumed, or during silent periods of an
    audio stream. Initialise the IZD bit to the 0 to eliminate these pops.

    The Infinite Zero Detection (IZD) feature on the DAC causes the output
    to be shunted to Vcap after 2048 samples of silence. This discharges the
    AC coupling capacitor through the output and causes the aforementioned
    pop/click noise.

    The behaviour of the IZD bit is described on page 15 of the WM8768GEDS
    datasheet: "With IZD=1, applying MUTE for 1024 consecutive input samples
    will cause all outputs to be connected directly to VCAP. This also
    happens if 2048 consecutive zero input samples are applied to all 6
    channels, and IZD=0. It will be removed as soon as any channel receives
    a non-zero input". I believe the second sentence might be referring to
    IZD=1 instead of IZD=0 given the observed behaviour of the card.

    This change should make the DAC initialisation consistent with
    Creative's Windows driver, as this popping persists when initialising
    the card in Linux and soft rebooting into Windows, but is not present on
    a cold boot to Windows.

    Signed-off-by: Alex Stanoev
    Cc:
    Signed-off-by: Takashi Iwai
    Signed-off-by: Greg Kroah-Hartman

    Alex Stanoev
     
  • commit e7bb6ad5685f05685dd8a6a5eda7bfcd14d5f95b upstream.

    The Lenovo G50-30, like other G50 models, has a Conexant codec that
    requires a quirk for its inverted stereo dmic.

    Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1249364
    Reported-by: Alexander Ploumistos
    Tested-by: Alexander Ploumistos
    Cc: stable@vger.kernel.org
    Signed-off-by: Jeremy Cline
    Signed-off-by: Takashi Iwai
    Signed-off-by: Greg Kroah-Hartman

    Jeremy Cline
     
  • commit d06fb562bff5d14defdacbd92449bacbaedd5cdf upstream.

    The front MIC on the Lenovo M715 can't record sound, after applying
    the ALC294_FIXUP_LENOVO_MIC_LOCATION, the problem is fixed. So add
    the pin configuration of this machine to the pin quirk table.

    Cc:
    Signed-off-by: Hui Wang
    Signed-off-by: Takashi Iwai
    Signed-off-by: Greg Kroah-Hartman

    Hui Wang
     
  • commit 5b7c5e1f4c36b99d0f694f38b9ad910f520cb7ef upstream.

    BIOS on ASUS G751 doesn't seem to map the headphone pin (NID 0x16)
    correctly. Add a quirk to address it, as well as chaining to the
    previous fix for the microphone.

    Reported-by: Håvard
    Cc:
    Signed-off-by: Takashi Iwai
    Signed-off-by: Greg Kroah-Hartman

    Takashi Iwai
     
  • commit 11ba6111160290ccd35562f4e05cec08942a6c4c upstream.

    ASUS G751 requires the extra COEF initialization to make it microphone
    working properly.

    Reported-and-tested-by: Håvard
    Cc:
    Signed-off-by: Takashi Iwai
    Signed-off-by: Greg Kroah-Hartman

    Takashi Iwai
     
  • commit 99a3ae51d557d8e38a7aece65678a31f9db215ee upstream.

    In the C-code we need to put the physical address of the hpmc handler in
    the interrupt vector table (IVA) in order to get HPMCs working. Since
    on parisc64 function pointers are indirect (in fact they are function
    descriptors) we instead export the address as variable and not as
    function.

    This reverts a small part of commit f39cce654f9a ("parisc: Add
    cfi_startproc and cfi_endproc to assembly code").

    Signed-off-by: Helge Deller
    Cc: [4.9+]
    Signed-off-by: Greg Kroah-Hartman

    Helge Deller
     
  • commit 3c229b3f2dd8133f61bb81d3cb018be92f4bba39 upstream.

    Fix a long-existing small nasty bug in the map_pages() implementation which
    leads to overwriting already written pte entries with zero, *if* map_pages() is
    called a second time with an end address which isn't aligned on a pmd boundry.
    This happens for example if we want to remap only the text segment read/write
    in order to run alternative patching on the code. Exiting the loop when we
    reach the end address fixes this.

    Cc: stable@vger.kernel.org
    Signed-off-by: Helge Deller
    Signed-off-by: Greg Kroah-Hartman

    Helge Deller
     
  • commit 1138b6718ff74d2a934459643e3754423d23b5e2 upstream.

    Helge noticed that the address of the os_hpmc handler was not being
    correctly calculated in the hpmc macro. As a result, PDCE_CHECK would
    fail to call os_hpmc:

    e800009802e00000 0000000000000000 CC_ERR_CHECK_HPMC
    37000f7302e00000 8040004000000000 CC_ERR_CPU_CHECK_SUMMARY
    f600105e02e00000 fffffff0f0c00000 CC_MC_HPMC_MONARCH_SELECTED
    140003b202e00000 000000000000000b CC_ERR_HPMC_STATE_ENTRY
    5600100b02e00000 00000000000001a0 CC_MC_OS_HPMC_LEN_ERR
    5600106402e00000 fffffff0f0438e70 CC_MC_BR_TO_OS_HPMC_FAILED
    e800009802e00000 0000000000000000 CC_ERR_CHECK_HPMC
    37000f7302e00000 8040004000000000 CC_ERR_CPU_CHECK_SUMMARY
    4000109f02e00000 0000000000000000 CC_MC_HPMC_INITIATED
    4000101902e00000 0000000000000000 CC_MC_MULTIPLE_HPMCS
    030010d502e00000 0000000000000000 CC_CPU_STOP

    The address problem can be seen by dumping the fault vector:

    0000000040159000 :
    40159000: 63 6f 77 73 stb r15,-2447(dp)
    40159004: 20 63 61 6e ldil L%b747000,r3
    40159008: 20 66 6c 79 ldil L%-1c3b3000,r3
    ...
    40159020: 08 00 02 40 nop
    40159024: 20 6e 60 02 ldil L%15d000,r3
    40159028: 34 63 00 00 ldo 0(r3),r3
    4015902c: e8 60 c0 02 bv,n r0(r3)
    40159030: 08 00 02 40 nop
    40159034: 00 00 00 00 break 0,0
    40159038: c0 00 70 00 bb,*< r0,sar,40159840
    4015903c: 00 00 00 00 break 0,0

    Location 40159038 should contain the physical address of os_hpmc:

    000000004015d000 :
    4015d000: 08 1a 02 43 copy r26,r3
    4015d004: 01 c0 08 a4 mfctl iva,r4
    4015d008: 48 85 00 68 ldw 34(r4),r5

    This patch moves the address setup into initialize_ivt to resolve the
    above problem. I tested the change by dumping the HPMC entry after setup:

    0000000040209020: 8000240
    0000000040209024: 206a2004
    0000000040209028: 34630ac0
    000000004020902c: e860c002
    0000000040209030: 8000240
    0000000040209034: 1bdddce6
    0000000040209038: 15d000
    000000004020903c: 1a0

    Signed-off-by: John David Anglin
    Cc:
    Signed-off-by: Helge Deller
    Signed-off-by: Greg Kroah-Hartman

    John David Anglin
     
  • commit 0711e8c1b4572d076264e71b0002d223f2666ed7 upstream.

    Please note that below oops is from an older kernel, but the same
    race seems to be present in the upstream kernel too.

    ---8
    Cc: # 3.19
    Signed-off-by: Corey Minyard
    Signed-off-by: Greg Kroah-Hartman

    Jan Glauber
     
  • commit 95691e3eddc41da2d1cd3cca51fecdfb46bd85bc upstream.

    Currently, "disable_clkrun" yenta_socket module parameter is only
    implemented for TI CardBus bridges.
    Add also an implementation for Ricoh bridges that have the necessary
    setting documented in publicly available datasheets.

    Tested on a RL5C476II with a Sunrich C-160 CardBus NIC that doesn't work
    correctly unless the CLKRUN protocol is disabled.

    Let's also make it clear in its description that the "disable_clkrun"
    module parameter only works on these two previously mentioned brands of
    CardBus bridges.

    Signed-off-by: Maciej S. Szmigiero
    Cc: stable@vger.kernel.org
    Signed-off-by: Dominik Brodowski
    Signed-off-by: Greg Kroah-Hartman

    Maciej S. Szmigiero