08 Oct, 2020

1 commit

  • * tag 'v5.4.70': (3051 commits)
    Linux 5.4.70
    netfilter: ctnetlink: add a range check for l3/l4 protonum
    ep_create_wakeup_source(): dentry name can change under you...
    ...

    Conflicts:
    arch/arm/mach-imx/pm-imx6.c
    arch/arm64/boot/dts/freescale/imx8mm-evk.dts
    arch/arm64/boot/dts/freescale/imx8mn-ddr4-evk.dts
    drivers/crypto/caam/caamalg.c
    drivers/gpu/drm/imx/dw_hdmi-imx.c
    drivers/gpu/drm/imx/imx-ldb.c
    drivers/gpu/drm/imx/ipuv3/ipuv3-crtc.c
    drivers/mmc/host/sdhci-esdhc-imx.c
    drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
    drivers/net/ethernet/freescale/enetc/enetc.c
    drivers/net/ethernet/freescale/enetc/enetc_pf.c
    drivers/thermal/imx_thermal.c
    drivers/usb/cdns3/ep0.c
    drivers/xen/swiotlb-xen.c
    sound/soc/fsl/fsl_esai.c
    sound/soc/fsl/fsl_sai.c

    Signed-off-by: Jason Liu

    Jason Liu
     

07 Oct, 2020

