Linux 5.10.99
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.99 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/gpu/todo.rst | 18 --- Makefile | 2 arch/x86/events/intel/core.c | 13 ++ arch/x86/events/intel/pt.c | 5 - block/bio-integrity.c | 2 drivers/dma-buf/dma-heap.c | 2 drivers/edac/altera_edac.c | 2 drivers/edac/xgene_edac.c | 2 drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 20 ++++ drivers/gpu/drm/i915/display/intel_overlay.c | 3 drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.c | 2 drivers/infiniband/core/cma.c | 22 ++-- drivers/infiniband/core/ucma.c | 34 ++++-- drivers/infiniband/hw/hfi1/ipoib_main.c | 13 -- drivers/infiniband/hw/mlx4/main.c | 2 drivers/infiniband/sw/rdmavt/qp.c | 2 drivers/infiniband/sw/siw/siw.h | 7 - drivers/infiniband/sw/siw/siw_qp_rx.c | 20 ++-- drivers/iommu/amd/init.c | 2 drivers/iommu/intel/irq_remapping.c | 13 ++ drivers/net/dsa/Kconfig | 1 drivers/net/ethernet/google/gve/gve_adminq.c | 2 drivers/net/ethernet/stmicro/stmmac/dwmac_dma.h | 1 drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c | 19 +++ drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c | 19 ++- drivers/net/ieee802154/ca8210.c | 1 drivers/net/ieee802154/mac802154_hwsim.c | 1 drivers/net/ieee802154/mcr20a.c | 4 drivers/net/macsec.c | 33 ++++-- drivers/nvme/host/fabrics.h | 1 drivers/pinctrl/bcm/pinctrl-bcm2835.c | 23 +++- drivers/pinctrl/intel/pinctrl-intel.c | 64 +++++++----- drivers/rtc/rtc-mc146818-lib.c | 2 drivers/scsi/bnx2fc/bnx2fc_fcoe.c | 21 ++-- drivers/soc/mediatek/mtk-scpsys.c | 15 --- drivers/spi/spi-bcm-qspi.c | 2 drivers/spi/spi-meson-spicc.c | 5 + drivers/spi/spi-mt65xx.c | 2 drivers/spi/spi-uniphier.c | 18 ++- drivers/video/console/Kconfig | 20 ++++ drivers/video/fbdev/core/fbcon.c | 68 +++++++++++-- drivers/video/fbdev/core/fbcon.h | 15 ++- drivers/video/fbdev/core/fbcon_ccw.c | 10 +- drivers/video/fbdev/core/fbcon_cw.c | 10 +- drivers/video/fbdev/core/fbcon_rotate.h | 4 drivers/video/fbdev/core/fbcon_ud.c | 20 ++-- fs/btrfs/qgroup.c | 21 +++- fs/ext4/ext4.h | 3 fs/ext4/extents.c | 4 fs/ext4/fast_commit.c | 89 +++++++++--------- fs/ext4/inline.c | 10 +- fs/ext4/mballoc.c | 26 +++-- fs/fs_context.c | 4 fs/nfsd/nfs4state.c | 4 include/linux/pgtable.h | 1 kernel/audit.c | 62 ++++++++---- kernel/bpf/ringbuf.c | 2 kernel/cgroup/cpuset.c | 10 ++ mm/debug_vm_pgtable.c | 2 mm/kmemleak.c | 13 +- net/ieee802154/nl802154.c | 8 - security/selinux/ss/conditional.c | 3 sound/pci/hda/hda_generic.c | 17 +++ sound/pci/hda/hda_generic.h | 3 sound/pci/hda/patch_realtek.c | 67 +++++++++++-- sound/soc/codecs/cpcap.c | 2 sound/soc/codecs/max9759.c | 3 sound/soc/fsl/pcm030-audio-fabric.c | 11 +- sound/soc/soc-ops.c | 29 +++++ sound/soc/xilinx/xlnx_formatter_pcm.c | 27 ++++- sound/usb/quirks-table.h | 2 tools/bpf/resolve_btfids/Makefile | 6 + tools/perf/util/stat-display.c | 19 ++- tools/testing/selftests/exec/Makefile | 2 tools/testing/selftests/futex/Makefile | 4 tools/testing/selftests/netfilter/nft_concat_range.sh | 72 ++++++++++++++ 76 files changed, 771 insertions(+), 322 deletions(-)
Albert Geantă (1):
ALSA: hda/realtek: Add quirk for ASUS GU603
Andy Shevchenko (1):
pinctrl: intel: Fix a glitch when updating IRQ flags on a preconfigured line
Arınç ÜNAL (1):
net: dsa: mt7530: make NET_DSA_MT7530 select MEDIATEK_GE_PHY
Aun-Ali Zaidi (1):
drm/amd/display: Force link_rate as LINK_RATE_RBR2 for 2018 15" Apple Retina panels
Benjamin Gaignard (1):
spi: mediatek: Avoid NULL pointer crash in interrupt
Bernard Metzler (1):
RDMA/siw: Fix broken RDMA Read Fence/Resume logic.
Camel Guo (1):
net: stmmac: dump gmac4 DMA registers correctly
Christian Lachner (3):
ALSA: hda/realtek: Add missing fixup-model entry for Gigabyte X570 ALC1220 quirks
ALSA: hda/realtek: Fix silent output on Gigabyte X570S Aorus Master (newer chipset)
ALSA: hda/realtek: Fix silent output on Gigabyte X570 Aorus Xtreme after reboot from Windows
Dai Ngo (1):
nfsd: nfsd4_setclientid_confirm mistakenly expires confirmed client.
Dan Carpenter (2):
drm/i915/overlay: Prevent divide by zero bugs in scaling
ASoC: max9759: fix underflow in speaker_gain_control_put()
Florian Fainelli (1):
pinctrl: bcm2835: Fix a few error paths
Florian Westphal (1):
selftests: nft_concat_range: add test for reload with no element add/del
Greg Kroah-Hartman (1):
Linux 5.10.99
Guenter Roeck (1):
Revert "ASoC: mediatek: Check for error clk pointer"
Guoqing Jiang (1):
iommu/vt-d: Fix potential memory leak in intel_setup_irq_remapping()
Haiyue Wang (1):
gve: fix the wrong AdminQ buffer queue index check
Helge Deller (2):
Revert "fbcon: Disable accelerated scrolling"
fbcon: Add option to enable legacy hardware acceleration
Hou Tao (1):
bpf: Use VM_MAP instead of VM_ALLOC for ringbuf
Ian Rogers (1):
perf stat: Fix display of grouped aliased events
Jiasheng Jiang (1):
ASoC: cpcap: Check for NULL pointer after calling of_get_child_by_name
Joerg Roedel (1):
iommu/amd: Fix loop timeout issue in iommu_ga_log_enable()
John Meneghini (1):
scsi: bnx2fc: Make bnx2fc_recv_frame() mp safe
Jonas Hahnfeld (1):
ALSA: usb-audio: Correct quirk for VF0770
Jordy Zomer (1):
dma-buf: heaps: Fix potential spectre v1 gadget
Kamal Dasu (1):
spi: bcm-qspi: check for valid cs before applying chip select
Lang Yu (1):
mm/kmemleak: avoid scanning potential huge holes
Leon Romanovsky (2):
RDMA/ucma: Protect mc during concurrent multicast leaves RDMA/mlx4: Don't continue event handler after memory allocation failure
Lior Nahmanson (2):
net: macsec: Fix offload support for NETDEV_UNREGISTER event
net: macsec: Verify that send_sci is on when setting Tx sci explicitly
Maor Gottlieb (1):
RDMA/cma: Use correct address when leaving multicast group
Mark Brown (3):
ASoC: ops: Reject out of bounds values in snd_soc_put_volsw()
ASoC: ops: Reject out of bounds values in snd_soc_put_volsw_sx()
ASoC: ops: Reject out of bounds values in snd_soc_put_xr_sx()
Martin K. Petersen (1):
block: bio-integrity: Advance seed correctly for larger interval sizes
Miaoqian Lin (2):
spi: meson-spicc: add IRQ check in meson_spicc_probe
ASoC: fsl: Add missing error handling in pcm030_fabric_probe
Mike Marciniszyn (2):
IB/hfi1: Fix AIP early init panic
IB/rdmavt: Validate remote_addr during loopback atomic tests
Mike Rapoport (1):
mm/pgtable: define pte_index so that preprocessor could recognize it
Miquel Raynal (4):
net: ieee802154: hwsim: Ensure proper channel selection at probe time
net: ieee802154: mcr20a: Fix lifs/sifs periods
net: ieee802154: ca8210: Stop leaking skb's
net: ieee802154: Return meaningful error codes from the netlink helpers
Muhammad Usama Anjum (2):
selftests/exec: Remove pipe from TEST_GEN_FILES
selftests: futex: Use variable MAKE instead of make
Nathan Chancellor (1):
tools/resolve_btfids: Do not print any commands when building silently
Nick Lopez (1):
drm/nouveau: fix off by one in BIOS boundary checking
Pasha Tatashin (1):
mm/debug_vm_pgtable: remove pte entry from the page table
Paul Moore (1):
audit: improve audit queue handling when "audit=1" on cmdline
Peter Zijlstra (1):
x86/perf: Default set FREEZE_ON_SMI for all
Ritesh Harjani (2):
ext4: fix error handling in ext4_restore_inline_data()
ext4: fix error handling in ext4_fc_record_modified_inode()
Riwen Lu (1):
rtc: cmos: Evaluate century appropriate
Robert Hancock (1):
ASoC: xilinx: xlnx_formatter_pcm: Make buffer bytes multiple of period bytes
Sergey Shtylyov (2):
EDAC/altera: Fix deferred probing
EDAC/xgene: Fix deferred probing
Shin'ichiro Kawasaki (1):
btrfs: fix deadlock between quota disable and qgroup rescan worker
Takashi Iwai (2):
ALSA: hda: Fix UAF of leds class devs at unbinding
ALSA: hda: realtek: Fix race at concurrent COEF updates
Tristan Hume (1):
perf/x86/intel/pt: Fix crash with stop filters in single-range mode
Uday Shankar (1):
nvme-fabrics: fix state check in nvmf_ctlr_matches_baseopts()
Vratislav Bendel (1):
selinux: fix double free of cond_list on error paths
Waiman Long (1):
cgroup/cpuset: Fix "suspicious RCU usage" lockdep warning
Xin Xiong (1):
spi: uniphier: fix reference count leak in uniphier_spi_probe()
Xin Yin (3):
ext4: prevent used blocks from being allocated during fast commit replay
ext4: modify the logic of ext4_mb_new_blocks_simple
ext4: fix incorrect type issue during replay_del_range
Yannick Vignon (1):
net: stmmac: ensure PTP time register reads are consistent
Yutian Yang (1):
memcg: charge fs_context and legacy_fs_context
Łukasz Bartosik (1):
pinctrl: intel: fix unexpected interrupt
Greg Kroah-Hartman
maintainerDocumentation/gpu/todo.rst +0 -18
@@ -273,24 +273,6 @@ Contact: Daniel Vetter, Noralf Tronnes Level: Advanced -Garbage collect fbdev scrolling acceleration --------------------------------------------- - -Scroll acceleration is disabled in fbcon by hard-wiring p->scrollmode = -SCROLL_REDRAW. There's a ton of code this will allow us to remove: -- lots of code in fbcon.c -- a bunch of the hooks in fbcon_ops, maybe the remaining hooks could be called - directly instead of the function table (with a switch on p->rotate) -- fb_copyarea is unused after this, and can be deleted from all drivers - -Note that not all acceleration code can be deleted, since clearing and cursor -support is still accelerated, which might be good candidates for further -deletion projects. - -Contact: Daniel Vetter - -Level: Intermediate - idr_init_base() ---------------
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 98 +SUBLEVEL = 99 EXTRAVERSION = NAME = Dare mighty things
arch/x86/events/intel/core.c +13 -0
@@ -4353,6 +4353,19 @@ static __initconst const struct x86_pmu intel_pmu = { .lbr_read = intel_pmu_lbr_read_64, .lbr_save = intel_pmu_lbr_save, .lbr_restore = intel_pmu_lbr_restore, + +/* +* SMM has access to all 4 rings and while traditionally SMM code only +* ran in CPL0, 2021-era firmware is starting to make use of CPL3 in SMM. +* +* Since the EVENTSEL.{USR,OS} CPL filtering makes no distinction +* between SMM or not, this results in what should be pure userspace +* counters including SMM data. +* +* This is a clear privilege issue, therefore globally disable +* counting SMM by default. +*/ + .attr_freeze_on_smi = 1, };static __init void intel_clovertown_quirk (void )
arch/x86/events/intel/pt.c +3 -2
@@ -897,8 +897,9 @@ static void pt_handle_status(struct pt *pt)* means we are already losing data; need to let the decoder * know. */ -if (!intel_pt_validate_hw_cap (PT_CAP_topa_multiple_entries) || - buf->output_off ==pt_buffer_region_size (buf)) { +if (!buf->single && + (!intel_pt_validate_hw_cap (PT_CAP_topa_multiple_entries) || + buf->output_off ==pt_buffer_region_size (buf))) {perf_aux_output_flag (&pt->handle,PERF_AUX_FLAG_TRUNCATED ); advance++;
block/bio-integrity.c +1 -1
@@ -384,7 +384,7 @@ void bio_integrity_advance(struct bio *bio, unsigned int bytes_done)struct blk_integrity *bi =blk_get_integrity (bio->bi_disk);unsigned bytes =bio_integrity_bytes (bi, bytes_done >>9 ); - bip->bip_iter.bi_sector += bytes_done >>9 ; + bip->bip_iter.bi_sector +=bio_integrity_intervals (bi, bytes_done >>9 );bvec_iter_advance (bip->bip_vec, &bip->bip_iter, bytes); }
drivers/dma-buf/dma-heap.c +2 -0
@@ -14,6 +14,7 @@#include <linux/xarray.h> #include <linux/list.h> #include <linux/slab.h> +#include <linux/nospec.h> #include <linux/uaccess.h> #include <linux/syscalls.h> #include <linux/dma-heap.h>
@@ -123,6 +124,7 @@ static long dma_heap_ioctl(struct file *file, unsigned int ucmd,if (nr >=ARRAY_SIZE (dma_heap_ioctl_cmds))return -EINVAL ; + nr =array_index_nospec (nr,ARRAY_SIZE (dma_heap_ioctl_cmds));/* Get the kernel ioctl cmd that matches */ kcmd = dma_heap_ioctl_cmds[nr];
drivers/edac/altera_edac.c +1 -1
@@ -349,7 +349,7 @@ static int altr_sdram_probe(struct platform_device *pdev)if (irq <0 ) {edac_printk (KERN_ERR ,EDAC_MC ,"No irq %d in DT\n" , irq); -return -ENODEV ; +return irq; }/* Arria10 has a 2nd IRQ */
drivers/edac/xgene_edac.c +1 -1
@@ -1919,7 +1919,7 @@ static int xgene_edac_probe(struct platform_device *pdev) irq =platform_get_irq (pdev, i);if (irq <0 ) {dev_err (&pdev->dev,"No IRQ resource\n" ); - rc = -EINVAL ; + rc = irq; goto out_err; } rc = devm_request_irq(&pdev->dev, irq,
drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +20 -0
@@ -3587,6 +3587,26 @@ static bool retrieve_link_cap(struct dc_link *link) dp_hw_fw_revision.ieee_fw_rev, sizeof(dp_hw_fw_revision.ieee_fw_rev)); +/* Quirk for Apple MBP 2018 15" Retina panels: wrong DP_MAX_LINK_RATE */ + { +uint8_t str_mbp_2018[] = {101 ,68 ,21 ,103 ,98 ,97 }; +uint8_t fwrev_mbp_2018[] = {7 ,4 }; +uint8_t fwrev_mbp_2018_vega[] = {8 ,4 }; + +/* We also check for the firmware revision as 16,1 models have an +* identical device id and are incorrectly quirked otherwise. +*/ +if ((link->dpcd_caps.sink_dev_id ==0x0010fa ) && + !memcmp (link->dpcd_caps.sink_dev_id_str, str_mbp_2018, +sizeof (str_mbp_2018)) && + (!memcmp (link->dpcd_caps.sink_fw_revision, fwrev_mbp_2018, +sizeof (fwrev_mbp_2018)) || + !memcmp (link->dpcd_caps.sink_fw_revision, fwrev_mbp_2018_vega, +sizeof (fwrev_mbp_2018_vega)))) { + link->reported_link_cap.link_rate =LINK_RATE_RBR2 ; + } + } +memset (&link->dpcd_caps.dsc_caps,'\0' ,sizeof (link->dpcd_caps.dsc_caps));memset (&link->dpcd_caps.fec_cap,'\0' ,sizeof (link->dpcd_caps.fec_cap));
drivers/gpu/drm/i915/display/intel_overlay.c +3 -0
@@ -932,6 +932,9 @@ static int check_overlay_dst(struct intel_overlay *overlay,const struct intel_crtc_state *pipe_config = overlay->crtc->config; +if (rec->dst_height ==0 || rec->dst_width ==0 ) +return -EINVAL ; + if (rec->dst_x < pipe_config->pipe_src_w && rec->dst_x + rec->dst_width <= pipe_config->pipe_src_w && rec->dst_y < pipe_config->pipe_src_h &&
drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.c +1 -1
@@ -38,7 +38,7 @@ nvbios_addr(struct nvkm_bios *bios, u32 *addr, u8 size) *addr += bios->imaged_addr; } -if (unlikely (*addr + size >= bios->size)) { +if (unlikely (*addr + size > bios->size)) {nvkm_error (&bios->subdev,"OOB %d %08x %08x\n" , size, p, *addr);return false; }
drivers/infiniband/core/cma.c +12 -10
@@ -68,8 +68,8 @@ static const char * const cma_events[] = { [RDMA_CM_EVENT_TIMEWAIT_EXIT] = "timewait exit", }; -static void cma_set_mgid (struct rdma_id_private *id_priv,struct sockaddr *addr, -union ib_gid *mgid); +static void cma_iboe_set_mgid (struct sockaddr *addr,union ib_gid *mgid, +enum ib_gid_type gid_type); const char *__attribute_const__ rdma_event_msg(enum rdma_cm_event_type event) {
@@ -1840,17 +1840,19 @@ static void destroy_mc(struct rdma_id_private *id_priv,if (dev_addr->bound_dev_if) ndev =dev_get_by_index (dev_addr->net, dev_addr->bound_dev_if); -if (ndev) { +if (ndev && !send_only) { +enum ib_gid_type gid_type;union ib_gid mgid; -cma_set_mgid (id_priv, (struct sockaddr *)&mc->addr, - &mgid); - -if (!send_only) -cma_igmp_send (ndev, &mgid, false); - -dev_put (ndev); + gid_type = id_priv->cma_dev->default_gid_type + [id_priv->id.port_num - +rdma_start_port ( + id_priv->cma_dev->device)]; +cma_iboe_set_mgid ((struct sockaddr *)&mc->addr, &mgid, + gid_type); +cma_igmp_send (ndev, &mgid, false); } +dev_put (ndev);cancel_work_sync (&mc->iboe_join.work); }
drivers/infiniband/core/ucma.c +23 -11
@@ -95,6 +95,7 @@ struct ucma_context {u64 uid;struct list_head list; +struct list_head mc_list;struct work_struct close_work; };
@@ -105,6 +106,7 @@ struct ucma_multicast {u64 uid;u8 join_state; +struct list_head list;struct sockaddr_storage addr; };
@@ -198,6 +200,7 @@ static struct ucma_context *ucma_alloc_ctx(struct ucma_file *file)INIT_WORK (&ctx->close_work, ucma_close_id);init_completion (&ctx->comp); +INIT_LIST_HEAD (&ctx->mc_list);/* So list_del() will work if we don't do ucma_finish_ctx() */ INIT_LIST_HEAD (&ctx->list); ctx->file = file;
@@ -484,19 +487,19 @@ static ssize_t ucma_create_id(struct ucma_file *file, const char __user *inbuf,static void ucma_cleanup_multicast (struct ucma_context *ctx) { -struct ucma_multicast *mc; -unsigned long index; +struct ucma_multicast *mc, *tmp; -xa_for_each (&multicast_table, index, mc) { -if (mc->ctx != ctx) -continue ; +xa_lock (&multicast_table); +list_for_each_entry_safe (mc, tmp, &ctx->mc_list, list) { +list_del (&mc->list);/* * At this point mc->ctx->ref is 0 so the mc cannot leave the * lock on the reader and this is enough serialization */ -xa_erase (&multicast_table, index); +__xa_erase (&multicast_table, mc->id);kfree (mc); } +xa_unlock (&multicast_table); }static void ucma_cleanup_mc_events (struct ucma_multicast *mc)
@@ -1469,12 +1472,16 @@ static ssize_t ucma_process_join(struct ucma_file *file, mc->uid = cmd->uid;memcpy (&mc->addr, addr, cmd->addr_size); -if (xa_alloc (&multicast_table, &mc->id,NULL , xa_limit_32b, +xa_lock (&multicast_table); +if (__xa_alloc (&multicast_table, &mc->id,NULL , xa_limit_32b,GFP_KERNEL )) { ret = -ENOMEM ; goto err_free_mc; } +list_add_tail (&mc->list, &ctx->mc_list); +xa_unlock (&multicast_table); +mutex_lock (&ctx->mutex); ret =rdma_join_multicast (ctx->cm_id, (struct sockaddr *)&mc->addr, join_state, mc);
@@ -1500,8 +1507,11 @@ static ssize_t ucma_process_join(struct ucma_file *file,mutex_unlock (&ctx->mutex);ucma_cleanup_mc_events (mc); err_xa_erase: -xa_erase (&multicast_table, mc->id); +xa_lock (&multicast_table); +list_del (&mc->list); +__xa_erase (&multicast_table, mc->id); err_free_mc: +xa_unlock (&multicast_table);kfree (mc); err_put_ctx:ucma_put_ctx (ctx);
@@ -1569,15 +1579,17 @@ static ssize_t ucma_leave_multicast(struct ucma_file *file, mc =ERR_PTR (-EINVAL ); else if (!refcount_inc_not_zero(&mc->ctx->ref)) mc =ERR_PTR (-ENXIO ); - else - __xa_erase(&multicast_table, mc->id); -xa_unlock (&multicast_table);if (IS_ERR (mc)) { +xa_unlock (&multicast_table); ret =PTR_ERR (mc); goto out; } +list_del (&mc->list); +__xa_erase (&multicast_table, mc->id); +xa_unlock (&multicast_table); +mutex_lock (&mc->ctx->mutex);rdma_leave_multicast (mc->ctx->cm_id, (struct sockaddr *) &mc->addr);mutex_unlock (&mc->ctx->mutex);
drivers/infiniband/hw/hfi1/ipoib_main.c +3 -10
@@ -185,12 +185,6 @@ static void hfi1_ipoib_netdev_dtor(struct net_device *dev)free_percpu (priv->netstats); } -static void hfi1_ipoib_free_rdma_netdev (struct net_device *dev) -{ -hfi1_ipoib_netdev_dtor (dev); -free_netdev (dev); -} -static void hfi1_ipoib_set_id (struct net_device *dev,int id) {struct hfi1_ipoib_dev_priv *priv =hfi1_ipoib_priv (dev);
@@ -227,24 +221,23 @@ static int hfi1_ipoib_setup_rn(struct ib_device *device, priv->port_num = port_num; priv->netdev_ops = netdev->netdev_ops; - netdev->netdev_ops = &hfi1_ipoib_netdev_ops; -ib_query_pkey (device, port_num, priv->pkey_index, &priv->pkey); rc =hfi1_ipoib_txreq_init (priv);if (rc) {dd_dev_err (dd,"IPoIB netdev TX init - failed(%d)\n" , rc); -hfi1_ipoib_free_rdma_netdev (netdev);return rc; } rc =hfi1_ipoib_rxq_init (netdev);if (rc) {dd_dev_err (dd,"IPoIB netdev RX init - failed(%d)\n" , rc); -hfi1_ipoib_free_rdma_netdev (netdev); +hfi1_ipoib_txreq_deinit (priv);return rc; } + netdev->netdev_ops = &hfi1_ipoib_netdev_ops; + netdev->priv_destructor = hfi1_ipoib_netdev_dtor; netdev->needs_free_netdev = true;
drivers/infiniband/hw/mlx4/main.c +1 -1
@@ -3273,7 +3273,7 @@ static void mlx4_ib_event(struct mlx4_dev *dev, void *ibdev_ptr,case MLX4_DEV_EVENT_PORT_MGMT_CHANGE : ew =kmalloc (sizeof *ew,GFP_ATOMIC );if (!ew) -break ; +return ;INIT_WORK (&ew->work, handle_port_mgmt_change_event);memcpy (&ew->ib_eqe, eqe,sizeof *eqe);
drivers/infiniband/sw/rdmavt/qp.c +2 -0
@@ -3124,6 +3124,8 @@ void rvt_ruc_loopback(struct rvt_qp *sqp)case IB_WR_ATOMIC_FETCH_AND_ADD :if (unlikely (!(qp->qp_access_flags &IB_ACCESS_REMOTE_ATOMIC ))) goto inv_err; +if (unlikely (wqe->atomic_wr.remote_addr & (sizeof (u64) -1 ))) + goto inv_err; if (unlikely(!rvt_rkey_ok(qp, &qp->r_sge.sge, sizeof(u64), wqe->atomic_wr.remote_addr, wqe->atomic_wr.rkey,
drivers/infiniband/sw/siw/siw.h +1 -6
@@ -644,14 +644,9 @@ static inline struct siw_sqe *orq_get_current(struct siw_qp *qp)return &qp->orq[qp->orq_get % qp->attrs.orq_size]; } -static inline struct siw_sqe *orq_get_tail (struct siw_qp *qp) -{ -return &qp->orq[qp->orq_put % qp->attrs.orq_size]; -} -static inline struct siw_sqe *orq_get_free (struct siw_qp *qp) { -struct siw_sqe *orq_e =orq_get_tail (qp); +struct siw_sqe *orq_e = &qp->orq[qp->orq_put % qp->attrs.orq_size];if (READ_ONCE (orq_e->flags) ==0 )return orq_e;
drivers/infiniband/sw/siw/siw_qp_rx.c +11 -9
@@ -1153,11 +1153,12 @@ static int siw_check_tx_fence(struct siw_qp *qp)spin_lock_irqsave (&qp->orq_lock, flags); - rreq =orq_get_current (qp); -/* free current orq entry */ + rreq =orq_get_current (qp);WRITE_ONCE (rreq->flags,0 ); + qp->orq_get++; +if (qp->tx_ctx.orq_fence) {if (unlikely (tx_waiting->wr_status !=SIW_WR_QUEUED )) { pr_warn("siw: [QP %u]: fence resume: bad status %d\n",
@@ -1165,10 +1166,12 @@ static int siw_check_tx_fence(struct siw_qp *qp) rv = -EPROTO ; goto out; } -/* resume SQ processing */ +/* resume SQ processing, if possible */ if (tx_waiting->sqe.opcode ==SIW_OP_READ || tx_waiting->sqe.opcode ==SIW_OP_READ_LOCAL_INV ) { - rreq =orq_get_tail (qp); + +/* SQ processing was stopped because of a full ORQ */ + rreq =orq_get_free (qp);if (unlikely (!rreq)) {pr_warn ("siw: [QP %u]: no ORQE\n" ,qp_id (qp)); rv = -EPROTO ;
@@ -1181,15 +1184,14 @@ static int siw_check_tx_fence(struct siw_qp *qp) resume_tx =1 ; }else if (siw_orq_empty (qp)) { +/* +* SQ processing was stopped by fenced work request. +* Resume since all previous Read's are now completed. +*/ qp->tx_ctx.orq_fence =0 ; resume_tx =1 ; - }else { -pr_warn ("siw: [QP %u]: fence resume: orq idx: %d:%d\n" , -qp_id (qp), qp->orq_get, qp->orq_put); - rv = -EPROTO ; } } - qp->orq_get++; out:spin_unlock_irqrestore (&qp->orq_lock, flags);
drivers/iommu/amd/init.c +2 -0
@@ -20,6 +20,7 @@#include <linux/export.h> #include <linux/kmemleak.h> #include <linux/mem_encrypt.h> +#include <linux/iopoll.h> #include <asm/pci-direct.h> #include <asm/iommu.h> #include <asm/apic.h>
@@ -833,6 +834,7 @@ static int iommu_ga_log_enable(struct amd_iommu *iommu) status =readl (iommu->mmio_base +MMIO_STATUS_OFFSET );if (status & (MMIO_STATUS_GALOG_RUN_MASK ))break ; +udelay (10 ); }if (WARN_ON (i >=LOOP_TIMEOUT ))
drivers/iommu/intel/irq_remapping.c +10 -3
@@ -576,9 +576,8 @@ static int intel_setup_irq_remapping(struct intel_iommu *iommu) fn, &intel_ir_domain_ops, iommu);if (!iommu->ir_domain) { -irq_domain_free_fwnode (fn);pr_err ("IR%d: failed to allocate irqdomain\n" , iommu->seq_id); - goto out_free_bitmap; + goto out_free_fwnode; } iommu->ir_msi_domain = arch_create_remap_msi_irq_domain(iommu->ir_domain,
@@ -602,7 +601,7 @@ static int intel_setup_irq_remapping(struct intel_iommu *iommu)if (dmar_enable_qi (iommu)) {pr_err ("Failed to enable queued invalidation\n" ); - goto out_free_bitmap; + goto out_free_ir_domain; } }
@@ -626,6 +625,14 @@ static int intel_setup_irq_remapping(struct intel_iommu *iommu)return 0 ; +out_free_ir_domain: +if (iommu->ir_msi_domain) +irq_domain_remove (iommu->ir_msi_domain); + iommu->ir_msi_domain =NULL ; +irq_domain_remove (iommu->ir_domain); + iommu->ir_domain =NULL ; +out_free_fwnode: +irq_domain_free_fwnode (fn); out_free_bitmap:bitmap_free (bitmap); out_free_pages:
drivers/net/dsa/Kconfig +1 -0
@@ -36,6 +36,7 @@ config NET_DSA_MT7530 tristate "MediaTek MT753x and MT7621 Ethernet switch support" depends on NET_DSA select NET_DSA_TAG_MTK + select MEDIATEK_GE_PHY help This enables support for the MediaTek MT7530, MT7531, and MT7621 Ethernet switch chips.
drivers/net/ethernet/google/gve/gve_adminq.c +1 -1
@@ -141,7 +141,7 @@ static int gve_adminq_parse_err(struct gve_priv *priv, u32 status)*/ static int gve_adminq_kick_and_wait (struct gve_priv *priv) { -u32 tail, head; +int tail, head;int i; tail =ioread32be (&priv->reg_bar0->adminq_event_counter);
drivers/net/ethernet/stmicro/stmmac/dwmac_dma.h +1 -0
@@ -130,6 +130,7 @@#define NUM_DWMAC100_DMA_REGS 9#define NUM_DWMAC1000_DMA_REGS 23 +#define NUM_DWMAC4_DMA_REGS 27void dwmac_enable_dma_transmission (void __iomem *ioaddr);void dwmac_enable_dma_irq (void __iomem *ioaddr,u32 chan,bool rx,bool tx);
drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c +17 -2
@@ -21,10 +21,18 @@#include "dwxgmac2.h" #define REG_SPACE_SIZE 0x1060 +#define GMAC4_REG_SPACE_SIZE 0x116C#define MAC100_ETHTOOL_NAME "st_mac100"#define GMAC_ETHTOOL_NAME "st_gmac"#define XGMAC_ETHTOOL_NAME "st_xgmac" +/* Same as DMA_CHAN_BASE_ADDR defined in dwmac4_dma.h +* +* It is here because dwmac_dma.h and dwmac4_dam.h can not be included at the +* same time due to the conflicting macro names. +*/ +#define GMAC4_DMA_CHAN_BASE_ADDR 0x00001100 +#define ETHTOOL_DMA_OFFSET 55struct stmmac_stats {
@@ -413,6 +421,8 @@ static int stmmac_ethtool_get_regs_len(struct net_device *dev)if (priv->plat->has_xgmac)return XGMAC_REGSIZE *4 ; +else if (priv->plat->has_gmac4) +return GMAC4_REG_SPACE_SIZE ;return REG_SPACE_SIZE ; }
@@ -425,8 +435,13 @@ static void stmmac_ethtool_gregs(struct net_device *dev,stmmac_dump_mac_regs (priv, priv->hw, reg_space);stmmac_dump_dma_regs (priv, priv->ioaddr, reg_space); -if (!priv->plat->has_xgmac) { -/* Copy DMA registers to where ethtool expects them */ +/* Copy DMA registers to where ethtool expects them */ +if (priv->plat->has_gmac4) { +/* GMAC4 dumps its DMA registers at its DMA_CHAN_BASE_ADDR */ +memcpy (®_space[ETHTOOL_DMA_OFFSET ], + ®_space[GMAC4_DMA_CHAN_BASE_ADDR /4 ], +NUM_DWMAC4_DMA_REGS *4 ); + }else if (!priv->plat->has_xgmac) {memcpy (®_space[ETHTOOL_DMA_OFFSET ], ®_space[DMA_BUS_MODE /4 ],NUM_DWMAC1000_DMA_REGS *4 );
drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c +12 -7
@@ -142,15 +142,20 @@ static int adjust_systime(void __iomem *ioaddr, u32 sec, u32 nsec,static void get_systime (void __iomem *ioaddr,u64 *systime) { -u64 ns; - -/* Get the TSSS value */ - ns =readl (ioaddr +PTP_STNSR ); -/* Get the TSS and convert sec time value to nanosecond */ - ns +=readl (ioaddr +PTP_STSR ) *1000000000ULL ; +u64 ns, sec0, sec1; + +/* Get the TSS value */ + sec1 =readl_relaxed (ioaddr +PTP_STSR ); +do { + sec0 = sec1; +/* Get the TSSS value */ + ns =readl_relaxed (ioaddr +PTP_STNSR ); +/* Get the TSS value */ + sec1 =readl_relaxed (ioaddr +PTP_STSR ); + }while (sec0 != sec1);if (systime) - *systime = ns; + *systime = ns + (sec1 *1000000000ULL ); }const struct stmmac_hwtimestamp stmmac_ptp = {
drivers/net/ieee802154/ca8210.c +1 -0
@@ -1771,6 +1771,7 @@ static int ca8210_async_xmit_complete(status );if (status !=MAC_TRANSACTION_OVERFLOW ) { +dev_kfree_skb_any (priv->tx_skb);ieee802154_wake_queue (priv->hw);return 0 ; }
drivers/net/ieee802154/mac802154_hwsim.c +1 -0
@@ -786,6 +786,7 @@ static int hwsim_add_one(struct genl_info *info, struct device *dev, goto err_pib; } + pib->channel =13 ;rcu_assign_pointer (phy->pib, pib); phy->idx = idx;INIT_LIST_HEAD (&phy->edges);
drivers/net/ieee802154/mcr20a.c +2 -2
@@ -976,8 +976,8 @@ static void mcr20a_hw_setup(struct mcr20a_local *lp)dev_dbg (printdev (lp),"%s\n" , __func__); phy->symbol_duration =16 ; - phy->lifs_period =40 ; - phy->sifs_period =12 ; + phy->lifs_period =40 * phy->symbol_duration; + phy->sifs_period =12 * phy->symbol_duration; hw->flags =IEEE802154_HW_TX_OMIT_CKSUM | IEEE802154_HW_AFILT |
drivers/net/macsec.c +21 -12
@@ -3869,6 +3869,18 @@ static void macsec_common_dellink(struct net_device *dev, struct list_head *headstruct macsec_dev *macsec =macsec_priv (dev);struct net_device *real_dev = macsec->real_dev; +/* If h/w offloading is available, propagate to the device */ +if (macsec_is_offloaded (macsec)) { +const struct macsec_ops *ops; +struct macsec_context ctx; + + ops =macsec_get_ops (netdev_priv (dev), &ctx); +if (ops) { + ctx.secy = &macsec->secy; +macsec_offload (ops->mdo_del_secy, &ctx); + } + } +unregister_netdevice_queue (dev, head);list_del_rcu (&macsec->secys);macsec_del_dev (macsec);
@@ -3883,18 +3895,6 @@ static void macsec_dellink(struct net_device *dev, struct list_head *head)struct net_device *real_dev = macsec->real_dev;struct macsec_rxh_data *rxd =macsec_data_rtnl (real_dev); -/* If h/w offloading is available, propagate to the device */ -if (macsec_is_offloaded (macsec)) { -const struct macsec_ops *ops; -struct macsec_context ctx; - - ops =macsec_get_ops (netdev_priv (dev), &ctx); -if (ops) { - ctx.secy = &macsec->secy; -macsec_offload (ops->mdo_del_secy, &ctx); - } - } -macsec_common_dellink (dev, head);if (list_empty (&rxd->secys)) {
@@ -4017,6 +4017,15 @@ static int macsec_newlink(struct net *net, struct net_device *dev, !macsec_check_offload(macsec->offload, macsec))return -EOPNOTSUPP ; +/* send_sci must be set to true when transmit sci explicitly is set */ +if ((data && data[IFLA_MACSEC_SCI ]) && + (data && data[IFLA_MACSEC_INC_SCI ])) { +u8 send_sci = !!nla_get_u8 (data[IFLA_MACSEC_INC_SCI ]); + +if (!send_sci) +return -EINVAL ; + } +if (data && data[IFLA_MACSEC_ICV_LEN ]) icv_len =nla_get_u8 (data[IFLA_MACSEC_ICV_LEN ]); mtu = real_dev->mtu - icv_len -macsec_extra_len (true);
drivers/nvme/host/fabrics.h +1 -0
@@ -153,6 +153,7 @@ nvmf_ctlr_matches_baseopts(struct nvme_ctrl *ctrl, struct nvmf_ctrl_options *opts) { if (ctrl->state == NVME_CTRL_DELETING || + ctrl->state == NVME_CTRL_DELETING_NOIO || ctrl->state == NVME_CTRL_DEAD || strcmp(opts->subsysnqn, ctrl->opts->subsysnqn) || strcmp(opts->host->nqn, ctrl->opts->host->nqn) ||
drivers/pinctrl/bcm/pinctrl-bcm2835.c +15 -8
@@ -1264,16 +1264,18 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev)sizeof (*girq->parents), GFP_KERNEL);if (!girq->parents) { -pinctrl_remove_gpio_range (pc->pctl_dev, &pc->gpio_range); -return -ENOMEM ; + err = -ENOMEM ; + goto out_remove; }if (is_7211) { pc->wake_irq =devm_kcalloc (dev,BCM2835_NUM_IRQS ,sizeof (*pc->wake_irq),GFP_KERNEL ); -if (!pc->wake_irq) -return -ENOMEM ; +if (!pc->wake_irq) { + err = -ENOMEM ; + goto out_remove; + } }/*
@@ -1297,8 +1299,10 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev) len =strlen (dev_name (pc->dev)) +16 ; name =devm_kzalloc (pc->dev, len,GFP_KERNEL ); -if (!name) -return -ENOMEM ; +if (!name) { + err = -ENOMEM ; + goto out_remove; + }snprintf (name, len,"%s:bank%d" ,dev_name (pc->dev), i);
@@ -1317,11 +1321,14 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev) err =gpiochip_add_data (&pc->gpio_chip, pc);if (err) {dev_err (dev,"could not add GPIO chip\n" ); -pinctrl_remove_gpio_range (pc->pctl_dev, &pc->gpio_range); -return err; + goto out_remove; }return 0 ; + +out_remove: +pinctrl_remove_gpio_range (pc->pctl_dev, &pc->gpio_range); +return err; }static struct platform_driver bcm2835_pinctrl_driver = {
drivers/pinctrl/intel/pinctrl-intel.c +36 -28
100 lines not on this page · raw message
drivers/rtc/rtc-mc146818-lib.c +1 -1
@@ -83,7 +83,7 @@ unsigned int mc146818_get_time(struct rtc_time *time) time->tm_year += real_year -72 ;#endif -if (century >20 ) +if (century >19 ) time->tm_year += (century -19 ) *100 ;/*
drivers/scsi/bnx2fc/bnx2fc_fcoe.c +13 -8
@@ -506,7 +506,8 @@ static int bnx2fc_l2_rcv_thread(void *arg)static void bnx2fc_recv_frame (struct sk_buff *skb) { -u32 fr_len; +u64 crc_err; +u32 fr_len, fr_crc;struct fc_lport *lport;struct fcoe_rcv_info *fr;struct fc_stats *stats;
@@ -540,6 +541,11 @@ static void bnx2fc_recv_frame(struct sk_buff *skb)skb_pull (skb,sizeof (struct fcoe_hdr )); fr_len = skb->len -sizeof (struct fcoe_crc_eof ); + stats =per_cpu_ptr (lport->stats,get_cpu ()); + stats->RxFrames++; + stats->RxWords += fr_len /FCOE_WORD_TO_BYTE ; +put_cpu (); + fp = (struct fc_frame *)skb;fc_frame_init (fp);fr_dev (fp) = lport;
@@ -622,16 +628,15 @@ static void bnx2fc_recv_frame(struct sk_buff *skb)return ; } - stats =per_cpu_ptr (lport->stats,smp_processor_id ()); - stats->RxFrames++; - stats->RxWords += fr_len /FCOE_WORD_TO_BYTE ; + fr_crc =le32_to_cpu (fr_crc (fp)); -if (le32_to_cpu (fr_crc (fp)) != - ~crc32 (~0 , skb->data, fr_len)) { -if (stats->InvalidCRCCount <5 ) +if (unlikely (fr_crc != ~crc32 (~0 , skb->data, fr_len))) { + stats =per_cpu_ptr (lport->stats,get_cpu ()); + crc_err = (stats->InvalidCRCCount++); +put_cpu (); +if (crc_err <5 ) printk(KERN_WARNING PFX "dropping frame with ""CRC error\n" ); - stats->InvalidCRCCount++;kfree_skb (skb);return ; }
drivers/soc/mediatek/mtk-scpsys.c +4 -11
@@ -411,17 +411,12 @@ static int scpsys_power_off(struct generic_pm_domain *genpd)return ret; } -static int init_clks (struct platform_device *pdev,struct clk **clk) +static void init_clks (struct platform_device *pdev,struct clk **clk) {int i; -for (i =CLK_NONE +1 ; i <CLK_MAX ; i++) { +for (i =CLK_NONE +1 ; i <CLK_MAX ; i++) clk[i] =devm_clk_get (&pdev->dev, clk_names[i]); -if (IS_ERR (clk[i])) -return PTR_ERR (clk[i]); - } - -return 0 ; } static struct scp *init_scp(struct platform_device *pdev,
@@ -431,7 +426,7 @@ static struct scp *init_scp(struct platform_device *pdev, {struct genpd_onecell_data *pd_data;struct resource *res; -int i, j, ret; +int i, j;struct scp *scp;struct clk *clk[CLK_MAX ];
@@ -486,9 +481,7 @@ static struct scp *init_scp(struct platform_device *pdev, pd_data->num_domains = num; - ret =init_clks (pdev, clk); -if (ret) -return ERR_PTR (ret); +init_clks (pdev, clk);for (i =0 ; i < num; i++) {struct scp_domain *scpd = &scp->domains[i];
drivers/spi/spi-bcm-qspi.c +1 -1
@@ -551,7 +551,7 @@ static void bcm_qspi_chip_select(struct bcm_qspi *qspi, int cs)u32 rd =0 ;u32 wr =0 ; -if (qspi->base[CHIP_SELECT ]) { +if (cs >=0 && qspi->base[CHIP_SELECT ]) { rd =bcm_qspi_read (qspi,CHIP_SELECT ,0 ); wr = (rd & ~0xff ) | (1 << cs);if (rd == wr)
drivers/spi/spi-meson-spicc.c +5 -0
@@ -693,6 +693,11 @@ static int meson_spicc_probe(struct platform_device *pdev)writel_relaxed (0 , spicc->base +SPICC_INTREG ); irq =platform_get_irq (pdev,0 ); +if (irq <0 ) { + ret = irq; + goto out_master; + } + ret =devm_request_irq (&pdev->dev, irq, meson_spicc_irq,0 ,NULL , spicc);if (ret) {
drivers/spi/spi-mt65xx.c +1 -1
@@ -540,7 +540,7 @@ static irqreturn_t mtk_spi_interrupt(int irq, void *dev_id)else mdata->state =MTK_SPI_IDLE ; -if (!master->can_dma (master, master->cur_msg->spi, trans)) { +if (!master->can_dma (master,NULL , trans)) {if (trans->rx_buf) { cnt = mdata->xfer_len /4 ; ioread32_rep(mdata->base + SPI_RX_DATA_REG,
drivers/spi/spi-uniphier.c +14 -4
@@ -726,7 +726,7 @@ static int uniphier_spi_probe(struct platform_device *pdev)if (ret) {dev_err (&pdev->dev,"failed to get TX DMA capacities: %d\n" , ret); - goto out_disable_clk; + goto out_release_dma; } dma_tx_burst = caps.max_burst; }
@@ -735,7 +735,7 @@ static int uniphier_spi_probe(struct platform_device *pdev)if (IS_ERR_OR_NULL (master->dma_rx)) {if (PTR_ERR (master->dma_rx) == -EPROBE_DEFER ) { ret = -EPROBE_DEFER ; - goto out_disable_clk; + goto out_release_dma; } master->dma_rx =NULL ; dma_rx_burst =INT_MAX ;
@@ -744,7 +744,7 @@ static int uniphier_spi_probe(struct platform_device *pdev)if (ret) {dev_err (&pdev->dev,"failed to get RX DMA capacities: %d\n" , ret); - goto out_disable_clk; + goto out_release_dma; } dma_rx_burst = caps.max_burst; }
@@ -753,10 +753,20 @@ static int uniphier_spi_probe(struct platform_device *pdev) ret =devm_spi_register_master (&pdev->dev, master);if (ret) - goto out_disable_clk; + goto out_release_dma;return 0 ; +out_release_dma: +if (!IS_ERR_OR_NULL (master->dma_rx)) { +dma_release_channel (master->dma_rx); + master->dma_rx =NULL ; + } +if (!IS_ERR_OR_NULL (master->dma_tx)) { +dma_release_channel (master->dma_tx); + master->dma_tx =NULL ; + } + out_disable_clk:clk_disable_unprepare (priv->clk);
drivers/video/console/Kconfig +20 -0
@@ -78,6 +78,26 @@ config FRAMEBUFFER_CONSOLE help Low-level framebuffer-based console driver. +config FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION + bool "Enable legacy fbcon hardware acceleration code" + depends on FRAMEBUFFER_CONSOLE + default y if PARISC + default n + help + This option enables the fbcon (framebuffer text-based) hardware + acceleration for graphics drivers which were written for the fbdev + graphics interface. + + On modern machines, on mainstream machines (like x86-64) or when + using a modern Linux distribution those fbdev drivers usually aren't used. + So enabling this option wouldn't have any effect, which is why you want + to disable this option on such newer machines. + + If you compile this kernel for older machines which still require the + fbdev drivers, you may want to say Y. + + If unsure, select n. + config FRAMEBUFFER_CONSOLE_DETECT_PRIMARY bool "Map the console to the primary display device" depends on FRAMEBUFFER_CONSOLE
drivers/video/fbdev/core/fbcon.c +57 -11
116 lines not on this page · raw message
drivers/video/fbdev/core/fbcon.h +14 -1
@@ -29,7 +29,9 @@ struct fbcon_display {/* Filled in by the low-level console driver */ const u_char *fontdata;int userfont;/* != 0 if fontdata kmalloc()ed */ -u_short scrollmode;/* Scroll Method */ +#ifdef CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION +u_short scrollmode;/* Scroll Method, use fb_scrollmode() */ +#endif u_short inverse;/* != 0 text black on white as default */ short yscroll;/* Hardware scrolling */ int vrows;/* number of virtual rows */
@@ -208,6 +210,17 @@ static inline int attr_col_ec(int shift, struct vc_data *vc,#define SCROLL_REDRAW 0x004#define SCROLL_PAN_REDRAW 0x005 +static inline u_short fb_scrollmode (struct fbcon_display *fb) +{ +#ifdef CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION +return fb->scrollmode; +#else +/* hardcoded to SCROLL_REDRAW if acceleration was disabled. */ +return SCROLL_REDRAW ; +#endif +} + +#ifdef CONFIG_FB_TILEBLITTING extern void fbcon_set_tileops (struct vc_data *vc,struct fb_info *info);#endif
drivers/video/fbdev/core/fbcon_ccw.c +5 -5
@@ -65,7 +65,7 @@ static void ccw_bmove(struct vc_data *vc, struct fb_info *info, int sy, {struct fbcon_ops *ops = info->fbcon_par;struct fb_copyarea area; -u32 vyres =GETVYRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info); area.sx = sy * vc->vc_font.height; area.sy = vyres - ((sx + width) * vc->vc_font.width);
@@ -83,7 +83,7 @@ static void ccw_clear(struct vc_data *vc, struct fb_info *info, int sy,struct fbcon_ops *ops = info->fbcon_par;struct fb_fillrect region;int bgshift = (vc->vc_hi_font_mask) ?13 :12 ; -u32 vyres =GETVYRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info); region.color =attr_bgcol_ec (bgshift,vc,info); region.dx = sy * vc->vc_font.height;
@@ -140,7 +140,7 @@ static void ccw_putcs(struct vc_data *vc, struct fb_info *info,u32 cnt, pitch, size;u32 attribute =get_attribute (info,scr_readw (s));u8 *dst, *buf =NULL ; -u32 vyres =GETVYRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info);if (!ops->fontbuffer)return ;
@@ -229,7 +229,7 @@ static void ccw_cursor(struct vc_data *vc, struct fb_info *info, int mode,int attribute, use_sw = vc->vc_cursor_type &CUR_SW ;int err =1 , dx, dy;char *src; -u32 vyres =GETVYRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info);if (!ops->fontbuffer)return ;
@@ -387,7 +387,7 @@ static int ccw_update_start(struct fb_info *info) {struct fbcon_ops *ops = info->fbcon_par;u32 yoffset; -u32 vyres =GETVYRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info);int err; yoffset = (vyres - info->var.yres) - ops->var.xoffset;
drivers/video/fbdev/core/fbcon_cw.c +5 -5
@@ -50,7 +50,7 @@ static void cw_bmove(struct vc_data *vc, struct fb_info *info, int sy, {struct fbcon_ops *ops = info->fbcon_par;struct fb_copyarea area; -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vxres =GETVXRES (ops->p, info); area.sx = vxres - ((sy + height) * vc->vc_font.height); area.sy = sx * vc->vc_font.width;
@@ -68,7 +68,7 @@ static void cw_clear(struct vc_data *vc, struct fb_info *info, int sy,struct fbcon_ops *ops = info->fbcon_par;struct fb_fillrect region;int bgshift = (vc->vc_hi_font_mask) ?13 :12 ; -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vxres =GETVXRES (ops->p, info); region.color =attr_bgcol_ec (bgshift,vc,info); region.dx = vxres - ((sy + height) * vc->vc_font.height);
@@ -125,7 +125,7 @@ static void cw_putcs(struct vc_data *vc, struct fb_info *info,u32 cnt, pitch, size;u32 attribute =get_attribute (info,scr_readw (s));u8 *dst, *buf =NULL ; -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vxres =GETVXRES (ops->p, info);if (!ops->fontbuffer)return ;
@@ -212,7 +212,7 @@ static void cw_cursor(struct vc_data *vc, struct fb_info *info, int mode,int attribute, use_sw = vc->vc_cursor_type &CUR_SW ;int err =1 , dx, dy;char *src; -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vxres =GETVXRES (ops->p, info);if (!ops->fontbuffer)return ;
@@ -369,7 +369,7 @@ static void cw_cursor(struct vc_data *vc, struct fb_info *info, int mode,static int cw_update_start (struct fb_info *info) {struct fbcon_ops *ops = info->fbcon_par; -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vxres =GETVXRES (ops->p, info);u32 xoffset;int err;
drivers/video/fbdev/core/fbcon_rotate.h +2 -2
@@ -12,11 +12,11 @@#define _FBCON_ROTATE_H#define GETVYRES (s,i) ({ \ - (s == SCROLL_REDRAW || s == SCROLL_MOVE) ? \ + (fb_scrollmode(s) == SCROLL_REDRAW || fb_scrollmode(s) == SCROLL_MOVE) ? \ (i)->var.yres : (i)->var.yres_virtual; })#define GETVXRES (s,i) ({ \ - (s == SCROLL_REDRAW || s == SCROLL_MOVE || !(i)->fix.xpanstep) ? \ + (fb_scrollmode(s) == SCROLL_REDRAW || fb_scrollmode(s) == SCROLL_MOVE || !(i)->fix.xpanstep) ? \ (i)->var.xres : (i)->var.xres_virtual; })
drivers/video/fbdev/core/fbcon_ud.c +10 -10
@@ -50,8 +50,8 @@ static void ud_bmove(struct vc_data *vc, struct fb_info *info, int sy, {struct fbcon_ops *ops = info->fbcon_par;struct fb_copyarea area; -u32 vyres =GETVYRES (ops->p->scrollmode, info); -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info); +u32 vxres =GETVXRES (ops->p, info); area.sy = vyres - ((sy + height) * vc->vc_font.height); area.sx = vxres - ((sx + width) * vc->vc_font.width);
@@ -69,8 +69,8 @@ static void ud_clear(struct vc_data *vc, struct fb_info *info, int sy,struct fbcon_ops *ops = info->fbcon_par;struct fb_fillrect region;int bgshift = (vc->vc_hi_font_mask) ?13 :12 ; -u32 vyres =GETVYRES (ops->p->scrollmode, info); -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info); +u32 vxres =GETVXRES (ops->p, info); region.color =attr_bgcol_ec (bgshift,vc,info); region.dy = vyres - ((sy + height) * vc->vc_font.height);
@@ -162,8 +162,8 @@ static void ud_putcs(struct vc_data *vc, struct fb_info *info,u32 mod = vc->vc_font.width %8 , cnt, pitch, size;u32 attribute =get_attribute (info,scr_readw (s));u8 *dst, *buf =NULL ; -u32 vyres =GETVYRES (ops->p->scrollmode, info); -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info); +u32 vxres =GETVXRES (ops->p, info);if (!ops->fontbuffer)return ;
@@ -259,8 +259,8 @@ static void ud_cursor(struct vc_data *vc, struct fb_info *info, int mode,int attribute, use_sw = vc->vc_cursor_type &CUR_SW ;int err =1 , dx, dy;char *src; -u32 vyres =GETVYRES (ops->p->scrollmode, info); -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info); +u32 vxres =GETVXRES (ops->p, info);if (!ops->fontbuffer)return ;
@@ -410,8 +410,8 @@ static int ud_update_start(struct fb_info *info) {struct fbcon_ops *ops = info->fbcon_par;int xoffset, yoffset; -u32 vyres =GETVYRES (ops->p->scrollmode, info); -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info); +u32 vxres =GETVXRES (ops->p, info);int err; xoffset = vxres - info->var.xres - ops->var.xoffset;
fs/btrfs/qgroup.c +19 -2
@@ -1186,9 +1186,24 @@ int btrfs_quota_disable(struct btrfs_fs_info *fs_info)struct btrfs_trans_handle *trans =NULL ;int ret =0 ; +/* +* We need to have subvol_sem write locked, to prevent races between +* concurrent tasks trying to disable quotas, because we will unlock +* and relock qgroup_ioctl_lock across BTRFS_FS_QUOTA_ENABLED changes. +*/ +lockdep_assert_held_write (&fs_info->subvol_sem); +mutex_lock (&fs_info->qgroup_ioctl_lock);if (!fs_info->quota_root) goto out; + +/* +* Request qgroup rescan worker to complete and wait for it. This wait +* must be done before transaction start for quota disable since it may +* deadlock with transaction by the qgroup rescan worker. +*/ +clear_bit (BTRFS_FS_QUOTA_ENABLED , &fs_info->flags); +btrfs_qgroup_wait_for_completion (fs_info, false);mutex_unlock (&fs_info->qgroup_ioctl_lock);/*
@@ -1206,14 +1221,13 @@ int btrfs_quota_disable(struct btrfs_fs_info *fs_info)if (IS_ERR (trans)) { ret =PTR_ERR (trans); trans =NULL ; +set_bit (BTRFS_FS_QUOTA_ENABLED , &fs_info->flags); goto out; }if (!fs_info->quota_root) goto out; -clear_bit (BTRFS_FS_QUOTA_ENABLED , &fs_info->flags); -btrfs_qgroup_wait_for_completion (fs_info, false);spin_lock (&fs_info->qgroup_lock); quota_root = fs_info->quota_root; fs_info->quota_root =NULL ;
@@ -3390,6 +3404,9 @@ qgroup_rescan_init(struct btrfs_fs_info *fs_info, u64 progress_objectid,btrfs_warn (fs_info,"qgroup rescan init failed, qgroup is not enabled" ); ret = -EINVAL ; + }else if (!test_bit (BTRFS_FS_QUOTA_ENABLED , &fs_info->flags)) { +/* Quota disable is in progress */ + ret = -EBUSY ; }if (ret) {
fs/ext4/ext4.h +3 -0
@@ -2779,6 +2779,9 @@ void ext4_fc_replay_cleanup(struct super_block *sb);int ext4_fc_commit (journal_t *journal,tid_t commit_tid);int __init ext4_fc_init_dentry_cache (void );void ext4_fc_destroy_dentry_cache (void ); +int ext4_fc_record_regions (struct super_block *sb,int ino, +ext4_lblk_t lblk,ext4_fsblk_t pblk, +int len,int replay);/* mballoc.c */ extern const struct seq_operations ext4_mb_seq_groups_ops;
fs/ext4/extents.c +4 -0
@@ -6088,11 +6088,15 @@ int ext4_ext_clear_bb(struct inode *inode)ext4_mb_mark_bb (inode->i_sb, path[j].p_block,1 ,0 ); +ext4_fc_record_regions (inode->i_sb, inode->i_ino, +0 , path[j].p_block,1 ,1 ); }ext4_ext_drop_refs (path);kfree (path); }ext4_mb_mark_bb (inode->i_sb, map.m_pblk, map.m_len,0 ); +ext4_fc_record_regions (inode->i_sb, inode->i_ino, + map.m_lblk, map.m_pblk, map.m_len,1 ); } cur = cur + map.m_len; }
fs/ext4/fast_commit.c +47 -42
191 lines not on this page · raw message
fs/ext4/inline.c +9 -1
@@ -1120,7 +1120,15 @@ static void ext4_restore_inline_data(handle_t *handle, struct inode *inode,struct ext4_iloc *iloc, void *buf, int inline_size) { -ext4_create_inline_data (handle ,inode ,inline_size ); + int ret; + + ret =ext4_create_inline_data (handle, inode, inline_size); +if (ret) { +ext4_msg (inode->i_sb,KERN_EMERG , +"error restoring inline_data for inode -- potential data loss! (inode %lu, error %d)" , + inode->i_ino, ret); +return ; + }ext4_write_inline_data (inode, iloc, buf,0 , inline_size);ext4_set_inode_state (inode,EXT4_STATE_MAY_INLINE_DATA ); }
fs/ext4/mballoc.c +17 -9
@@ -5173,7 +5173,8 @@ static ext4_fsblk_t ext4_mb_new_blocks_simple(handle_t *handle,struct super_block *sb = ar->inode->i_sb;ext4_group_t group;ext4_grpblk_t blkoff; -int i = sb->s_blocksize; +ext4_grpblk_t max =EXT4_CLUSTERS_PER_GROUP (sb); +ext4_grpblk_t i =0 ;ext4_fsblk_t goal, block;struct ext4_super_block *es =EXT4_SB (sb)->s_es;
@@ -5195,19 +5196,26 @@ static ext4_fsblk_t ext4_mb_new_blocks_simple(handle_t *handle,ext4_get_group_no_and_offset (sb,max (ext4_group_first_block_no (sb, group), goal),NULL , &blkoff); - i =mb_find_next_zero_bit (bitmap_bh->b_data, sb->s_blocksize, +while (1 ) { + i =mb_find_next_zero_bit (bitmap_bh->b_data, max, blkoff); +if (i >= max) +break ; +if (ext4_fc_replay_check_excluded (sb, +ext4_group_first_block_no (sb, group) + i)) { + blkoff = i +1 ; + }else +break ; + }brelse (bitmap_bh); -if (i >= sb->s_blocksize) -continue ; -if (ext4_fc_replay_check_excluded (sb, -ext4_group_first_block_no (sb, group) + i)) -continue ; -break ; +if (i < max) +break ; } -if (group >=ext4_get_groups_count (sb) && i >= sb->s_blocksize) +if (group >=ext4_get_groups_count (sb) || i >= max) { + *errp = -ENOSPC ;return 0 ; + } block =ext4_group_first_block_no (sb, group) + i;ext4_mb_mark_bb (sb, block,1 ,1 );
fs/fs_context.c +2 -2
@@ -231,7 +231,7 @@ static struct fs_context *alloc_fs_context(struct file_system_type *fs_type,struct fs_context *fc;int ret = -ENOMEM ; - fc =kzalloc (sizeof (struct fs_context ),GFP_KERNEL ); + fc =kzalloc (sizeof (struct fs_context ),GFP_KERNEL_ACCOUNT );if (!fc)return ERR_PTR (-ENOMEM );
@@ -631,7 +631,7 @@ const struct fs_context_operations legacy_fs_context_ops = {*/ static int legacy_init_fs_context (struct fs_context *fc) { - fc->fs_private =kzalloc (sizeof (struct legacy_fs_context ),GFP_KERNEL ); + fc->fs_private =kzalloc (sizeof (struct legacy_fs_context ),GFP_KERNEL_ACCOUNT );if (!fc->fs_private)return -ENOMEM ; fc->ops = &legacy_fs_context_ops;
fs/nfsd/nfs4state.c +3 -1
@@ -4047,8 +4047,10 @@ nfsd4_setclientid_confirm(struct svc_rqst *rqstp, status = nfserr_clid_inuse;if (client_has_state (old) && !same_creds (&unconf->cl_cred, - &old->cl_cred)) + &old->cl_cred)) { + old =NULL ; goto out; + } status =mark_client_expired_locked (old);if (status) { old =NULL ;
include/linux/pgtable.h +1 -0
@@ -44,6 +44,7 @@ static inline unsigned long pte_index(unsigned long address) {return (address >>PAGE_SHIFT ) & (PTRS_PER_PTE -1 ); } +#define pte_index pte_index#ifndef pmd_indexstatic inline unsigned long pmd_index (unsigned long address)
kernel/audit.c +43 -19
143 lines not on this page · raw message
kernel/bpf/ringbuf.c +1 -1
@@ -108,7 +108,7 @@ static struct bpf_ringbuf *bpf_ringbuf_area_alloc(size_t data_sz, int numa_node) } rb =vmap (pages, nr_meta_pages +2 * nr_data_pages, -VM_ALLOC |VM_USERMAP ,PAGE_KERNEL ); +VM_MAP |VM_USERMAP ,PAGE_KERNEL );if (rb) {kmemleak_not_leak (pages); rb->pages = pages;
kernel/cgroup/cpuset.c +10 -0
@@ -1481,10 +1481,15 @@ static void update_sibling_cpumasks(struct cpuset *parent, struct cpuset *cs,struct cpuset *sibling;struct cgroup_subsys_state *pos_css; +percpu_rwsem_assert_held (&cpuset_rwsem); +/* * Check all its siblings and call update_cpumasks_hier() * if their use_parent_ecpus flag is set in order for them * to use the right effective_cpus value. +* +* The update_cpumasks_hier() function may sleep. So we have to +* release the RCU read lock before calling it. */ rcu_read_lock ();cpuset_for_each_child (sibling, pos_css, parent) {
@@ -1492,8 +1497,13 @@ static void update_sibling_cpumasks(struct cpuset *parent, struct cpuset *cs,continue ;if (!sibling->use_parent_ecpus)continue ; +if (!css_tryget_online (&sibling->css)) +continue ; +rcu_read_unlock ();update_cpumasks_hier (sibling, tmp); +rcu_read_lock (); +css_put (&sibling->css); }rcu_read_unlock (); }
mm/debug_vm_pgtable.c +2 -0
@@ -128,6 +128,8 @@ static void __init pte_advanced_tests(struct mm_struct *mm,ptep_test_and_clear_young (vma, vaddr, ptep); pte =ptep_get (ptep);WARN_ON (pte_young (pte)); + +ptep_get_and_clear_full (mm, vaddr, ptep,1 ); }static void __init pte_savedwrite_tests (unsigned long pfn,pgprot_t prot)
mm/kmemleak.c +7 -6
@@ -1401,7 +1401,8 @@ static void kmemleak_scan(void) {unsigned long flags;struct kmemleak_object *object; -int i; +struct zone *zone; +int __maybe_unused i;int new_leaks =0 ; jiffies_last_scan = jiffies;
@@ -1441,9 +1442,9 @@ static void kmemleak_scan(void)* Struct page scanning for each node. */ get_online_mems (); -for_each_online_node (i) { -unsigned long start_pfn =node_start_pfn (i); -unsigned long end_pfn =node_end_pfn (i); +for_each_populated_zone (zone) { +unsigned long start_pfn = zone->zone_start_pfn; +unsigned long end_pfn =zone_end_pfn (zone);unsigned long pfn;for (pfn = start_pfn; pfn < end_pfn; pfn++) {
@@ -1452,8 +1453,8 @@ static void kmemleak_scan(void)if (!page)continue ; -/* only scan pages belonging to this node */ -if (page_to_nid (page) != i) +/* only scan pages belonging to this zone */ +if (page_zone (page) != zone)continue ;/* only scan if page is in use */ if (page_count (page) ==0 )
net/ieee802154/nl802154.c +4 -4
@@ -1441,7 +1441,7 @@ static int nl802154_send_key(struct sk_buff *msg, u32 cmd, u32 portid, hdr =nl802154hdr_put (msg, portid, seq, flags, cmd);if (!hdr) -return -1 ; +return -ENOBUFS ;if (nla_put_u32 (msg,NL802154_ATTR_IFINDEX , dev->ifindex)) goto nla_put_failure;
@@ -1634,7 +1634,7 @@ static int nl802154_send_device(struct sk_buff *msg, u32 cmd, u32 portid, hdr =nl802154hdr_put (msg, portid, seq, flags, cmd);if (!hdr) -return -1 ; +return -ENOBUFS ;if (nla_put_u32 (msg,NL802154_ATTR_IFINDEX , dev->ifindex)) goto nla_put_failure;
@@ -1812,7 +1812,7 @@ static int nl802154_send_devkey(struct sk_buff *msg, u32 cmd, u32 portid, hdr =nl802154hdr_put (msg, portid, seq, flags, cmd);if (!hdr) -return -1 ; +return -ENOBUFS ;if (nla_put_u32 (msg,NL802154_ATTR_IFINDEX , dev->ifindex)) goto nla_put_failure;
@@ -1988,7 +1988,7 @@ static int nl802154_send_seclevel(struct sk_buff *msg, u32 cmd, u32 portid, hdr =nl802154hdr_put (msg, portid, seq, flags, cmd);if (!hdr) -return -1 ; +return -ENOBUFS ;if (nla_put_u32 (msg,NL802154_ATTR_IFINDEX , dev->ifindex)) goto nla_put_failure;
security/selinux/ss/conditional.c +2 -1
@@ -152,6 +152,8 @@ static void cond_list_destroy(struct policydb *p)for (i =0 ; i < p->cond_list_len; i++)cond_node_destroy (&p->cond_list[i]);kfree (p->cond_list); + p->cond_list =NULL ; + p->cond_list_len =0 ; }void cond_policydb_destroy (struct policydb *p)
@@ -440,7 +442,6 @@ int cond_read_list(struct policydb *p, void *fp)return 0 ; err:cond_list_destroy (p); - p->cond_list =NULL ;return rc; }
sound/pci/hda/hda_generic.c +15 -2
@@ -91,6 +91,12 @@ static void snd_hda_gen_spec_free(struct hda_gen_spec *spec)free_kctls (spec);snd_array_free (&spec->paths);snd_array_free (&spec->loopback_list); +#ifdef CONFIG_SND_HDA_GENERIC_LEDS +if (spec->led_cdevs[LED_AUDIO_MUTE ]) +led_classdev_unregister (spec->led_cdevs[LED_AUDIO_MUTE ]); +if (spec->led_cdevs[LED_AUDIO_MICMUTE ]) +led_classdev_unregister (spec->led_cdevs[LED_AUDIO_MICMUTE ]); +#endif }/*
@@ -3911,7 +3917,10 @@ static int create_mute_led_cdev(struct hda_codec *codec, enum led_brightness), bool micmute) { +struct hda_gen_spec *spec = codec->spec;struct led_classdev *cdev; +int idx = micmute ?LED_AUDIO_MICMUTE :LED_AUDIO_MUTE ; +int err; cdev =devm_kzalloc (&codec->core.dev,sizeof (*cdev),GFP_KERNEL );if (!cdev)
@@ -3921,10 +3930,14 @@ static int create_mute_led_cdev(struct hda_codec *codec, cdev->max_brightness =1 ; cdev->default_trigger = micmute ?"audio-micmute" :"audio-mute" ; cdev->brightness_set_blocking = callback; - cdev->brightness =ledtrig_audio_get (micmute ?LED_AUDIO_MICMUTE :LED_AUDIO_MUTE ); + cdev->brightness =ledtrig_audio_get (idx); cdev->flags =LED_CORE_SUSPENDRESUME ; -return devm_led_classdev_register (&codec->core.dev, cdev); + err =led_classdev_register (&codec->core.dev, cdev); +if (err <0 ) +return err; + spec->led_cdevs[idx] = cdev; +return 0 ; }static void vmaster_update_mute_led (void *private_data,int enabled)
sound/pci/hda/hda_generic.h +3 -0
@@ -305,6 +305,9 @@ struct hda_gen_spec { struct hda_jack_callback *cb);void (*mic_autoswitch_hook)(struct hda_codec *codec,struct hda_jack_callback *cb); + +/* leds */ +struct led_classdev *led_cdevs[NUM_AUDIO_LEDS ]; };/* values for add_stereo_mix_input flag */
sound/pci/hda/patch_realtek.c +55 -12
141 lines not on this page · raw message
sound/soc/codecs/cpcap.c +2 -0
@@ -1544,6 +1544,8 @@ static int cpcap_codec_probe(struct platform_device *pdev) {struct device_node *codec_node =of_get_child_by_name (pdev->dev.parent->of_node,"audio-codec" ); +if (!codec_node) +return -ENODEV ; pdev->dev.of_node = codec_node;
sound/soc/codecs/max9759.c +2 -1
@@ -64,7 +64,8 @@ static int speaker_gain_control_put(struct snd_kcontrol *kcontrol,struct snd_soc_component *c =snd_soc_kcontrol_component (kcontrol);struct max9759 *priv =snd_soc_component_get_drvdata (c); -if (ucontrol->value.integer.value[0 ] >3 ) +if (ucontrol->value.integer.value[0 ] <0 || + ucontrol->value.integer.value[0 ] >3 )return -EINVAL ; priv->gain = ucontrol->value.integer.value[0 ];
sound/soc/fsl/pcm030-audio-fabric.c +8 -3
@@ -93,16 +93,21 @@ static int pcm030_fabric_probe(struct platform_device *op)dev_err (&op->dev,"platform_device_alloc() failed\n" ); ret =platform_device_add (pdata->codec_device); -if (ret) +if (ret) {dev_err (&op->dev,"platform_device_add() failed: %d\n" , ret); +platform_device_put (pdata->codec_device); + } ret =snd_soc_register_card (card); -if (ret) +if (ret) {dev_err (&op->dev,"snd_soc_register_card() failed: %d\n" , ret); +platform_device_del (pdata->codec_device); +platform_device_put (pdata->codec_device); + }platform_set_drvdata (op, pdata); -return ret; + }static int pcm030_fabric_remove (struct platform_device *op)
sound/soc/soc-ops.c +26 -3
@@ -316,13 +316,27 @@ int snd_soc_put_volsw(struct snd_kcontrol *kcontrol,if (sign_bit) mask =BIT (sign_bit +1 ) -1 ; - val = ((ucontrol->value.integer.value[0 ] + min) & mask); + val = ucontrol->value.integer.value[0 ]; +if (mc->platform_max && val > mc->platform_max) +return -EINVAL ; +if (val > max - min) +return -EINVAL ; +if (val <0 ) +return -EINVAL ; + val = (val + min) & mask;if (invert) val = max - val; val_mask = mask << shift; val = val << shift;if (snd_soc_volsw_is_stereo (mc)) { - val2 = ((ucontrol->value.integer.value[1 ] + min) & mask); + val2 = ucontrol->value.integer.value[1 ]; +if (mc->platform_max && val2 > mc->platform_max) +return -EINVAL ; +if (val2 > max - min) +return -EINVAL ; +if (val2 <0 ) +return -EINVAL ; + val2 = (val2 + min) & mask;if (invert) val2 = max - val2;if (reg == reg2) {
@@ -409,8 +423,15 @@ int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol,int err =0 ;unsigned int val, val_mask, val2 =0 ; + val = ucontrol->value.integer.value[0 ]; +if (mc->platform_max && val > mc->platform_max) +return -EINVAL ; +if (val > max - min) +return -EINVAL ; +if (val <0 ) +return -EINVAL ; val_mask = mask << shift; - val = (ucontrol->value.integer.value[0 ] + min) & mask; + val = (val + min) & mask; val = val << shift; err =snd_soc_component_update_bits (component, reg, val_mask, val);
@@ -859,6 +880,8 @@ int snd_soc_put_xr_sx(struct snd_kcontrol *kcontrol,unsigned int i, regval, regmask;int err; +if (val < mc->min || val > mc->max) +return -EINVAL ;if (invert) val = max - val; val &= mask;
sound/soc/xilinx/xlnx_formatter_pcm.c +24 -3
@@ -37,6 +37,7 @@#define XLNX_AUD_XFER_COUNT 0x28#define XLNX_AUD_CH_STS_START 0x2C#define XLNX_BYTES_PER_CH 0x44 +#define XLNX_AUD_ALIGN_BYTES 64#define AUD_STS_IOC_IRQ_MASK BIT(31)#define AUD_STS_CH_STS_MASK BIT(29)
@@ -368,12 +369,32 @@ static int xlnx_formatter_pcm_open(struct snd_soc_component *component,snd_soc_set_runtime_hwparams (substream, &xlnx_pcm_hardware); runtime->private_data = stream_data; -/* Resize the period size divisible by 64 */ +/* Resize the period bytes as divisible by 64 */ err =snd_pcm_hw_constraint_step (runtime,0 , -SNDRV_PCM_HW_PARAM_PERIOD_BYTES ,64 ); +SNDRV_PCM_HW_PARAM_PERIOD_BYTES , +XLNX_AUD_ALIGN_BYTES );if (err) {dev_err (component->dev, -"unable to set constraint on period bytes\n" ); +"Unable to set constraint on period bytes\n" ); +return err; + } + +/* Resize the buffer bytes as divisible by 64 */ + err =snd_pcm_hw_constraint_step (runtime,0 , +SNDRV_PCM_HW_PARAM_BUFFER_BYTES , +XLNX_AUD_ALIGN_BYTES ); +if (err) { +dev_err (component->dev, +"Unable to set constraint on buffer bytes\n" ); +return err; + } + +/* Set periods as integer multiple */ + err =snd_pcm_hw_constraint_integer (runtime, +SNDRV_PCM_HW_PARAM_PERIODS ); +if (err <0 ) { +dev_err (component->dev, +"Unable to set constraint on periods to be integer\n" );return err; }
sound/usb/quirks-table.h +1 -1
@@ -84,7 +84,7 @@* combination. */ { - USB_DEVICE(0x041e, 0x4095), + USB_AUDIO_DEVICE(0x041e, 0x4095), .driver_info = (unsigned long ) &(const struct snd_usb_audio_quirk ) { .ifnum =QUIRK_ANY_INTERFACE , .type =QUIRK_COMPOSITE ,
tools/bpf/resolve_btfids/Makefile +5 -1
@@ -9,7 +9,11 @@ ifeq ($(V),1) msg = else Q = @ - msg = @printf ' %-8s %s%s\n' "$(1)" "$(notdir $(2))" "$(if $(3), $(3))"; + ifeq ($(silent),1) + msg = + else + msg = @printf ' %-8s %s%s\n' "$(1)" "$(notdir $(2))" "$(if $(3), $(3))"; + endif MAKEFLAGS=--no-print-directory endif
tools/perf/util/stat-display.c +10 -9
@@ -555,15 +555,16 @@ static void collect_all_aliases(struct perf_stat_config *config, struct evsel *c alias =list_prepare_entry (counter, &(evlist->core.entries), core.node); list_for_each_entry_continue (alias, &evlist->core.entries, core.node) { -if (strcmp (evsel__name (alias),evsel__name (counter)) || - alias->scale != counter->scale || - alias->cgrp != counter->cgrp || -strcmp (alias->unit, counter->unit) || -evsel__is_clock (alias) !=evsel__is_clock (counter) || - !strcmp (alias->pmu_name, counter->pmu_name)) -break ; - alias->merged_stat = true; -cb (config, alias, data, false); +/* Merge events with the same name, etc. but on different PMUs. */ +if (!strcmp (evsel__name (alias),evsel__name (counter)) && + alias->scale == counter->scale && + alias->cgrp == counter->cgrp && + !strcmp (alias->unit, counter->unit) && +evsel__is_clock (alias) ==evsel__is_clock (counter) && +strcmp (alias->pmu_name, counter->pmu_name)) { + alias->merged_stat = true; +cb (config, alias, data, false); + } } }
tools/testing/selftests/exec/Makefile +1 -1
@@ -5,7 +5,7 @@ CFLAGS += -D_GNU_SOURCE TEST_PROGS := binfmt_script non-regular TEST_GEN_PROGS := execveat load_address_4096 load_address_2097152 load_address_16777216 -TEST_GEN_FILES := execveat.symlink execveat.denatured script subdir pipe +TEST_GEN_FILES := execveat.symlink execveat.denatured script subdir # Makefile is a run-time dependency, since it's accessed by the execveat test TEST_FILES := Makefile
tools/testing/selftests/futex/Makefile +2 -2
@@ -11,7 +11,7 @@ all: @for DIR in $(SUBDIRS); do \ BUILD_TARGET=$(OUTPUT)/$$DIR; \ mkdir $$BUILD_TARGET -p; \ - make OUTPUT=$$BUILD_TARGET -C $$DIR $@;\ + $(MAKE) OUTPUT=$$BUILD_TARGET -C $$DIR $@;\ if [ -e $$DIR/$(TEST_PROGS) ]; then \ rsync -a $$DIR/$(TEST_PROGS) $$BUILD_TARGET/; \ fi \
@@ -32,6 +32,6 @@ override define CLEAN @for DIR in $(SUBDIRS); do \ BUILD_TARGET=$(OUTPUT)/$$DIR; \ mkdir $$BUILD_TARGET -p; \ - make OUTPUT=$$BUILD_TARGET -C $$DIR $@;\ + $(MAKE) OUTPUT=$$BUILD_TARGET -C $$DIR $@;\ done endef
tools/testing/selftests/netfilter/nft_concat_range.sh +71 -1
90 lines not on this page · raw message