21 Oct, 2018

16 commits

  • Add the optional ability to track which entries in an XArray are free
    and provide xa_alloc() to replace most of the functionality of the IDR.

    Signed-off-by: Matthew Wilcox

    Matthew Wilcox
     
  • Add myself as XArray and IDR maintainer.

    Signed-off-by: Matthew Wilcox

    Matthew Wilcox
     
  • This function reserves a slot in the XArray for users which need
    to acquire multiple locks before storing their entry in the tree and
    so cannot use a plain xa_store().

    Signed-off-by: Matthew Wilcox

    Matthew Wilcox
     
  • This hopefully temporary function is useful for users who have not yet
    been converted to multi-index entries.

    Signed-off-by: Matthew Wilcox

    Matthew Wilcox
     
  • This iterator iterates over each entry that is stored in the index or
    indices specified by the xa_state. This is intended for use for a
    conditional store of a multiindex entry, or to allow entries which are
    about to be removed from the xarray to be disposed of properly.

    Signed-off-by: Matthew Wilcox

    Matthew Wilcox
     
  • The xas_next and xas_prev functions move the xas index by one position,
    and adjust the rest of the iterator state to match it. This is more
    efficient than calling xas_set() as it keeps the iterator at the leaves
    of the tree instead of walking the iterator from the root each time.

    Signed-off-by: Matthew Wilcox

    Matthew Wilcox
     
  • This function frees all the internal memory allocated to the xarray
    and reinitialises it to be empty.

    Signed-off-by: Matthew Wilcox

    Matthew Wilcox
     
  • The xa_extract function combines the functionality of
    radix_tree_gang_lookup() and radix_tree_gang_lookup_tagged().
    It extracts entries matching the specified filter into a normal array.

    Signed-off-by: Matthew Wilcox

    Matthew Wilcox
     
  • The xa_for_each iterator allows the user to efficiently walk a range
    of the array, executing the loop body once for each entry in that
    range that matches the filter. This commit also includes xa_find()
    and xa_find_after() which are helper functions for xa_for_each() but
    may also be useful in their own right.

    In the xas family of functions, we have xas_for_each(), xas_find(),
    xas_next_entry(), xas_for_each_tagged(), xas_find_tagged(),
    xas_next_tagged() and xas_pause().

    Signed-off-by: Matthew Wilcox

    Matthew Wilcox
     
  • Like cmpxchg(), xa_cmpxchg will only store to the index if the current
    entry matches the old entry. It returns the current entry, which is
    usually more useful than the errno returned by radix_tree_insert().
    For the users who really only want the errno, the xa_insert() wrapper
    provides a more convenient calling convention.

    Signed-off-by: Matthew Wilcox

    Matthew Wilcox
     
  • xa_store() differs from radix_tree_insert() in that it will overwrite an
    existing element in the array rather than returning an error. This is
    the behaviour which most users want, and those that want more complex
    behaviour generally want to use the xas family of routines anyway.

    For memory allocation, xa_store() will first attempt to request memory
    from the slab allocator; if memory is not immediately available, it will
    drop the xa_lock and allocate memory, keeping a pointer in the xa_state.
    It does not use the per-CPU cache, although those will continue to exist
    until all radix tree users are converted to the xarray.

    This patch also includes xa_erase() and __xa_erase() for a streamlined
    way to store NULL. Since there is no need to allocate memory in order
    to store a NULL in the XArray, we do not need to trouble the user with
    deciding what memory allocation flags to use.

    Signed-off-by: Matthew Wilcox

    Matthew Wilcox
     
  • XArray marks are like the radix tree tags, only slightly more strongly
    typed. They are renamed in order to distinguish them from tagged
    pointers. This commit adds the basic get/set/clear operations.

    Signed-off-by: Matthew Wilcox

    Matthew Wilcox
     
  • The xa_load function brings with it a lot of infrastructure; xa_empty(),
    xa_is_err(), and large chunks of the XArray advanced API that are used
    to implement xa_load.

    As the test-suite demonstrates, it is possible to use the XArray functions
    on a radix tree. The radix tree functions depend on the GFP flags being
    stored in the root of the tree, so it's not possible to use the radix
    tree functions on an XArray.

    Signed-off-by: Matthew Wilcox

    Matthew Wilcox
     
  • This is documentation on how to use the XArray, not details about its
    internal implementation.

    Signed-off-by: Matthew Wilcox
    Acked-by: Josef Bacik

    Matthew Wilcox
     
  • This is a direct replacement for struct radix_tree_node. A couple of
    struct members have changed name, so convert those. Use a #define so
    that radix tree users continue to work without change.

    Signed-off-by: Matthew Wilcox
    Reviewed-by: Josef Bacik

    Matthew Wilcox
     
  • This is a direct replacement for struct radix_tree_root. Some of the
    struct members have changed name; convert those, and use a #define so
    that radix_tree users continue to work without change.

    Signed-off-by: Matthew Wilcox
    Reviewed-by: Josef Bacik

    Matthew Wilcox
     

