03 Jan, 2020

19 commits

  • Having both in the same file allows a number of simplifications
    to the compat path, and makes it more likely that changes to
    the native path get applied to the compat version as well.

    Reviewed-by: Ben Hutchings
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • Most of the HDIO ioctls are only used by the obsolete drivers/ide
    subsystem, these can be handled by changing ide_cmd_ioctl() to be aware
    of compat mode and doing the correct transformations in place and using
    it as both native and compat handlers for all drivers.

    The SCSI drivers implementing the same commands are already doing
    this in the drivers, so the compat_blkdev_driver_ioctl() function
    is no longer needed now.

    The BLKSECTSET and HDIO_GETGEO_BIG ioctls are not implemented
    in any driver any more and no longer need any conversion.

    Reviewed-by: Ben Hutchings
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • The ata_sas_scsi_ioctl() function implements a number of HDIO_* commands
    for SCSI devices, it is used by all libata drivers as well as a few
    drivers that support SAS attached SATA drives.

    The only command that is not safe for compat ioctls here is
    HDIO_GET_32BIT. Change the implementation to check for in_compat_syscall()
    in order to do both cases correctly, and change all callers to use it
    as both native and compat callback pointers, including the indirect
    callers through sas_ioctl and ata_scsi_ioctl.

    Reviewed-by: Ben Hutchings
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • There is no need for the special cases for the cdrom ioctls any more now,
    so make sure that each cdrom driver has a .compat_ioctl() callback and
    calls cdrom_compat_ioctl() directly there.

    Reviewed-by: Ben Hutchings
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • Now that both native and compat ioctl syscalls are
    in the same file, a couple of simplifications can
    be made, bringing the implementation closer together:

    - do_vfs_ioctl(), ioctl_preallocate(), and compat_ioctl_preallocate()
    can become static, allowing the compiler to optimize better

    - slightly update the coding style for consistency between
    the functions.

    - rather than listing each command in two switch statements
    for the compat case, just call a single function that has
    all the common commands.

    As a side-effect, FS_IOC_RESVSP/FS_IOC_RESVSP64 are now available
    to x86 compat tasks, along with FS_IOC_RESVSP_32/FS_IOC_RESVSP64_32.
    This is harmless for i386 emulation, and can be considered a bugfix
    for x32 emulation, which never supported these in the past.

    Reviewed-by: Ben Hutchings
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • The rest of the fs/compat_ioctl.c file is no longer useful now,
    so move the actual syscall as planned.

    Reviewed-by: Ben Hutchings
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • Each driver calling scsi_ioctl() gets an equivalent compat_ioctl()
    handler that implements the same commands by calling scsi_compat_ioctl().

    The scsi_cmd_ioctl() and scsi_cmd_blk_ioctl() functions are compatible
    at this point, so any driver that calls those can do so for both native
    and compat mode, with the argument passed through compat_ptr().

    With this, we can remove the entries from fs/compat_ioctl.c. The new
    code is larger, but should be easier to maintain and keep updated with
    newly added commands.

    Reviewed-by: Ben Hutchings
    Acked-by: Stefan Hajnoczi
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • Rather than relying on fs/compat_ioctl.c, this adds support
    for a compat_ioctl() callback in the ide-floppy driver directly,
    which lets it translate the scsi commands.

    Reviewed-by: Ben Hutchings
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • bsg_ioctl() calls into scsi_cmd_ioctl() for a couple of generic commands
    and relies on fs/compat_ioctl.c to handle it correctly in compat mode.

    Adding a private compat_ioctl() handler avoids that round-trip and lets
    us get rid of the generic emulation once this is done.

    Note that bsg implements an SG_IO command that is different from the
    other drivers and does not need emulation.

    Reviewed-by: Ben Hutchings
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • In order to move the compat handling for SCSI ioctl commands out of
    fs/compat_ioctl.c into the individual drivers, we need a helper function
    first to match the native ioctl handler called by sd, sr, st, etc.

    Reviewed-by: Ben Hutchings
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • Various block drivers implement the CDROMMULTISESSION,
    CDROM_GET_CAPABILITY, and CDROMEJECT ioctl commands, relying on the
    block layer to handle compat_ioctl mode for them.

    Move this into the drivers directly as a preparation for simplifying
    the block layer later.

    When only integer arguments or no arguments are passed, the
    same handler can be used for .ioctl and .compat_ioctl, and
    when only pointer arguments are passed, the newly added
    blkdev_compat_ptr_ioctl can be used.

    Reviewed-by: Ben Hutchings
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • This is the only ioctl command that does not have a proper
    compat handler. Making the normal implementation do the
    right thing is actually very simply, so just do that by
    using an in_compat_syscall() check to avoid the special
    case in the pkcdvd driver.

    Reviewed-by: Ben Hutchings
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • Again, there is only one file that needs this, so move the conversion
    handler into the native implementation.

    Reviewed-by: Ben Hutchings
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • There is only one implementation of this ioctl, so move the handling out
    of the common block layer code into the place where it's actually needed.

    It also gets called indirectly through pktcdvd, which needs to be aware
    of this change.

    As I noticed, the old implementation of the compat handler failed to
    convert the structure on the way out, so the updated fields never got
    written back to user space. This is either not important, or it has
    never worked and should be fixed now.

    Reviewed-by: Ben Hutchings
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • These drivers implement the HDIO_GET_IDENTITY and CDROMVOLREAD ioctl
    commands, which are compatible between 32-bit and 64-bit user space and
    traditionally handled by compat_blkdev_driver_ioctl().

    As a prerequisite to removing that function, make both drivers use
    blkdev_compat_ptr_ioctl() as their .compat_ioctl callback.

    Reviewed-by: Ben Hutchings
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • A lot of block drivers need only a trivial .compat_ioctl callback.

    Add a helper function that can be set as the callback pointer
    to only convert the argument using the compat_ptr() conversion
    and otherwise assume all input and output data is compatible,
    or handled using in_compat_syscall() checks.

    This mirrors the compat_ptr_ioctl() helper function used in
    character devices.

    Reviewed-by: Ben Hutchings
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • In the v5.4 merge window, a cleanup patch from Al Viro conflicted
    with my rework of the compat handling for sg.c read(). Linus Torvalds
    did a correct merge but pointed out that the resulting code is still
    unsatisfactory.

    I later noticed that the sg_new_read() function still gets the compat
    mode wrong, when the 'count' argument is large enough to pass a
    compat_sg_io_hdr object, but not a nativ sg_io_hdr.

    To address both of these, move the definition of compat_sg_io_hdr
    into a scsi/sg.h to make it visible to sg.c and rewrite the logic
    for reading req_pack_id as well as the size check to a simpler
    version that gets the expected results.

    Fixes: c35a5cfb4150 ("scsi: sg: sg_read(): simplify reading ->pack_id of userland sg_io_hdr_t")
    Fixes: 98aaaec4a150 ("compat_ioctl: reimplement SG_IO handling")
    Reviewed-by: Ben Hutchings
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • In order to avoid needless #ifdef CONFIG_COMPAT checks,
    move the compat_ptr() definition to linux/compat.h
    where it can be seen by any file regardless of the
    architecture.

    Only s390 needs a special definition, this can use the
    self-#define trick we have elsewhere.

    Reviewed-by: Ben Hutchings
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • In order to use compat_* type defininitions in device drivers
    outside of CONFIG_COMPAT, move the inclusion of asm-generic/compat.h
    ahead of the #ifdef.

    All other architectures already do this.

    Acked-by: Will Deacon
    Reviewed-by: Ben Hutchings
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     