39 commits

  • Because FSL DAI driver was removed, we no longer
    need the FSL_DAI config option.

    Signed-off-by: Daniel Baluta

    Daniel Baluta
     
  • As per discussion with upstream this is not the correct way
    to handle DSP resources. All the resource management was moved
    to SOF IMX driver so this code is no longer used.

    Removed it!

    Signed-off-by: Daniel Baluta

    Daniel Baluta
     
  • This removes FSL DAI generic node (as per upstream guidance)
    and moves all resource handling to dsp node.

    Signed-off-by: Daniel Baluta

    Daniel Baluta
     
  • We must match this with the name from topology.
    Signed-off-by: Daniel Baluta

    Daniel Baluta
     
  • We move clocks handling from FSL DAI generic driver to IMX specific
    driver as per discussion with upstream community. With this patch,
    FSL DAI generic driver is no longer used and will be removed.

    Signed-off-by: Daniel Baluta

    Daniel Baluta
     
  • Tested-by: Jon Hunter
    Tested-by: Shuah Khan
    Tested-by: Linux Kernel Functional Testing
    Tested-by: Guenter Roeck
    Link: https://lore.kernel.org/r/20201005142109.796046410@linuxfoundation.org
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     
  • commit 1cc5ef91d2ff94d2bf2de3b3585423e8a1051cb6 upstream.

    The indexes to the nf_nat_l[34]protos arrays come from userspace. So
    check the tuple's family, e.g. l3num, when creating the conntrack in
    order to prevent an OOB memory access during setup. Here is an example
    kernel panic on 4.14.180 when userspace passes in an index greater than
    NFPROTO_NUMPROTO.

    Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
    Modules linked in:...
    Process poc (pid: 5614, stack limit = 0x00000000a3933121)
    CPU: 4 PID: 5614 Comm: poc Tainted: G S W O 4.14.180-g051355490483
    Hardware name: Qualcomm Technologies, Inc. SM8150 V2 PM8150 Google Inc. MSM
    task: 000000002a3dfffe task.stack: 00000000a3933121
    pc : __cfi_check_fail+0x1c/0x24
    lr : __cfi_check_fail+0x1c/0x24
    ...
    Call trace:
    __cfi_check_fail+0x1c/0x24
    name_to_dev_t+0x0/0x468
    nfnetlink_parse_nat_setup+0x234/0x258
    ctnetlink_parse_nat_setup+0x4c/0x228
    ctnetlink_new_conntrack+0x590/0xc40
    nfnetlink_rcv_msg+0x31c/0x4d4
    netlink_rcv_skb+0x100/0x184
    nfnetlink_rcv+0xf4/0x180
    netlink_unicast+0x360/0x770
    netlink_sendmsg+0x5a0/0x6a4
    ___sys_sendmsg+0x314/0x46c
    SyS_sendmsg+0xb4/0x108
    el0_svc_naked+0x34/0x38

    This crash is not happening since 5.4+, however, ctnetlink still
    allows for creating entries with unsupported layer 3 protocol number.

    Fixes: c1d10adb4a521 ("[NETFILTER]: Add ctnetlink port for nf_conntrack")
    Signed-off-by: Will McVicker
    [pablo@netfilter.org: rebased original patch on top of nf.git]
    Signed-off-by: Pablo Neira Ayuso
    Signed-off-by: Greg Kroah-Hartman

    Will McVicker
     
  • commit 3701cb59d892b88d569427586f01491552f377b1 upstream.

    or get freed, for that matter, if it's a long (separately stored)
    name.

    Signed-off-by: Al Viro
    Signed-off-by: Greg Kroah-Hartman

    Al Viro
     
  • commit fe0a916c1eae8e17e86c3753d13919177d63ed7e upstream.

    Checking for the lack of epitems refering to the epoll we want to insert into
    is not enough; we might have an insertion of that epoll into another one that
    has already collected the set of files to recheck for excessive reverse paths,
    but hasn't gotten to creating/inserting the epitem for it.

    However, any such insertion in progress can be detected - it will update the
    generation count in our epoll when it's done looking through it for files
    to check. That gets done under ->mtx of our epoll and that allows us to
    detect that safely.

    We are *not* holding epmutex here, so the generation count is not stable.
    However, since both the update of ep->gen by loop check and (later)
    insertion into ->f_ep_link are done with ep->mtx held, we are fine -
    the sequence is
    grab epmutex
    bump loop_check_gen
    ...
    grab tep->mtx // 1
    tep->gen = loop_check_gen
    ...
    drop tep->mtx // 2
    ...
    grab tep->mtx // 3
    ...
    insert into ->f_ep_link
    ...
    drop tep->mtx // 4
    bump loop_check_gen
    drop epmutex
    and if the fastpath check in another thread happens for that
    eventpoll, it can come
    * before (1) - in that case fastpath is just fine
    * after (4) - we'll see non-empty ->f_ep_link, slow path
    taken
    * between (2) and (3) - loop_check_gen is stable,
    with ->mtx providing barriers and we end up taking slow path.

    Note that ->f_ep_link emptiness check is slightly racy - we are protected
    against insertions into that list, but removals can happen right under us.
    Not a problem - in the worst case we'll end up taking a slow path for
    no good reason.

    Signed-off-by: Al Viro
    Signed-off-by: Greg Kroah-Hartman

    Al Viro
     
  • commit 18306c404abe18a0972587a6266830583c60c928 upstream.

    removes the need to clear it, along with the races.

    Signed-off-by: Al Viro
    Signed-off-by: Greg Kroah-Hartman

    Al Viro
     
  • commit f8d4f44df056c5b504b0d49683fb7279218fd207 upstream.

    Signed-off-by: Al Viro
    Signed-off-by: Greg Kroah-Hartman

    Al Viro
     
  • commit 38adf94e166e3cb4eb89683458ca578051e8218d upstream.

    Move the quirked chunk_sectors setting to the same location as noiob so
    one place registers this setting. And since the noiob value is only used
    locally, remove the member from struct nvme_ns.

    Signed-off-by: Keith Busch
    Reviewed-by: Sagi Grimberg
    Signed-off-by: Christoph Hellwig
    Signed-off-by: Jens Axboe
    Signed-off-by: Revanth Rajashekar
    Signed-off-by: Greg Kroah-Hartman

    Keith Busch
     
  • commit e08f2ae850929d40e66268ee47e443e7ea56eeb7 upstream.

    Introduce the new helper function nvme_lba_to_sect() to convert a device
    logical block number to a 512B sector number. Use this new helper in
    obvious places, cleaning up the code.

    Reviewed-by: Johannes Thumshirn
    Reviewed-by: Christoph Hellwig
    Signed-off-by: Damien Le Moal
    Signed-off-by: Keith Busch
    Signed-off-by: Jens Axboe
    Signed-off-by: Revanth Rajashekar
    Signed-off-by: Greg Kroah-Hartman

    Damien Le Moal
     
  • commit 314d48dd224897e35ddcaf5a1d7d133b5adddeb7 upstream.

    Rename nvme_block_nr() to nvme_sect_to_lba() and use SECTOR_SHIFT
    instead of its hard coded value 9. Also add a comment to decribe this
    helper.

    Reviewed-by: Johannes Thumshirn
    Reviewed-by: Christoph Hellwig
    Signed-off-by: Damien Le Moal
    Signed-off-by: Keith Busch
    Signed-off-by: Jens Axboe
    Signed-off-by: Revanth Rajashekar 1
    Signed-off-by: Greg Kroah-Hartman

    Damien Le Moal
     
  • commit f85086f95fa36194eb0db5cd5c12e56801b98523 upstream.

    In register_mem_sect_under_node() the system_state's value is checked to
    detect whether the call is made during boot time or during an hot-plug
    operation. Unfortunately, that check against SYSTEM_BOOTING is wrong
    because regular memory is registered at SYSTEM_SCHEDULING state. In
    addition, memory hot-plug operation can be triggered at this system
    state by the ACPI [1]. So checking against the system state is not
    enough.

    The consequence is that on system with interleaved node's ranges like this:

    Early memory node ranges
    node 1: [mem 0x0000000000000000-0x000000011fffffff]
    node 2: [mem 0x0000000120000000-0x000000014fffffff]
    node 1: [mem 0x0000000150000000-0x00000001ffffffff]
    node 0: [mem 0x0000000200000000-0x000000048fffffff]
    node 2: [mem 0x0000000490000000-0x00000007ffffffff]

    This can be seen on PowerPC LPAR after multiple memory hot-plug and
    hot-unplug operations are done. At the next reboot the node's memory
    ranges can be interleaved and since the call to link_mem_sections() is
    made in topology_init() while the system is in the SYSTEM_SCHEDULING
    state, the node's id is not checked, and the sections registered to
    multiple nodes:

    $ ls -l /sys/devices/system/memory/memory21/node*
    total 0
    lrwxrwxrwx 1 root root 0 Aug 24 05:27 node1 -> ../../node/node1
    lrwxrwxrwx 1 root root 0 Aug 24 05:27 node2 -> ../../node/node2

    In that case, the system is able to boot but if later one of theses
    memory blocks is hot-unplugged and then hot-plugged, the sysfs
    inconsistency is detected and this is triggering a BUG_ON():

    kernel BUG at /Users/laurent/src/linux-ppc/mm/memory_hotplug.c:1084!
    Oops: Exception in kernel mode, sig: 5 [#1]
    LE PAGE_SIZE=64K MMU=Hash SMP NR_CPUS=2048 NUMA pSeries
    Modules linked in: rpadlpar_io rpaphp pseries_rng rng_core vmx_crypto gf128mul binfmt_misc ip_tables x_tables xfs libcrc32c crc32c_vpmsum autofs4
    CPU: 8 PID: 10256 Comm: drmgr Not tainted 5.9.0-rc1+ #25
    Call Trace:
    add_memory_resource+0x23c/0x340 (unreliable)
    __add_memory+0x5c/0xf0
    dlpar_add_lmb+0x1b4/0x500
    dlpar_memory+0x1f8/0xb80
    handle_dlpar_errorlog+0xc0/0x190
    dlpar_store+0x198/0x4a0
    kobj_attr_store+0x30/0x50
    sysfs_kf_write+0x64/0x90
    kernfs_fop_write+0x1b0/0x290
    vfs_write+0xe8/0x290
    ksys_write+0xdc/0x130
    system_call_exception+0x160/0x270
    system_call_common+0xf0/0x27c

    This patch addresses the root cause by not relying on the system_state
    value to detect whether the call is due to a hot-plug operation. An
    extra parameter is added to link_mem_sections() detailing whether the
    operation is due to a hot-plug operation.

    [1] According to Oscar Salvador, using this qemu command line, ACPI
    memory hotplug operations are raised at SYSTEM_SCHEDULING state:

    $QEMU -enable-kvm -machine pc -smp 4,sockets=4,cores=1,threads=1 -cpu host -monitor pty \
    -m size=$MEM,slots=255,maxmem=4294967296k \
    -numa node,nodeid=0,cpus=0-3,mem=512 -numa node,nodeid=1,mem=512 \
    -object memory-backend-ram,id=memdimm0,size=134217728 -device pc-dimm,node=0,memdev=memdimm0,id=dimm0,slot=0 \
    -object memory-backend-ram,id=memdimm1,size=134217728 -device pc-dimm,node=0,memdev=memdimm1,id=dimm1,slot=1 \
    -object memory-backend-ram,id=memdimm2,size=134217728 -device pc-dimm,node=0,memdev=memdimm2,id=dimm2,slot=2 \
    -object memory-backend-ram,id=memdimm3,size=134217728 -device pc-dimm,node=0,memdev=memdimm3,id=dimm3,slot=3 \
    -object memory-backend-ram,id=memdimm4,size=134217728 -device pc-dimm,node=1,memdev=memdimm4,id=dimm4,slot=4 \
    -object memory-backend-ram,id=memdimm5,size=134217728 -device pc-dimm,node=1,memdev=memdimm5,id=dimm5,slot=5 \
    -object memory-backend-ram,id=memdimm6,size=134217728 -device pc-dimm,node=1,memdev=memdimm6,id=dimm6,slot=6 \

    Fixes: 4fbce633910e ("mm/memory_hotplug.c: make register_mem_sect_under_node() a callback of walk_memory_range()")
    Signed-off-by: Laurent Dufour
    Signed-off-by: Andrew Morton
    Reviewed-by: David Hildenbrand
    Reviewed-by: Oscar Salvador
    Acked-by: Michal Hocko
    Cc: Greg Kroah-Hartman
    Cc: "Rafael J. Wysocki"
    Cc: Fenghua Yu
    Cc: Nathan Lynch
    Cc: Scott Cheloha
    Cc: Tony Luck
    Cc:
    Link: https://lkml.kernel.org/r/20200915094143.79181-3-ldufour@linux.ibm.com
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Laurent Dufour
     
  • commit c1d0da83358a2316d9be7f229f26126dbaa07468 upstream.

    Patch series "mm: fix memory to node bad links in sysfs", v3.

    Sometimes, firmware may expose interleaved memory layout like this:

    Early memory node ranges
    node 1: [mem 0x0000000000000000-0x000000011fffffff]
    node 2: [mem 0x0000000120000000-0x000000014fffffff]
    node 1: [mem 0x0000000150000000-0x00000001ffffffff]
    node 0: [mem 0x0000000200000000-0x000000048fffffff]
    node 2: [mem 0x0000000490000000-0x00000007ffffffff]

    In that case, we can see memory blocks assigned to multiple nodes in
    sysfs:

    $ ls -l /sys/devices/system/memory/memory21
    total 0
    lrwxrwxrwx 1 root root 0 Aug 24 05:27 node1 -> ../../node/node1
    lrwxrwxrwx 1 root root 0 Aug 24 05:27 node2 -> ../../node/node2
    -rw-r--r-- 1 root root 65536 Aug 24 05:27 online
    -r--r--r-- 1 root root 65536 Aug 24 05:27 phys_device
    -r--r--r-- 1 root root 65536 Aug 24 05:27 phys_index
    drwxr-xr-x 2 root root 0 Aug 24 05:27 power
    -r--r--r-- 1 root root 65536 Aug 24 05:27 removable
    -rw-r--r-- 1 root root 65536 Aug 24 05:27 state
    lrwxrwxrwx 1 root root 0 Aug 24 05:25 subsystem -> ../../../../bus/memory
    -rw-r--r-- 1 root root 65536 Aug 24 05:25 uevent
    -r--r--r-- 1 root root 65536 Aug 24 05:27 valid_zones

    The same applies in the node's directory with a memory21 link in both
    the node1 and node2's directory.

    This is wrong but doesn't prevent the system to run. However when
    later, one of these memory blocks is hot-unplugged and then hot-plugged,
    the system is detecting an inconsistency in the sysfs layout and a
    BUG_ON() is raised:

    kernel BUG at /Users/laurent/src/linux-ppc/mm/memory_hotplug.c:1084!
    LE PAGE_SIZE=64K MMU=Hash SMP NR_CPUS=2048 NUMA pSeries
    Modules linked in: rpadlpar_io rpaphp pseries_rng rng_core vmx_crypto gf128mul binfmt_misc ip_tables x_tables xfs libcrc32c crc32c_vpmsum autofs4
    CPU: 8 PID: 10256 Comm: drmgr Not tainted 5.9.0-rc1+ #25
    Call Trace:
    add_memory_resource+0x23c/0x340 (unreliable)
    __add_memory+0x5c/0xf0
    dlpar_add_lmb+0x1b4/0x500
    dlpar_memory+0x1f8/0xb80
    handle_dlpar_errorlog+0xc0/0x190
    dlpar_store+0x198/0x4a0
    kobj_attr_store+0x30/0x50
    sysfs_kf_write+0x64/0x90
    kernfs_fop_write+0x1b0/0x290
    vfs_write+0xe8/0x290
    ksys_write+0xdc/0x130
    system_call_exception+0x160/0x270
    system_call_common+0xf0/0x27c

    This has been seen on PowerPC LPAR.

    The root cause of this issue is that when node's memory is registered,
    the range used can overlap another node's range, thus the memory block
    is registered to multiple nodes in sysfs.

    There are two issues here:

    (a) The sysfs memory and node's layouts are broken due to these
    multiple links

    (b) The link errors in link_mem_sections() should not lead to a system
    panic.

    To address (a) register_mem_sect_under_node should not rely on the
    system state to detect whether the link operation is triggered by a hot
    plug operation or not. This is addressed by the patches 1 and 2 of this
    series.

    Issue (b) will be addressed separately.

    This patch (of 2):

    The memmap_context enum is used to detect whether a memory operation is
    due to a hot-add operation or happening at boot time.

    Make it general to the hotplug operation and rename it as
    meminit_context.

    There is no functional change introduced by this patch

    Suggested-by: David Hildenbrand
    Signed-off-by: Laurent Dufour
    Signed-off-by: Andrew Morton
    Reviewed-by: David Hildenbrand
    Reviewed-by: Oscar Salvador
    Acked-by: Michal Hocko
    Cc: Greg Kroah-Hartman
    Cc: "Rafael J . Wysocki"
    Cc: Nathan Lynch
    Cc: Scott Cheloha
    Cc: Tony Luck
    Cc: Fenghua Yu
    Cc:
    Link: https://lkml.kernel.org/r/20200915094143.79181-1-ldufour@linux.ibm.com
    Link: https://lkml.kernel.org/r/20200915132624.9723-1-ldufour@linux.ibm.com
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Laurent Dufour
     
  • commit 2b8bd423614c595540eaadcfbc702afe8e155e50 upstream.

    Currently io_ticks is approximated by adding one at each start and end of
    requests if jiffies counter has changed. This works perfectly for requests
    shorter than a jiffy or if one of requests starts/ends at each jiffy.

    If disk executes just one request at a time and they are longer than two
    jiffies then only first and last jiffies will be accounted.

    Fix is simple: at the end of request add up into io_ticks jiffies passed
    since last update rather than just one jiffy.

    Example: common HDD executes random read 4k requests around 12ms.

    fio --name=test --filename=/dev/sdb --rw=randread --direct=1 --runtime=30 &
    iostat -x 10 sdb

    Note changes of iostat's "%util" 8,43% -> 99,99% before/after patch:

    Before:

    Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
    sdb 0,00 0,00 82,60 0,00 330,40 0,00 8,00 0,96 12,09 12,09 0,00 1,02 8,43

    After:

    Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
    sdb 0,00 0,00 82,50 0,00 330,00 0,00 8,00 1,00 12,10 12,10 0,00 12,12 99,99

    Now io_ticks does not loose time between start and end of requests, but
    for queue-depth > 1 some I/O time between adjacent starts might be lost.

    For load estimation "%util" is not as useful as average queue length,
    but it clearly shows how often disk queue is completely empty.

    Fixes: 5b18b5a73760 ("block: delete part_round_stats and switch to less precise counting")
    Signed-off-by: Konstantin Khlebnikov
    Reviewed-by: Ming Lei
    Signed-off-by: Jens Axboe
    From: "Banerjee, Debabrata"
    Signed-off-by: Greg Kroah-Hartman

    Konstantin Khlebnikov
     
  • [ Upstream commit 09a6b0bc3be793ca8cba580b7992d73e9f68f15d ]

    Commit f227e3ec3b5c ("random32: update the net random state on interrupt
    and activity") broke compilation and was temporarily fixed by Linus in
    83bdc7275e62 ("random32: remove net_rand_state from the latent entropy
    gcc plugin") by entirely moving net_rand_state out of the things handled
    by the latent_entropy GCC plugin.

    From what I understand when reading the plugin code, using the
    __latent_entropy attribute on a declaration was the wrong part and
    simply keeping the __latent_entropy attribute on the variable definition
    was the correct fix.

    Fixes: 83bdc7275e62 ("random32: remove net_rand_state from the latent entropy gcc plugin")
    Acked-by: Willy Tarreau
    Cc: Emese Revfy
    Signed-off-by: Thibaut Sautereau
    Signed-off-by: Linus Torvalds
    Signed-off-by: Sasha Levin

    Thibaut Sautereau
     
  • [ Upstream commit efe84d408bf41975db8506d3a1cc02e794e2309c ]

    When building with

    $ HOST_EXTRACFLAGS=-g make

    the expectation is that host tools are built with debug informations.
    This however doesn't happen if the Makefile assigns a new value to the
    HOST_EXTRACFLAGS instead of appending to it. So use += instead of := for
    the first assignment.

    Fixes: e3fd9b5384f3 ("scripts/dtc: consolidate include path options in Makefile")
    Signed-off-by: Uwe Kleine-König
    Signed-off-by: Rob Herring
    Signed-off-by: Sasha Levin

    Uwe Kleine-König
     
  • [ Upstream commit 996d585b079ad494a30cac10e08585bcd5345125 ]

    Add Synaptics IDs in trackpoint_start_protocol() to mark them as valid.

    Signed-off-by: Vincent Huang
    Fixes: 6c77545af100 ("Input: trackpoint - add new trackpoint variant IDs")
    Reviewed-by: Harry Cutts
    Tested-by: Harry Cutts
    Link: https://lore.kernel.org/r/20200924053013.1056953-1-vincent.huang@tw.synaptics.com
    Signed-off-by: Dmitry Torokhov
    Signed-off-by: Sasha Levin

    Vincent Huang
     
  • [ Upstream commit a2bd970aa62f2f7f80fd0d212b1d4ccea5df4aed ]

    the i2c_ram structure is missing the sdmatmp field mentionned in
    datasheet for MPC8272 at paragraph 36.5. With this field missing, the
    hardware would write past the allocated memory done through
    cpm_muram_alloc for the i2c_ram structure and land in memory allocated
    for the buffers descriptors corrupting the cbd_bufaddr field. Since this
    field is only set during setup(), the first i2c transaction would work
    and the following would send data read from an arbitrary memory
    location.

    Fixes: 61045dbe9d8d ("i2c: Add support for I2C bus on Freescale CPM1/CPM2 controllers")
    Signed-off-by: Nicolas VINCENT
    Acked-by: Jochen Friedrich
    Acked-by: Christophe Leroy
    Signed-off-by: Wolfram Sang
    Signed-off-by: Sasha Levin

    Nicolas VINCENT
     
  • [ Upstream commit 3e640b1eec38e4c8eba160f26cba4f592e657f3d ]

    GPIO_U is mapped to the least significant byte of input/output mask, and
    the byte in "output" mask should be 0 because GPIO_U is input only. All
    the other bits need to be 1 because GPIO_V/W/X support both input and
    output modes.

    Similarly, GPIO_Y/Z are mapped to the 2 least significant bytes, and the
    according bits need to be 1 because GPIO_Y/Z support both input and
    output modes.

    Fixes: ab4a85534c3e ("gpio: aspeed: Add in ast2600 details to Aspeed driver")
    Signed-off-by: Tao Ren
    Reviewed-by: Andrew Jeffery
    Signed-off-by: Bartosz Golaszewski
    Signed-off-by: Sasha Levin

    Tao Ren
     
  • [ Upstream commit bf0d394e885015941ed2d5724c0a6ed8d42dd95e ]

    Currently, the IRQ setup for the SGPIO driver enables all interrupts in
    dual-edge trigger mode. Since the default handler is handle_bad_irq, any
    state change on input GPIOs will trigger bad IRQ warnings.

    This change applies sensible IRQ defaults: single-edge trigger, and all
    IRQs disabled.

    Signed-off-by: Jeremy Kerr
    Fixes: 7db47faae79b ("gpio: aspeed: Add SGPIO driver")
    Reviewed-by: Joel Stanley
    Acked-by: Andrew Jeffery
    Signed-off-by: Bartosz Golaszewski
    Signed-off-by: Sasha Levin

    Jeremy Kerr
     
  • [ Upstream commit ac67b07e268d46eba675a60c37051bb3e59fd201 ]

    Currently, the aspeed-sgpio driver exposes up to 80 GPIO lines,
    corresponding to the 80 status bits available in hardware. Each of these
    lines can be configured as either an input or an output.

    However, each of these GPIOs is actually an input *and* an output; we
    actually have 80 inputs plus 80 outputs.

    This change expands the maximum number of GPIOs to 160; the lower half
    of this range are the input-only GPIOs, the upper half are the outputs.
    We fix the GPIO directions to correspond to this mapping.

    This also fixes a bug when setting GPIOs - we were reading from the
    input register, making it impossible to set more than one output GPIO.

    Signed-off-by: Jeremy Kerr
    Fixes: 7db47faae79b ("gpio: aspeed: Add SGPIO driver")
    Reviewed-by: Joel Stanley
    Reviewed-by: Andrew Jeffery
    Acked-by: Rob Herring
    Signed-off-by: Bartosz Golaszewski
    Signed-off-by: Sasha Levin

    Jeremy Kerr
     
  • [ Upstream commit 1a26044954a6d1f4d375d5e62392446af663be7a ]

    if of_find_device_by_node() succeed, exynos_iommu_of_xlate() doesn't have
    a corresponding put_device(). Thus add put_device() to fix the exception
    handling for this function implementation.

    Fixes: aa759fd376fb ("iommu/exynos: Add callback for initializing devices from device tree")
    Signed-off-by: Yu Kuai
    Acked-by: Marek Szyprowski
    Link: https://lore.kernel.org/r/20200918011335.909141-1-yukuai3@huawei.com
    Signed-off-by: Joerg Roedel
    Signed-off-by: Sasha Levin

    Yu Kuai
     
  • [ Upstream commit f3bb0f796f5ffe32f0fbdce5b1b12eb85511158f ]

    The ChipID IO region has it's own clock, which is being disabled while
    scanning for unused clocks. It turned out that some CPU hotplug, CPU idle
    or even SOC firmware code depends on the reads from that area. Fix the
    mysterious hang caused by entering deep CPU idle state by ignoring the
    'chipid' clock during unused clocks scan, as there are no direct clients
    for it which will keep it enabled.

    Fixes: e062b571777f ("clk: exynos4: register clocks using common clock framework")
    Signed-off-by: Marek Szyprowski
    Link: https://lore.kernel.org/r/20200922124046.10496-1-m.szyprowski@samsung.com
    Reviewed-by: Krzysztof Kozlowski
    Acked-by: Sylwester Nawrocki
    Signed-off-by: Stephen Boyd
    Signed-off-by: Sasha Levin

    Marek Szyprowski
     
  • [ Upstream commit 5105660ee80862b85f7769626d0f936c18ce1885 ]

    Commit bff1cef5f23a ("clk: tegra: Don't enable already enabled PLLs")
    added checks to avoid enabling PLLs that have already been enabled by
    the bootloader. However, the PLL_E configuration inherited from the
    bootloader isn't necessarily the one that is needed for the kernel.

    This can cause SATA to fail like this:

    [ 5.310270] phy phy-sata.6: phy poweron failed --> -110
    [ 5.315604] tegra-ahci 70027000.sata: failed to power on AHCI controller: -110
    [ 5.323022] tegra-ahci: probe of 70027000.sata failed with error -110

    Fix this by always programming the PLL_E. This ensures that any mis-
    configuration by the bootloader will be overwritten by the kernel.

    Fixes: bff1cef5f23a ("clk: tegra: Don't enable already enabled PLLs")
    Reported-by: LABBE Corentin
    Tested-by: Corentin Labbe
    Reviewed-by: Dmitry Osipenko
    Signed-off-by: Thierry Reding
    Signed-off-by: Sasha Levin

    Thierry Reding
     
  • [ Upstream commit d33030e2ee3508d65db5644551435310df86010e ]

    nfs_readdir_page_filler() iterates over entries in a directory, reusing
    the same security label buffer, but does not reset the buffer's length.
    This causes decode_attr_security_label() to return -ERANGE if an entry's
    security label is longer than the previous one's. This error, in
    nfs4_decode_dirent(), only gets passed up as -EAGAIN, which causes another
    failed attempt to copy into the buffer. The second error is ignored and
    the remaining entries do not show up in ls, specifically the getdents64()
    syscall.

    Reproduce by creating multiple files in NFS and giving one of the later
    files a longer security label. ls will not see that file nor any that are
    added afterwards, though they will exist on the backend.

    In nfs_readdir_page_filler(), reset security label buffer length before
    every reuse

    Signed-off-by: Jeffrey Mitchell
    Fixes: b4487b935452 ("nfs: Fix getxattr kernel panic and memory overflow")
    Signed-off-by: Trond Myklebust
    Signed-off-by: Sasha Levin

    Jeffrey Mitchell
     
  • [ Upstream commit 63c3212e7a37d68c89a13bdaebce869f4e064e67 ]

    Per the datasheet the i2c functions use MPP_Sel=0x1. They are documented
    as using MPP_Sel=0x4 as well but mixing 0x1 and 0x4 is clearly wrong. On
    the board tested 0x4 resulted in a non-functioning i2c bus so stick with
    0x1 which works.

    Fixes: d7ae8f8dee7f ("pinctrl: mvebu: pinctrl driver for 98DX3236 SoC")
    Signed-off-by: Chris Packham
    Reviewed-by: Andrew Lunn
    Link: https://lore.kernel.org/r/20200907211712.9697-2-chris.packham@alliedtelesis.co.nz
    Signed-off-by: Linus Walleij
    Signed-off-by: Sasha Levin

    Chris Packham
     
  • [ Upstream commit 850280156f6421a404f2351bee07a0e7bedfd4c6 ]

    If devm_phy_create() fails then we need to call of_clk_del_provider(node)
    to undo the call to of_clk_add_provider().

    Fixes: 71e2f5c5c224 ("phy: ti: Add a new SERDES driver for TI's AM654x SoC")
    Signed-off-by: Dan Carpenter
    Link: https://lore.kernel.org/r/20200905124648.GA183976@mwanda
    Signed-off-by: Vinod Koul
    Signed-off-by: Sasha Levin

    Dan Carpenter
     
  • [ Upstream commit 5fcface659aab7eac4bd65dd116d98b8f7bb88d5 ]

    The raw interrupt status of GPIO maybe set before the interrupt is enabled,
    which would trigger the interrupt event once enabled it from user side.
    This is the case for edge interrupts only. Adding a clear operation when
    setting interrupt type can avoid that.

    There're a few considerations for the solution:
    1) This issue is for edge interrupt only; The interrupts requested by users
    are IRQ_TYPE_LEVEL_HIGH as default, so clearing interrupt when request
    is useless.
    2) The interrupt type can be set to edge when request and following up
    with clearing it though, but the problem is still there once users set
    the interrupt type to level trggier.
    3) We can add a clear operation after each time of setting interrupt
    enable bit, but it is redundant for level trigger interrupt.

    Therefore, the solution is this patch seems the best for now.

    Fixes: 9a3821c2bb47 ("gpio: Add GPIO driver for Spreadtrum SC9860 platform")
    Signed-off-by: Taiping Lai
    Signed-off-by: Chunyan Zhang
    Reviewed-by: Baolin Wang
    Signed-off-by: Bartosz Golaszewski
    Signed-off-by: Sasha Levin

    Taiping Lai
     
  • [ Upstream commit 9e0e8dac985d4bd07d9e62922b9d189d3ca2fccf ]

    The lldd may have made calls to delete a remote port or local port and
    the delete is in progress when the cli then attempts to create a new
    controller. Currently, this proceeds without error although it can't be
    very successful.

    Fix this by validating that both the host port and remote port are
    present when a new controller is to be created.

    Signed-off-by: James Smart
    Reviewed-by: Himanshu Madhani
    Signed-off-by: Christoph Hellwig
    Signed-off-by: Sasha Levin

    James Smart
     
  • [ Upstream commit 50b7c24390a53c78de546215282fb52980f1d7b7 ]

    Currently, we use nvmeq->q_depth as the upper limit for a valid tag in
    nvme_handle_cqe(), it is not correct. Because the available tag number
    is recorded in tagset, which is not equal to nvmeq->q_depth.

    The nvme driver registers interrupts for queues before initializing the
    tagset, because it uses the number of successful request_irq() calls to
    configure the tagset parameters. This allows a race condition with the
    current tag validity check if the controller happens to produce an
    interrupt with a corrupted CQE before the tagset is initialized.

    Replace the driver's indirect tag check with the one already provided by
    the block layer.

    Signed-off-by: Xianting Tian
    Reviewed-by: Keith Busch
    Signed-off-by: Christoph Hellwig
    Signed-off-by: Sasha Levin

    Xianting Tian
     
  • [ Upstream commit b867eef4cf548cd9541225aadcdcee644669b9e1 ]

    The SPIE register contains counts for the TX FIFO so any time the irq
    handler was invoked we would attempt to process the RX/TX fifos. Use the
    SPIM value to mask the events so that we only process interrupts that
    were expected.

    This was a latent issue exposed by commit 3282a3da25bd ("powerpc/64:
    Implement soft interrupt replay in C").

    Signed-off-by: Chris Packham
    Link: https://lore.kernel.org/r/20200904002812.7300-1-chris.packham@alliedtelesis.co.nz
    Signed-off-by: Mark Brown
    Signed-off-by: Sasha Levin

    Chris Packham
     
  • [ Upstream commit 72f04da48a9828ba3ae8ac77bea648bda8b7d0ff ]

    It would seem none of the kernel continuous integration does this:
    $ cd tools/io_uring
    $ make

    Otherwise it may have noticed:
    cc -Wall -Wextra -g -D_GNU_SOURCE -c -o io_uring-bench.o
    io_uring-bench.c
    io_uring-bench.c:133:12: error: static declaration of ‘gettid’
    follows non-static declaration
    133 | static int gettid(void)
    | ^~~~~~
    In file included from /usr/include/unistd.h:1170,
    from io_uring-bench.c:27:
    /usr/include/x86_64-linux-gnu/bits/unistd_ext.h:34:16: note:
    previous declaration of ‘gettid’ was here
    34 | extern __pid_t gettid (void) __THROW;
    | ^~~~~~
    make: *** [: io_uring-bench.o] Error 1

    The problem on Ubuntu 20.04 (with lk 5.9.0-rc5) is that unistd.h
    already defines gettid(). So prefix the local definition with
    "lk_".

    Signed-off-by: Douglas Gilbert
    Signed-off-by: Jens Axboe
    Signed-off-by: Sasha Levin

    Douglas Gilbert
     
  • [ Upstream commit 795d6379a47bcbb88bd95a69920e4acc52849f88 ]

    For 64bit CONFIG_BASE_SMALL=0 systems PID_MAX_LIMIT is set by default to
    4194304. During boot the kernel sets a new value based on number of CPUs
    but no lower than 32768. It is 1024 per CPU so with 128 CPUs the default
    becomes 131072 which needs six digits.
    This value can be increased during run time but must not exceed the
    initial upper limit.

    Systemd sometime after v241 sets it to the upper limit during boot. The
    result is that when the pid exceeds five digits, the trace output is a
    little hard to read because it is no longer properly padded (same like
    on big iron with 98+ CPUs).

    Increase the pid padding to seven digits.

    Link: https://lkml.kernel.org/r/20200904082331.dcdkrr3bkn3e4qlg@linutronix.de

    Signed-off-by: Sebastian Andrzej Siewior
    Signed-off-by: Steven Rostedt (VMware)
    Signed-off-by: Sasha Levin

    Sebastian Andrzej Siewior
     
  • [ Upstream commit 3bd5c7a28a7c3aba07a2d300d43f8e988809e147 ]

    Limit maximum VHT MPDU size by local capability.

    Signed-off-by: Felix Fietkau
    Link: https://lore.kernel.org/r/20200917125031.45009-1-nbd@nbd.name
    Signed-off-by: Johannes Berg
    Signed-off-by: Sasha Levin

    Felix Fietkau
     
  • [ Upstream commit 412a84b5714af56f3eb648bba155107b5edddfdf ]

    Radiotap header field 'Channel flags' has '2 GHz spectrum' set to
    'true' for 6GHz packet.
    Change it to 5GHz as there isn't a separate option available for 6GHz.

    Signed-off-by: Aloka Dixit
    Link: https://lore.kernel.org/r/010101747ab7b703-1d7c9851-1594-43bf-81f7-f79ce7a67cc6-000000@us-west-2.amazonses.com
    Signed-off-by: Johannes Berg
    Signed-off-by: Sasha Levin

    Aloka Dixit
     
  • [ Upstream commit 9fb030a70431a2a2a1b292dbf0b2f399cc072c16 ]

    This patch sets skb->protocol before transmitting frames on the HDLC
    device, so that a user listening on the HDLC device with an AF_PACKET
    socket will see outgoing frames' sll_protocol field correctly set and
    consistent with that of incoming frames.

    1. Control frames in hdlc_cisco and hdlc_ppp

    When these drivers send control frames, skb->protocol is not set.

    This value should be set to htons(ETH_P_HDLC), because when receiving
    control frames, their skb->protocol is set to htons(ETH_P_HDLC).

    When receiving, hdlc_type_trans in hdlc.h is called, which then calls
    cisco_type_trans or ppp_type_trans. The skb->protocol of control frames
    is set to htons(ETH_P_HDLC) so that the control frames can be received
    by hdlc_rcv in hdlc.c, which calls cisco_rx or ppp_rx to process the
    control frames.

    2. hdlc_fr

    When this driver sends control frames, skb->protocol is set to internal
    values used in this driver.

    When this driver sends data frames (from upper stacked PVC devices),
    skb->protocol is the same as that of the user data packet being sent on
    the upper PVC device (for normal PVC devices), or is htons(ETH_P_802_3)
    (for Ethernet-emulating PVC devices).

    However, skb->protocol for both control frames and data frames should be
    set to htons(ETH_P_HDLC), because when receiving, all frames received on
    the HDLC device will have their skb->protocol set to htons(ETH_P_HDLC).

    When receiving, hdlc_type_trans in hdlc.h is called, and because this
    driver doesn't provide a type_trans function in struct hdlc_proto,
    all frames will have their skb->protocol set to htons(ETH_P_HDLC).
    The frames are then received by hdlc_rcv in hdlc.c, which calls fr_rx
    to process the frames (control frames are consumed and data frames
    are re-received on upper PVC devices).

    Cc: Krzysztof Halasa
    Signed-off-by: Xie He
    Signed-off-by: David S. Miller
    Signed-off-by: Sasha Levin

    Xie He