30 Sep, 2018

8 commits

  • Instead of storing a pointer to the slot containing the canonical entry,
    store the offset of the slot. Produces slightly more efficient code
    (~300 bytes) and simplifies the implementation.

    Signed-off-by: Matthew Wilcox
    Reviewed-by: Josef Bacik

    Matthew Wilcox
     
  • Introduce xarray value entries and tagged pointers to replace radix
    tree exceptional entries. This is a slight change in encoding to allow
    the use of an extra bit (we can now store BITS_PER_LONG - 1 bits in a
    value entry). It is also a change in emphasis; exceptional entries are
    intimidating and different. As the comment explains, you can choose
    to store values or pointers in the xarray and they are both first-class
    citizens.

    Signed-off-by: Matthew Wilcox
    Reviewed-by: Josef Bacik

    Matthew Wilcox
     
  • An upcoming change to the encoding of internal entries will set the bottom
    two bits to 0b10. Unfortunately, m68k only aligns some data structures
    to 2 bytes, so the IDR will interpret them as internal entries and things
    will go badly wrong.

    Change the radix tree so that it stops either when the node indicates
    that it's the bottom of the tree (shift == 0) or when the entry is not an
    internal entry. This means we cannot insert an arbitrary kernel pointer
    as a multiorder entry, but the IDR does not permit multiorder entries.

    Annoyingly, this means the IDR can no longer take advantage of the radix
    tree's ability to store a single entry at offset 0 without allocating
    memory. A pointer which is 2-byte aligned cannot be stored directly in
    the root as it would be indistinguishable from a node, so we must allocate
    a node in order to store a 2-byte pointer at index 0. The idr_replace()
    function does not take a GFP flags argument, so cannot allocate memory.
    If a user inserts a 4-byte aligned pointer at index 0 and then replaces
    it with a 2-byte aligned pointer, we must be able to store it.

    Arbitrary pointer values are still not permitted; pointers of the
    form 2 + (i * 4) for values of i between 0 and 1023 are reserved for
    the implementation. These are not valid kernel pointers as they would
    point into the zero page.

    This change does cause a runtime memory consumption regression for
    the IDA. I will recover that later.

    Signed-off-by: Matthew Wilcox
    Tested-by: Guenter Roeck

    Matthew Wilcox
     
  • Redirect some older email addresses that are in the git logs.

    Signed-off-by: Matthew Wilcox

    Matthew Wilcox
     
  • Jens writes:
    "Block fixes for 4.19-rc6

    A set of fixes that should go into this release. This pull request
    contains:

    - A fix (hopefully) for the persistent grants for xen-blkfront. A
    previous fix from this series wasn't complete, hence reverted, and
    this one should hopefully be it. (Boris Ostrovsky)

    - Fix for an elevator drain warning with SMR devices, which is
    triggered when you switch schedulers (Damien)

    - bcache deadlock fix (Guoju Fang)

    - Fix for the block unplug tracepoint, which has had the
    timer/explicit flag reverted since 4.11 (Ilya)

    - Fix a regression in this series where the blk-mq timeout hook is
    invoked with the RCU read lock held, hence preventing it from
    blocking (Keith)

    - NVMe pull from Christoph, with a single multipath fix (Susobhan Dey)"

    * tag 'for-linus-20180929' of git://git.kernel.dk/linux-block:
    xen/blkfront: correct purging of persistent grants
    Revert "xen/blkfront: When purging persistent grants, keep them in the buffer"
    blk-mq: I/O and timer unplugs are inverted in blktrace
    bcache: add separate workqueue for journal_write to avoid deadlock
    xen/blkfront: When purging persistent grants, keep them in the buffer
    block: fix deadline elevator drain for zoned block devices
    blk-mq: Allow blocking queue tag iter callbacks
    nvme: properly propagate errors in nvme_mpath_init

    Greg Kroah-Hartman
     
  • Thomas writes:
    "A single fix for the AMD memory encryption boot code so it does not
    read random garbage instead of the cached encryption bit when a kexec
    kernel is allocated above the 32bit address limit."

    * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    x86/boot: Fix kexec booting failure in the SEV bit detection code

    Greg Kroah-Hartman
     
  • Thomas writes:
    "Three small fixes for clocksource drivers:
    - Proper error handling in the Atmel PIT driver
    - Add CLOCK_SOURCE_SUSPEND_NONSTOP for TI SoCs so suspend works again
    - Fix the next event function for Facebook Backpack-CMM BMC chips so
    usleep(100) doesnt sleep several milliseconds"

    * 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    clocksource/drivers/timer-atmel-pit: Properly handle error cases
    clocksource/drivers/fttmr010: Fix set_next_event handler
    clocksource/drivers/ti-32k: Add CLOCK_SOURCE_SUSPEND_NONSTOP flag for non-am43 SoCs

    Greg Kroah-Hartman
     
  • Thomas writes:
    "A single fix for a missing sanity check when a pinned event is tried
    to be read on the wrong CPU due to a legit event scheduling failure."

    * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    perf/core: Add sanity check to deal with pinned event failure

    Greg Kroah-Hartman
     