30 Dec, 2019

4 commits

  • Linus Torvalds
     
  • Pull RISC-V fixes from Paul Walmsley:
    "One important fix for RISC-V:

    - Redirect any incoming syscall with an ID less than -1 to
    sys_ni_syscall, rather than allowing them to fall through into the
    syscall handler.

    and two minor build fixes:

    - Export __asm_copy_{from,to}_user() from where they are defined.
    This fixes a build error triggered by some randconfigs.

    - Export flush_icache_all(). I'd resisted this before, since
    historically we didn't want modules to be able to flush the I$
    directly; but apparently everyone else is doing it now"

    * tag 'riscv/for-v5.5-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux:
    riscv: export flush_icache_all to modules
    riscv: reject invalid syscalls below -1
    riscv: fix compile failure with EXPORT_SYMBOL() & !MMU

    Linus Torvalds
     
  • Pull /proc/locks formatting fix from Jeff Layton:
    "This is a trivial fix for a _very_ long standing bug in /proc/locks
    formatting. Ordinarily, I'd wait for the merge window for something
    like this, but it is making it difficult to validate some overlayfs
    fixes.

    I've also gone ahead and marked this for stable"

    * tag 'locks-v5.5-1' of git://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux:
    locks: print unsigned ino in /proc/locks

    Linus Torvalds
     
  • Pull cifs fixes from Steve French:
    "One performance fix for large directory searches, and one minor style
    cleanup noticed by Clang"

    * tag '5.5-rc3-smb3-fixes' of git://git.samba.org/sfrench/cifs-2.6:
    cifs: Optimize readdir on reparse points
    cifs: Adjust indentation in smb2_open_file

    Linus Torvalds
     

