Hi Linus, These are the proposed RDMA patches for 5.15. This is quite a small cycle, no major series stands out. The HNS and rxe drivers saw the most activity this cycle, with rxe being broken for a good chunk of time. The significant deleted line count is due to a SPDX cleanup series. There is a merge conflict related to the scatterlist fixup which changed a function name while DRM added a new users. You'll need to apply this hunk from Stephen into the merge to make it compile: diff --git b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c index 771eb2963123ff..d3d95934a0473f 100644 --- b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c +++ a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c @@ -382,7 +382,6 @@ i915_ttm_region(struct ttm_device *bdev, int ttm_mem_type) static struct sg_table *i915_ttm_tt_get_st(struct ttm_tt *ttm) { struct i915_ttm_tt *i915_tt = container_of(ttm, typeof(*i915_tt), ttm); - struct scatterlist *sg; struct sg_table *st; int ret; @@ -393,13 +392,13 @@ static struct sg_table *i915_ttm_tt_get_st(struct ttm_tt *ttm) if (!st) return ERR_PTR(-ENOMEM); - sg = __sg_alloc_table_from_pages + ret = sg_alloc_table_from_pages_segment (st, ttm->pages, ttm->num_pages, 0, (unsigned long)ttm->num_pages << PAGE_SHIFT, - i915_sg_segment_size(), NULL, 0, GFP_KERNEL); - if (IS_ERR(sg)) { + i915_sg_segment_size(), GFP_KERNEL); + if (ret) { kfree(st); - return ERR_CAST(sg); + return ERR_PTR(ret); } ret = dma_map_sgtable(i915_tt->dev, st, DMA_BIDIRECTIONAL, 0); The tag for-linus-merged with my merge resolution to your tree is also available to pull. Thanks, Jason The following changes since commit 7c60610d476766e128cc4284bb6349732cbd6606: Linux 5.14-rc6 (2021-08-15 13:40:53 -1000) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma.git tags/for-linus for you to fetch changes up to 6a217437f9f5482a3f6f2dc5fcd27cf0f62409ac: Merge branch 'sg_nents' into rdma.git for-next (2021-08-30 09:49:59 -0300) ---------------------------------------------------------------- RDMA v5.15 merge window Pull Request - Various cleanup and small features for rtrs - kmap_local_page() conversions - Driver updates and fixes for: efa, rxe, mlx5, hfi1, qed, hns - Cache the IB subnet prefix - Rework how CRC is calcuated in rxe - Clean reference counting in iwpm's netlink - Pull object allocation and lifecycle for user QPs to the uverbs core code - Several small hns features and continued general code cleanups - Fix the scatterlist confusion of orig_nents/nents introduced in an earlier patch creating the append operation ---------------------------------------------------------------- Anand Khoje (3): IB/core: Updating cache for subnet_prefix in config_non_roce_gid_cache() IB/core: Shifting initialization of device->cache_lock IB/core: Read subnet_prefix in ib_query_port via cache. Bob Pearson (9): RDMA/rxe: Move ICRC checking to a subroutine RDMA/rxe: Move rxe_xmit_packet to a subroutine RDMA/rxe: Fixup rxe_send and rxe_loopback RDMA/rxe: Move ICRC generation to a subroutine RDMA/rxe: Move rxe_crc32 to a subroutine RDMA/rxe: Fixup rxe_icrc_hdr RDMA/rxe: Move crc32 init code to rxe_icrc.c RDMA/rxe: Add kernel-doc comments to rxe_icrc.c RDMA/rxe: Fix types in rxe_icrc.c Cai Huoqing (3): RDMA/hfi1: Fix typo in comments IB/rdmavt: Convert to SPDX identifier RDMA/hfi1: Convert to SPDX identifier Christoph Hellwig (1): RDMA/hfi1: Stop using seq_get_buf in _driver_stats_seq_show Christophe JAILLET (2): RDMA/rtrs: Remove a useless kfree() RDMA: switch from 'pci_' to 'dma_' API Gal Pressman (3): RDMA/efa: Split hardware stats to device and port stats RDMA/efa: Remove unused cpu field from irq struct RDMA/efa: Rename vector field in efa_irq struct to irqn Gioh Kim (3): RDMA/rtrs: Remove all likely and unlikely RDMA/rtrs-clt: Fix counting inflight IO RDMA/rtrs: Remove (void) casting for functions HÃ¥kon Bugge (2): RDMA/core/sa_query: Remove unused function RDMA/core/sa_query: Retry SA queries Ira Weiny (2): RDMA/siw: Remove kmap() RDMA/siw: Convert siw_tx_hdt() to kmap_local_page() Jack Wang (7): RDMA/rtrs: Add error messages for failed operations. RDMA/rtrs: move wr_cnt from rtrs_srv_con to rtrs_con RDMA/rtrs: Enable the same selective signal for heartbeat and IO RDMA/rtrs: Make rtrs_post_rdma_write_imm_empty static RDMA/rtrs: Remove unused flags parameter RDMA/rtrs: Move sq_wr_avail to rtrs_con RDMA/rtrs: Remove unused functions Jason Gunthorpe (3): Merge branch 'mlx5_dcs' into rdma.git for-next Merge branch 'mlx5-next' of git://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux Merge branch 'sg_nents' into rdma.git for-next Junxian Huang (3): RDMA/hns: Bugfix for data type of dip_idx RDMA/hns: Bugfix for the missing assignment for dip_idx RDMA/hns: Bugfix for incorrect association between dip_idx and dgid Lang Cheng (2): RDMA/hns: Remove unsupport cmdq mode RDMA/hns: Ownerbit mode add control field Leon Romanovsky (20): RDMA/iwcm: Release resources if iw_cm module initialization fails RDMA/iwpm: Remove not-needed reference counting RDMA/iwpm: Rely on the rdma_nl_[un]register() to ensure that requests are valid docs: Fix infiniband uverbs minor number RDMA/hns: Don't skip IB creation flow for regular RC QP RDMA/hns: Don't overwrite supplied QP attributes RDMA/efa: Remove double QP type assignment RDMA/mlx5: Cancel pkey work before destroying device resources RDMA/mlx5: Delete device resource mutex that didn't protect anything RDMA/mlx5: Rework custom driver QP type creation RDMA/rdmavt: Decouple QP and SGE lists allocations RDMA: Globally allocate and release QP memory RDMA/mlx5: Drop in-driver verbs object creations RDMA/mlx5: Delete not-available udata check RDMA/core: Delete duplicated and unreachable code RDMA/core: Remove protection from wrong in-kernel API usage RDMA/core: Reorganize create QP low-level functions RDMA/core: Configure selinux QP during creation RDMA/core: Properly increment and decrement QP usecnts RDMA/core: Create clean QP creations interface for uverbs Li Zhijian (1): IB/core: Remove deprecated current_seq comments Lior Nahmanson (3): RDMA/mlx5: Separate DCI QP creation logic RDMA/mlx5: Add DCS offload support RDMA/mlx5: Relax DCS QP creation checks Maor Gottlieb (3): lib/scatterlist: Provide a dedicated function to support table append lib/scatterlist: Fix wrong update of orig_nents RDMA: Use the sg_table directly and remove the opencoded version from umem Md Haris Iqbal (1): RDMA/rtrs-clt: During add_path change for_new_clt according to path_num Mike Marciniszyn (2): IB/hfi1: Indicate DMA wait when txq is queued for wakeup IB/hfi1: Adjust pkey entry in index 0 Prabhakar Kushwaha (3): RDMA/qed: Use accurate error num in qed_cxt_dynamic_ilt_alloc RDMA/qedr: Improve error logs for rdma_alloc_tid error return RDMA/qedr: Move variables reset to qedr_set_common_qp_params() Shaokun Zhang (1): RDMA/irdma: Remove the repeated declaration Weihang Li (2): MAINTAINERS: Update maintainers of HiSilicon RoCE RDMA/hns: Remove RST2RST error prints for hw v1 Wenpeng Liang (4): RDMA/hns: Fix query destination qpn RDMA/hns: Fix QP's resp incomplete assignment RDMA/hns: Remove dqpn filling when modify qp from Init to Init RDMA/hns: Adjust the order in which irq are requested and enabled Xiao Yang (1): RDMA/rxe: Remove the repeated 'mr->umem = umem' Xinhao Liu (1): RDMA/hns: Delete unnecessary blank lines. Xiyu Yang (1): RDMA/hfi1: Convert from atomic_t to refcount_t on hfi1_devdata->user_refcount Yangyang Li (3): RDMA/hns: Use IDA interface to manage uar index RDMA/hns: Use IDA interface to manage srq index RDMA/hns: Delete unused hns bitmap interface Yixing Liu (3): RDMA/hns: Enable stash feature of HIP09 RDMA/hns: Fix incorrect lsn field RDMA/hns: Encapsulate the qp db as a function YueHaibing (1): RDMA/hns: Fix return in hns_roce_rereg_user_mr() Documentation/admin-guide/devices.txt | 6 +- MAINTAINERS | 2 +- drivers/gpu/drm/drm_prime.c | 13 +- drivers/gpu/drm/i915/gem/i915_gem_ttm.c | 9 +- drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 11 +- drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 14 +- drivers/infiniband/core/cache.c | 10 +- drivers/infiniband/core/cma.c | 3 + drivers/infiniband/core/core_priv.h | 44 +---- drivers/infiniband/core/device.c | 12 +- drivers/infiniband/core/iwcm.c | 19 +- drivers/infiniband/core/iwpm_msg.c | 34 +--- drivers/infiniband/core/iwpm_util.c | 78 ++------ drivers/infiniband/core/iwpm_util.h | 18 -- drivers/infiniband/core/restrack.c | 2 +- drivers/infiniband/core/sa_query.c | 186 +----------------- drivers/infiniband/core/umem.c | 56 +++--- drivers/infiniband/core/umem_dmabuf.c | 5 +- drivers/infiniband/core/umem_odp.c | 3 - drivers/infiniband/core/uverbs_cmd.c | 31 +-- drivers/infiniband/core/uverbs_std_types_qp.c | 29 +-- drivers/infiniband/core/verbs.c | 244 +++++++++++++++--------- drivers/infiniband/hw/bnxt_re/ib_verbs.c | 26 +-- drivers/infiniband/hw/bnxt_re/ib_verbs.h | 7 +- drivers/infiniband/hw/bnxt_re/main.c | 1 + drivers/infiniband/hw/cxgb4/iw_cxgb4.h | 5 +- drivers/infiniband/hw/cxgb4/provider.c | 1 + drivers/infiniband/hw/cxgb4/qp.c | 37 ++-- drivers/infiniband/hw/efa/efa.h | 10 +- drivers/infiniband/hw/efa/efa_main.c | 20 +- drivers/infiniband/hw/efa/efa_verbs.c | 149 ++++++++------- drivers/infiniband/hw/hfi1/affinity.c | 45 +---- drivers/infiniband/hw/hfi1/affinity.h | 45 +---- drivers/infiniband/hw/hfi1/aspm.h | 45 +---- drivers/infiniband/hw/hfi1/chip.c | 50 +---- drivers/infiniband/hw/hfi1/chip.h | 48 +---- drivers/infiniband/hw/hfi1/chip_registers.h | 50 +---- drivers/infiniband/hw/hfi1/common.h | 44 +---- drivers/infiniband/hw/hfi1/debugfs.c | 58 +----- drivers/infiniband/hw/hfi1/debugfs.h | 49 +---- drivers/infiniband/hw/hfi1/device.c | 44 +---- drivers/infiniband/hw/hfi1/device.h | 49 +---- drivers/infiniband/hw/hfi1/driver.c | 44 +---- drivers/infiniband/hw/hfi1/efivar.c | 44 +---- drivers/infiniband/hw/hfi1/efivar.h | 45 +---- drivers/infiniband/hw/hfi1/eprom.c | 45 +---- drivers/infiniband/hw/hfi1/eprom.h | 44 +---- drivers/infiniband/hw/hfi1/exp_rcv.c | 44 +---- drivers/infiniband/hw/hfi1/exp_rcv.h | 48 +---- drivers/infiniband/hw/hfi1/fault.c | 45 +---- drivers/infiniband/hw/hfi1/fault.h | 50 +---- drivers/infiniband/hw/hfi1/file_ops.c | 51 +---- drivers/infiniband/hw/hfi1/firmware.c | 44 +---- drivers/infiniband/hw/hfi1/hfi.h | 54 +----- drivers/infiniband/hw/hfi1/init.c | 53 +---- drivers/infiniband/hw/hfi1/intr.c | 44 +---- drivers/infiniband/hw/hfi1/iowait.h | 49 +---- drivers/infiniband/hw/hfi1/ipoib_tx.c | 3 + drivers/infiniband/hw/hfi1/mad.c | 44 +---- drivers/infiniband/hw/hfi1/mad.h | 45 +---- drivers/infiniband/hw/hfi1/mmu_rb.c | 45 +---- drivers/infiniband/hw/hfi1/mmu_rb.h | 45 +---- drivers/infiniband/hw/hfi1/msix.c | 43 ----- drivers/infiniband/hw/hfi1/msix.h | 44 +---- drivers/infiniband/hw/hfi1/opa_compat.h | 48 +---- drivers/infiniband/hw/hfi1/pcie.c | 55 +----- drivers/infiniband/hw/hfi1/pio.c | 44 +---- drivers/infiniband/hw/hfi1/pio.h | 48 +---- drivers/infiniband/hw/hfi1/pio_copy.c | 44 +---- drivers/infiniband/hw/hfi1/platform.c | 44 +---- drivers/infiniband/hw/hfi1/platform.h | 45 +---- drivers/infiniband/hw/hfi1/qp.c | 44 +---- drivers/infiniband/hw/hfi1/qp.h | 48 +---- drivers/infiniband/hw/hfi1/qsfp.c | 44 +---- drivers/infiniband/hw/hfi1/qsfp.h | 44 +---- drivers/infiniband/hw/hfi1/rc.c | 44 +---- drivers/infiniband/hw/hfi1/ruc.c | 46 +---- drivers/infiniband/hw/hfi1/sdma.c | 46 +---- drivers/infiniband/hw/hfi1/sdma.h | 49 +---- drivers/infiniband/hw/hfi1/sdma_txreq.h | 44 +---- drivers/infiniband/hw/hfi1/sysfs.c | 45 +---- drivers/infiniband/hw/hfi1/tid_rdma.c | 4 +- drivers/infiniband/hw/hfi1/trace.c | 44 +---- drivers/infiniband/hw/hfi1/trace.h | 44 +---- drivers/infiniband/hw/hfi1/trace_ctxts.h | 45 +---- drivers/infiniband/hw/hfi1/trace_dbg.h | 45 +---- drivers/infiniband/hw/hfi1/trace_ibhdrs.h | 45 +---- drivers/infiniband/hw/hfi1/trace_misc.h | 45 +---- drivers/infiniband/hw/hfi1/trace_mmu.h | 45 +---- drivers/infiniband/hw/hfi1/trace_rc.h | 45 +---- drivers/infiniband/hw/hfi1/trace_rx.h | 45 +---- drivers/infiniband/hw/hfi1/trace_tx.h | 44 +---- drivers/infiniband/hw/hfi1/uc.c | 44 +---- drivers/infiniband/hw/hfi1/ud.c | 44 +---- drivers/infiniband/hw/hfi1/user_exp_rcv.c | 57 +----- drivers/infiniband/hw/hfi1/user_exp_rcv.h | 49 +---- drivers/infiniband/hw/hfi1/user_pages.c | 44 +---- drivers/infiniband/hw/hfi1/user_sdma.c | 45 +---- drivers/infiniband/hw/hfi1/user_sdma.h | 49 +---- drivers/infiniband/hw/hfi1/verbs.c | 44 +---- drivers/infiniband/hw/hfi1/verbs.h | 44 +---- drivers/infiniband/hw/hfi1/verbs_txreq.c | 44 +---- drivers/infiniband/hw/hfi1/verbs_txreq.h | 44 +---- drivers/infiniband/hw/hfi1/vnic.h | 48 +---- drivers/infiniband/hw/hfi1/vnic_main.c | 44 +---- drivers/infiniband/hw/hfi1/vnic_sdma.c | 44 +---- drivers/infiniband/hw/hns/hns_roce_alloc.c | 74 +------ drivers/infiniband/hw/hns/hns_roce_db.c | 4 +- drivers/infiniband/hw/hns/hns_roce_device.h | 30 ++- drivers/infiniband/hw/hns/hns_roce_hw_v1.c | 6 +- drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 87 ++++----- drivers/infiniband/hw/hns/hns_roce_hw_v2.h | 23 +-- drivers/infiniband/hw/hns/hns_roce_main.c | 40 ++-- drivers/infiniband/hw/hns/hns_roce_mr.c | 4 +- drivers/infiniband/hw/hns/hns_roce_pd.c | 31 ++- drivers/infiniband/hw/hns/hns_roce_qp.c | 196 ++++++++++--------- drivers/infiniband/hw/hns/hns_roce_srq.c | 28 +-- drivers/infiniband/hw/irdma/protos.h | 2 - drivers/infiniband/hw/irdma/utils.c | 3 - drivers/infiniband/hw/irdma/verbs.c | 33 ++-- drivers/infiniband/hw/mlx4/doorbell.c | 3 +- drivers/infiniband/hw/mlx4/main.c | 1 + drivers/infiniband/hw/mlx4/mlx4_ib.h | 5 +- drivers/infiniband/hw/mlx4/mr.c | 4 +- drivers/infiniband/hw/mlx4/qp.c | 25 +-- drivers/infiniband/hw/mlx5/doorbell.c | 3 +- drivers/infiniband/hw/mlx5/gsi.c | 51 ++--- drivers/infiniband/hw/mlx5/main.c | 145 ++++++-------- drivers/infiniband/hw/mlx5/mlx5_ib.h | 7 +- drivers/infiniband/hw/mlx5/mr.c | 3 +- drivers/infiniband/hw/mlx5/qp.c | 232 +++++++++++++++++----- drivers/infiniband/hw/mthca/mthca_eq.c | 21 +- drivers/infiniband/hw/mthca/mthca_main.c | 15 +- drivers/infiniband/hw/mthca/mthca_memfree.c | 25 +-- drivers/infiniband/hw/mthca/mthca_provider.c | 77 +++----- drivers/infiniband/hw/ocrdma/ocrdma_main.c | 1 + drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 25 +-- drivers/infiniband/hw/ocrdma/ocrdma_verbs.h | 5 +- drivers/infiniband/hw/qedr/main.c | 1 + drivers/infiniband/hw/qedr/qedr_roce_cm.c | 13 +- drivers/infiniband/hw/qedr/qedr_roce_cm.h | 5 +- drivers/infiniband/hw/qedr/verbs.c | 101 +++++----- drivers/infiniband/hw/qedr/verbs.h | 4 +- drivers/infiniband/hw/qib/qib_file_ops.c | 12 +- drivers/infiniband/hw/qib/qib_init.c | 4 +- drivers/infiniband/hw/qib/qib_user_pages.c | 12 +- drivers/infiniband/hw/usnic/usnic_ib_main.c | 1 + drivers/infiniband/hw/usnic/usnic_ib_qp_grp.c | 34 ++-- drivers/infiniband/hw/usnic/usnic_ib_qp_grp.h | 10 +- drivers/infiniband/hw/usnic/usnic_ib_verbs.c | 69 ++++--- drivers/infiniband/hw/usnic/usnic_ib_verbs.h | 5 +- drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c | 15 +- drivers/infiniband/hw/vmw_pvrdma/pvrdma_qp.c | 53 ++--- drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.h | 5 +- drivers/infiniband/sw/rdmavt/ah.c | 44 +---- drivers/infiniband/sw/rdmavt/ah.h | 50 +---- drivers/infiniband/sw/rdmavt/cq.c | 44 +---- drivers/infiniband/sw/rdmavt/cq.h | 50 +---- drivers/infiniband/sw/rdmavt/mad.c | 44 +---- drivers/infiniband/sw/rdmavt/mad.h | 50 +---- drivers/infiniband/sw/rdmavt/mcast.c | 44 +---- drivers/infiniband/sw/rdmavt/mcast.h | 50 +---- drivers/infiniband/sw/rdmavt/mmap.c | 44 +---- drivers/infiniband/sw/rdmavt/mmap.h | 50 +---- drivers/infiniband/sw/rdmavt/mr.c | 46 +---- drivers/infiniband/sw/rdmavt/mr.h | 50 +---- drivers/infiniband/sw/rdmavt/pd.c | 44 +---- drivers/infiniband/sw/rdmavt/pd.h | 50 +---- drivers/infiniband/sw/rdmavt/qp.c | 146 ++++---------- drivers/infiniband/sw/rdmavt/qp.h | 55 +----- drivers/infiniband/sw/rdmavt/rc.c | 44 +---- drivers/infiniband/sw/rdmavt/srq.c | 44 +---- drivers/infiniband/sw/rdmavt/srq.h | 50 +---- drivers/infiniband/sw/rdmavt/trace.c | 44 +---- drivers/infiniband/sw/rdmavt/trace.h | 44 +---- drivers/infiniband/sw/rdmavt/trace_cq.h | 44 +---- drivers/infiniband/sw/rdmavt/trace_mr.h | 44 +---- drivers/infiniband/sw/rdmavt/trace_qp.h | 44 +---- drivers/infiniband/sw/rdmavt/trace_rc.h | 44 +---- drivers/infiniband/sw/rdmavt/trace_rvt.h | 44 +---- drivers/infiniband/sw/rdmavt/trace_tx.h | 44 +---- drivers/infiniband/sw/rdmavt/vt.c | 53 +---- drivers/infiniband/sw/rdmavt/vt.h | 50 +---- drivers/infiniband/sw/rxe/rxe.h | 22 --- drivers/infiniband/sw/rxe/rxe_comp.c | 4 +- drivers/infiniband/sw/rxe/rxe_icrc.c | 124 +++++++++++- drivers/infiniband/sw/rxe/rxe_loc.h | 61 +----- drivers/infiniband/sw/rxe/rxe_mr.c | 25 +-- drivers/infiniband/sw/rxe/rxe_net.c | 59 +++++- drivers/infiniband/sw/rxe/rxe_pool.c | 2 +- drivers/infiniband/sw/rxe/rxe_recv.c | 23 +-- drivers/infiniband/sw/rxe/rxe_req.c | 13 +- drivers/infiniband/sw/rxe/rxe_resp.c | 33 +--- drivers/infiniband/sw/rxe/rxe_verbs.c | 61 +++--- drivers/infiniband/sw/rxe/rxe_verbs.h | 2 +- drivers/infiniband/sw/siw/siw_main.c | 1 + drivers/infiniband/sw/siw/siw_qp.c | 2 - drivers/infiniband/sw/siw/siw_qp_tx.c | 44 +++-- drivers/infiniband/sw/siw/siw_verbs.c | 54 +++--- drivers/infiniband/sw/siw/siw_verbs.h | 5 +- drivers/infiniband/ulp/rtrs/rtrs-clt-stats.c | 4 +- drivers/infiniband/ulp/rtrs/rtrs-clt.c | 157 ++++++++------- drivers/infiniband/ulp/rtrs/rtrs-clt.h | 7 +- drivers/infiniband/ulp/rtrs/rtrs-pri.h | 6 +- drivers/infiniband/ulp/rtrs/rtrs-srv.c | 95 +++++---- drivers/infiniband/ulp/rtrs/rtrs-srv.h | 6 - drivers/infiniband/ulp/rtrs/rtrs.c | 23 ++- drivers/net/ethernet/qlogic/qed/qed_cxt.c | 4 +- include/linux/scatterlist.h | 56 +++++- include/rdma/ib_sa.h | 24 --- include/rdma/ib_umem.h | 11 +- include/rdma/ib_verbs.h | 74 ++++++- include/rdma/rdmavt_qp.h | 2 +- include/uapi/rdma/mlx5-abi.h | 17 +- lib/scatterlist.c | 155 +++++++++------ lib/sg_pool.c | 3 +- tools/testing/scatterlist/main.c | 36 ++-- 217 files changed, 2075 insertions(+), 6609 deletions(-) (diffstat from tag for-linus-merged)