29 Sep, 2018

12 commits

  • Rafael writes:
    "Power management fix for 4.19-rc6

    Fix incorrect __init and __exit annotations in the Qualcomm
    Kryo cpufreq driver (Nathan Chancellor)."

    * tag 'pm-4.19-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
    cpufreq: qcom-kryo: Fix section annotations

    Greg Kroah-Hartman
     
  • There is currently a warning when building the Kryo cpufreq driver into
    the kernel image:

    WARNING: vmlinux.o(.text+0x8aa424): Section mismatch in reference from
    the function qcom_cpufreq_kryo_probe() to the function
    .init.text:qcom_cpufreq_kryo_get_msm_id()
    The function qcom_cpufreq_kryo_probe() references
    the function __init qcom_cpufreq_kryo_get_msm_id().
    This is often because qcom_cpufreq_kryo_probe lacks a __init
    annotation or the annotation of qcom_cpufreq_kryo_get_msm_id is wrong.

    Remove the '__init' annotation from qcom_cpufreq_kryo_get_msm_id
    so that there is no more mismatch warning.

    Additionally, Nick noticed that the remove function was marked as
    '__init' when it should really be marked as '__exit'.

    Fixes: 46e2856b8e18 (cpufreq: Add Kryo CPU scaling driver)
    Fixes: 5ad7346b4ae2 (cpufreq: kryo: Add module remove and exit)
    Reported-by: Nick Desaulniers
    Signed-off-by: Nathan Chancellor
    Acked-by: Viresh Kumar
    Cc: 4.18+ # 4.18+
    Signed-off-by: Rafael J. Wysocki

    Nathan Chancellor
     
  • Christoph writes:
    "dma mapping fix for 4.19-rc6

    fix a missing Kconfig symbol for commits introduced in 4.19-rc"

    * tag 'dma-mapping-4.19-3' of git://git.infradead.org/users/hch/dma-mapping:
    dma-mapping: add the missing ARCH_HAS_SYNC_DMA_FOR_CPU_ALL declaration

    Greg Kroah-Hartman
     
  • Dmitry writes:
    "Input updates for v4.19-rc5

    Just a few driver fixes"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
    Input: uinput - allow for max == min during input_absinfo validation
    Input: elantech - enable middle button of touchpad on ThinkPad P72
    Input: atakbd - fix Atari CapsLock behaviour
    Input: atakbd - fix Atari keymap
    Input: egalax_ts - add system wakeup support
    Input: gpio-keys - fix a documentation index issue

    Greg Kroah-Hartman
     
  • Mark writes:
    "spi: Fixes for v4.19

    Quite a few fixes for the Renesas drivers in here, plus a fix for the
    Tegra driver and some documentation fixes for the recently added
    spi-mem code. The Tegra fix is relatively large but fairly
    straightforward and mechanical, it runs on probe so it's been
    reasonably well covered in -next testing."

    * tag 'spi-fix-v4.19-rc5' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi:
    spi: spi-mem: Move the DMA-able constraint doc to the kerneldoc header
    spi: spi-mem: Add missing description for data.nbytes field
    spi: rspi: Fix interrupted DMA transfers
    spi: rspi: Fix invalid SPI use during system suspend
    spi: sh-msiof: Fix handling of write value for SISTR register
    spi: sh-msiof: Fix invalid SPI use during system suspend
    spi: gpio: Fix copy-and-paste error
    spi: tegra20-slink: explicitly enable/disable clock

    Greg Kroah-Hartman
     
  • Mark writes:
    "regulator: Fixes for 4.19

    A collection of fairly minor bug fixes here, a couple of driver
    specific ones plus two core fixes. There's one fix for the new
    suspend state code which fixes some confusion with constant values
    that are supposed to indicate noop operation and another fixing a
    race condition with the creation of sysfs files on new regulators."

    * tag 'regulator-v4.19-rc5' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator:
    regulator: fix crash caused by null driver data
    regulator: Fix 'do-nothing' value for regulators without suspend state
    regulator: da9063: fix DT probing with constraints
    regulator: bd71837: Disable voltage monitoring for LDO3/4

    Greg Kroah-Hartman
     
  • Michael writes:
    "powerpc fixes for 4.19 #3

    A reasonably big batch of fixes due to me being away for a few weeks.

    A fix for the TM emulation support on Power9, which could result in
    corrupting the guest r11 when running under KVM.

    Two fixes to the TM code which could lead to userspace GPR corruption
    if we take an SLB miss at exactly the wrong time.

    Our dynamic patching code had a bug that meant we could patch freed
    __init text, which could lead to corrupting userspace memory.

    csum_ipv6_magic() didn't work on little endian platforms since we
    optimised it recently.

    A fix for an endian bug when reading a device tree property telling
    us how many storage keys the machine has available.

    Fix a crash seen on some configurations of PowerVM when migrating the
    partition from one machine to another.

    A fix for a regression in the setup of our CPU to NUMA node mapping
    in KVM guests.

    A fix to our selftest Makefiles to make them work since a recent
    change to the shared Makefile logic."

    * tag 'powerpc-4.19-3' of https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux:
    selftests/powerpc: Fix Makefiles for headers_install change
    powerpc/numa: Use associativity if VPHN hcall is successful
    powerpc/tm: Avoid possible userspace r1 corruption on reclaim
    powerpc/tm: Fix userspace r13 corruption
    powerpc/pseries: Fix unitialized timer reset on migration
    powerpc/pkeys: Fix reading of ibm, processor-storage-keys property
    powerpc: fix csum_ipv6_magic() on little endian platforms
    powerpc/powernv/ioda2: Reduce upper limit for DMA window size (again)
    powerpc: Avoid code patching freed init sections
    KVM: PPC: Book3S HV: Fix guest r11 corruption with POWER9 TM workarounds

    Greg Kroah-Hartman
     
  • Linus writes:
    "Pin control fixes for v4.19:
    - Fixes to x86 hardware:
    - AMD interrupt debounce issues
    - Faulty Intel cannonlake register offset
    - Revert pin translation IRQ locking"

    * tag 'pinctrl-v4.19-4' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl:
    Revert "pinctrl: intel: Do pin translation when lock IRQ"
    pinctrl: cannonlake: Fix HOSTSW_OWN register offset of H variant
    pinctrl/amd: poll InterruptEnable bits in amd_gpio_irq_set_type

    Greg Kroah-Hartman
     
  • It is possible that a failure can occur during the scheduling of a
    pinned event. The initial portion of perf_event_read_local() contains
    the various error checks an event should pass before it can be
    considered valid. Ensure that the potential scheduling failure
    of a pinned event is checked for and have a credible error.

    Suggested-by: Peter Zijlstra
    Signed-off-by: Reinette Chatre
    Signed-off-by: Thomas Gleixner
    Acked-by: Peter Zijlstra (Intel)
    Cc: fenghua.yu@intel.com
    Cc: tony.luck@intel.com
    Cc: acme@kernel.org
    Cc: gavin.hindman@intel.com
    Cc: jithu.joseph@intel.com
    Cc: dave.hansen@intel.com
    Cc: hpa@zytor.com
    Cc: stable@vger.kernel.org
    Link: https://lkml.kernel.org/r/6486385d1f30336e9973b24c8c65f5079543d3d3.1537377064.git.reinette.chatre@intel.com

    Reinette Chatre
     
  • Dave writes:
    "drm fixes for 4.19-rc6

    Looks like a pretty normal week for graphics,

    core: syncobj fix, panel link regression revert
    amd: suspend/resume fixes, EDID emulation fix
    mali-dp: NV12 writeback and vblank reset fixes
    etnaviv: DMA setup fix"

    * tag 'drm-fixes-2018-09-28' of git://anongit.freedesktop.org/drm/drm:
    drm/amd/display: Fix Edid emulation for linux
    drm/amd/display: Fix Vega10 lightup on S3 resume
    drm/amdgpu: Fix vce work queue was not cancelled when suspend
    Revert "drm/panel: Add device_link from panel device to DRM device"
    drm/syncobj: Don't leak fences when WAIT_FOR_SUBMIT is set
    drm/malidp: Fix writeback in NV12
    drm: mali-dp: Call drm_crtc_vblank_reset on device init
    drm/etnaviv: add DMA configuration for etnaviv platform device

    Greg Kroah-Hartman
     
  • …l/git/palmer/riscv-linux

    Palmer writes:
    "A Single RISC-V Update for 4.19-rc6

    The Debian guys have been pushing on our port and found some
    unversioned symbols leaking into modules. This PR contains a single
    fix for that issue."

    * tag 'riscv-for-linus-4.19-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/palmer/riscv-linux:
    RISC-V: include linux/ftrace.h in asm-prototypes.h

    Greg Kroah-Hartman
     
  • Bjorn writes:
    "PCI fixes:

    - Fix ACPI hotplug issue that causes black screen crash at boot (Mika
    Westerberg)

    - Fix DesignWare "scheduling while atomic" issues (Jisheng Zhang)

    - Add PPC contacts to MAINTAINERS for PCI core error handling (Bjorn
    Helgaas)

    - Sort Mobiveil MAINTAINERS entry (Lorenzo Pieralisi)"

    * tag 'pci-v4.19-fixes-2' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/helgaas/pci:
    ACPI / hotplug / PCI: Don't scan for non-hotplug bridges if slot is not bridge
    PCI: dwc: Fix scheduling while atomic issues
    MAINTAINERS: Move mobiveil PCI driver entry where it belongs
    MAINTAINERS: Update PPC contacts for PCI core error handling

    Greg Kroah-Hartman
     