29 Dec, 2019

1 commit


28 Dec, 2019

11 commits

  • This is needed by LKDTM (crash dump test module), it calls
    flush_icache_range(), which on RISC-V turns into flush_icache_all(). On
    other architectures, the actual implementation is exported, so follow
    that precedence and export it here too.

    Fixes build of CONFIG_LKDTM that fails with:
    ERROR: "flush_icache_all" [drivers/misc/lkdtm/lkdtm.ko] undefined!

    Signed-off-by: Olof Johansson
    Signed-off-by: Paul Walmsley

    Olof Johansson
     
  • Running "stress-ng --enosys 4 -t 20 -v" showed a large number of kernel oops
    with "Unable to handle kernel paging request at virtual address" message. This
    happens when enosys stressor starts testing random non-valid syscalls.

    I forgot to redirect any syscall below -1 to sys_ni_syscall.

    With the patch kernel oops messages are gone while running stress-ng enosys
    stressor.

    Signed-off-by: David Abdurachmanov
    Fixes: 5340627e3fe0 ("riscv: add support for SECCOMP and SECCOMP_FILTER")
    Signed-off-by: Paul Walmsley

    David Abdurachmanov
     
  • When support for !MMU was added, the declaration of
    __asm_copy_to_user() & __asm_copy_from_user() were #ifdefed
    out hence their EXPORT_SYMBOL() give an error message like:
    .../riscv_ksyms.c:13:15: error: '__asm_copy_to_user' undeclared here
    .../riscv_ksyms.c:14:15: error: '__asm_copy_from_user' undeclared here

    Since these symbols are not defined with !MMU it's wrong to export them.
    Same for __clear_user() (even though this one is also declared in
    include/asm-generic/uaccess.h and thus doesn't give an error message).

    Fix this by doing the EXPORT_SYMBOL() directly where these symbols
    are defined: inside lib/uaccess.S itself.

    Fixes: 6bd33e1ece52 ("riscv: fix compile failure with EXPORT_SYMBOL() & !MMU")
    Reported-by: kbuild test robot
    Cc: Christoph Hellwig
    Cc: Palmer Dabbelt
    Cc: Paul Walmsley
    Signed-off-by: Luc Van Oostenryck
    Signed-off-by: Paul Walmsley

    Luc Van Oostenryck
     
  • Pull SCSI fixes from James Bottomley:
    "Four fixes and one spelling update, all in drivers: two in lpfc and
    the rest in mp3sas, cxgbi and target"

    * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
    scsi: target/iblock: Fix protection error with blocks greater than 512B
    scsi: libcxgbi: fix NULL pointer dereference in cxgbi_device_destroy()
    scsi: lpfc: fix spelling mistakes of asynchronous
    scsi: lpfc: fix build failure with DEBUGFS disabled
    scsi: mpt3sas: Fix double free in attach error handling

    Linus Torvalds
     
  • Pull drm fixes from Dave Airlie:
    "Post-xmas food coma recovery fixes. Only three fixes for i915 since I
    expect most people are holidaying.

    i915:
    - power management rc6 fix
    - framebuffer tracking fix
    - display power management ratelimit fix"

    * tag 'drm-fixes-2019-12-28' of git://anongit.freedesktop.org/drm/drm:
    drm/i915: Hold reference to intel_frontbuffer as we track activity
    drm/i915/gt: Ratelimit display power w/a
    drm/i915/pmu: Ensure monotonic rc6

    Linus Torvalds
     
  • …/git/shuah/linux-kselftest

    Pull Kselftest fixes from Shuah Khan:

    - rseq build failures fixes related to glibc 2.30 compatibility from
    Mathieu Desnoyers

    - Kunit fixes and cleanups from SeongJae Park

    - Fixes to filesystems/epoll, firmware, and livepatch build failures
    and skip handling.

    * tag 'linux-kselftest-5.5-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest:
    rseq/selftests: Clarify rseq_prepare_unload() helper requirements
    rseq/selftests: Fix: Namespace gettid() for compatibility with glibc 2.30
    rseq/selftests: Turn off timeout setting
    kunit/kunit_tool_test: Test '--build_dir' option run
    kunit: Rename 'kunitconfig' to '.kunitconfig'
    kunit: Place 'test.log' under the 'build_dir'
    kunit: Create default config in '--build_dir'
    kunit: Remove duplicated defconfig creation
    docs/kunit/start: Use in-tree 'kunit_defconfig'
    selftests: livepatch: Fix it to do root uid check and skip
    selftests: firmware: Fix it to do root uid check and skip
    selftests: filesystems/epoll: fix build error

    Linus Torvalds
     
  • Pull power management fixes from Rafael Wysocki:
    "Fix compile test of the Tegra devfreq driver (Arnd Bergmann) and
    remove redundant Kconfig dependencies from multiple devfreq drivers
    (Leonard Crestez)"

    * tag 'pm-5.5-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
    PM / devfreq: tegra: Add COMMON_CLK dependency
    PM / devfreq: Drop explicit selection of PM_OPP

    Linus Torvalds
     
  • Pull io_uring fixes from Jens Axboe:

    - Removal of now unused busy wqe list (Hillf)

    - Add cond_resched() to io-wq work processing (Hillf)

    - And then the series that I hinted at from last week, which removes
    the sqe from the io_kiocb and keeps all sqe handling on the prep
    side. This guarantees that an opcode can't do the wrong thing and
    read the sqe more than once. This is unchanged from last week, no
    issues have been observed with this in testing. Hence I really think
    we should fold this into 5.5.

    * tag 'io_uring-5.5-20191226' of git://git.kernel.dk/linux-block:
    io-wq: add cond_resched() to worker thread
    io-wq: remove unused busy list from io_sqe
    io_uring: pass in 'sqe' to the prep handlers
    io_uring: standardize the prep methods
    io_uring: read 'count' for IORING_OP_TIMEOUT in prep handler
    io_uring: move all prep state for IORING_OP_{SEND,RECV}_MGS to prep handler
    io_uring: move all prep state for IORING_OP_CONNECT to prep handler
    io_uring: add and use struct io_rw for read/writes
    io_uring: use u64_to_user_ptr() consistently

    Linus Torvalds
     
  • Pull libata fixes from Jens Axboe:
    "Two things in here:

    - First half of a series that fixes ahci_brcm, also marked for
    stable. The other part of the series is going into 5.6 (Florian)

    - sata_nv regression fix that is also marked for stable (Sascha)"

    * tag 'libata-5.5-20191226' of git://git.kernel.dk/linux-block:
    ata: ahci_brcm: Add missing clock management during recovery
    ata: ahci_brcm: BCM7425 AHCI requires AHCI_HFLAG_DELAY_ENGINE
    ata: ahci_brcm: Fix AHCI resources management
    ata: libahci_platform: Export again ahci_platform_able_phys()
    libata: Fix retrieving of active qcs

    Linus Torvalds
     
  • Pull block fixes from Jens Axboe:
    "Only thing here are the changes from Arnd from last week, which now
    have the appropriate header include to ensure they actually compile if
    COMPAT is enabled"

    * tag 'block-5.5-20191226' of git://git.kernel.dk/linux-block:
    compat_ioctl: block: handle Persistent Reservations
    compat_ioctl: block: handle add zone open, close and finish ioctl
    compat_ioctl: block: handle BLKGETZONESZ/BLKGETNRZONES
    compat_ioctl: block: handle BLKREPORTZONE/BLKRESETZONE
    pktcdvd: fix regression on 64-bit architectures

    Linus Torvalds
     
  • Pull GPIO fixes from Linus Walleij:
    "A set of fixes for the v5.5 series:

    - Fix the build for the Xtensa driver.

    - Make sure to set up the parent device for mpc8xxx.

    - Clarify the look-up error message.

    - Fix the usage of the line direction in the mockup device.

    - Fix a type warning on the Aspeed driver.

    - Remove the pointless __exit annotation on the xgs-iproc which is
    causing a compilation problem.

    - Fix up emultation of open drain outputs .get_direction()

    - Fix the IRQ callbacks on the PCA953xx to use bitops and work
    properly.

    - Fix the Kconfig on the Tegra driver"

    * tag 'gpio-v5.5-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio:
    gpio: tegra186: Allow building on Tegra194-only configurations
    gpio: pca953x: Switch to bitops in IRQ callbacks
    gpiolib: fix up emulated open drain outputs
    MAINTAINERS: Append missed file to the database
    gpio: xgs-iproc: remove __exit annotation for iproc_gpio_remove
    gpio: aspeed: avoid return type warning
    gpio: mockup: Fix usage of new GPIO_LINE_DIRECTION
    gpio: Fix error message on out-of-range GPIO in lookup table
    gpio: mpc8xxx: Add platform device to gpiochip->parent
    gpio: xtensa: fix driver build

    Linus Torvalds
     

27 Dec, 2019

1 commit


26 Dec, 2019

4 commits

  • The downstream implementation of ahci_brcm.c did contain clock
    management recovery, but until recently, did that outside of the
    libahci_platform helpers and this was unintentionally stripped out while
    forward porting the patch upstream.

    Add the missing clock management during recovery and sleep for 10
    milliseconds per the design team recommendations to ensure the SATA PHY
    controller and AFE have been fully quiesced.

    Fixes: eb73390ae241 ("ata: ahci_brcm: Recover from failures to identify devices")
    Cc: stable@vger.kernel.org
    Reviewed-by: Hans de Goede
    Signed-off-by: Florian Fainelli
    Signed-off-by: Jens Axboe

    Florian Fainelli
     
  • Set AHCI_HFLAG_DELAY_ENGINE for the BCM7425 AHCI controller thus making
    it conforming to the 'strict' AHCI implementation which this controller
    is based on.

    This solves long link establishment with specific hard drives (e.g.:
    Seagate ST1000VM002-9ZL1 SC12) that would otherwise have to complete the
    error recovery handling before finally establishing a succesful SATA
    link at the desired speed.

    We re-order the hpriv->flags assignment to also remove the NONCQ quirk
    since we can set the flag directly.

    Fixes: 9586114cf1e9 ("ata: ahci_brcmstb: add support MIPS-based platforms")
    Fixes: 423be77daabe ("ata: ahci_brcmstb: add quirk for broken ncq")
    Cc: stable@vger.kernel.org
    Reviewed-by: Hans de Goede
    Signed-off-by: Florian Fainelli
    Signed-off-by: Jens Axboe

    Florian Fainelli
     
  • The AHCI resources management within ahci_brcm.c is a little
    convoluted, largely because it historically had a dedicated clock that
    was managed within this file in the downstream tree. Once brough
    upstream though, the clock was left to be managed by libahci_platform.c
    which is entirely appropriate.

    This patch series ensures that the AHCI resources are fetched and
    enabled before any register access is done, thus avoiding bus errors on
    platforms which clock gate the controller by default.

    As a result we need to re-arrange the suspend() and resume() functions
    in order to avoid accessing registers after the clocks have been turned
    off respectively before the clocks have been turned on. Finally, we can
    refactor brcm_ahci_get_portmask() in order to fetch the number of ports
    from hpriv->mmio which is now accessible without jumping through hoops
    like we used to do.

    The commit pointed in the Fixes tag is both old and new enough not to
    require major headaches for backporting of this patch.

    Fixes: eba68f829794 ("ata: ahci_brcmstb: rename to support across Broadcom SoC's")
    Cc: stable@vger.kernel.org
    Reviewed-by: Hans de Goede
    Signed-off-by: Florian Fainelli
    Signed-off-by: Jens Axboe

    Florian Fainelli
     
  • This reverts commit 6bb86fefa086faba7b60bb452300b76a47cde1a5
    ("libahci_platform: Staticize ahci_platform_able_phys()") we are
    going to need ahci_platform_{enable,disable}_phys() in a subsequent
    commit for ahci_brcm.c in order to properly control the PHY
    initialization order.

    Also make sure the function prototypes are declared in
    include/linux/ahci_platform.h as a result.

    Cc: stable@vger.kernel.org
    Reviewed-by: Hans de Goede
    Signed-off-by: Florian Fainelli
    Signed-off-by: Jens Axboe

    Florian Fainelli