28 Sep, 2018

4 commits

  • Pull NVMe fix from Christoph.

    * 'nvme-4.19' of git://git.infradead.org/nvme:
    nvme: properly propagate errors in nvme_mpath_init

    Jens Axboe
     
  • Commit a46b53672b2c2e3770b38a4abf90d16364d2584b ("xen/blkfront: cleanup
    stale persistent grants") introduced a regression as purged persistent
    grants were not pu into the list of free grants again. Correct that.

    Reviewed-by: Boris Ostrovsky
    Signed-off-by: Juergen Gross
    Signed-off-by: Jens Axboe

    Juergen Gross
     
  • Fix didn't work for all cases, reverting to add a (hopefully)
    better fix.

    This reverts commit f151ba989d149bbdfc90e5405724bbea094f9b17.

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • Commit b2d35fa5fc80 ("selftests: add headers_install to lib.mk")
    introduced a requirement that Makefiles more than one level below the
    selftests directory need to define top_srcdir, but it didn't update
    any of the powerpc Makefiles.

    This broke building all the powerpc selftests with eg:

    make[1]: Entering directory '/src/linux/tools/testing/selftests/powerpc'
    BUILD_TARGET=/src/linux/tools/testing/selftests/powerpc/alignment; mkdir -p $BUILD_TARGET; make OUTPUT=$BUILD_TARGET -k -C alignment all
    make[2]: Entering directory '/src/linux/tools/testing/selftests/powerpc/alignment'
    ../../lib.mk:20: ../../../../scripts/subarch.include: No such file or directory
    make[2]: *** No rule to make target '../../../../scripts/subarch.include'.
    make[2]: Failed to remake makefile '../../../../scripts/subarch.include'.
    Makefile:38: recipe for target 'alignment' failed

    Fix it by setting top_srcdir in the affected Makefiles.

    Fixes: b2d35fa5fc80 ("selftests: add headers_install to lib.mk")
    Signed-off-by: Michael Ellerman

    Michael Ellerman