Linux 5.14.13
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.14.13 kernel.
All users of the 5.14 kernel series must upgrade.
The updated 5.14.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.14.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
------------
Makefile | 2 arch/arm64/kvm/hyp/nvhe/Makefile | 2 arch/m68k/kernel/signal.c | 88 ++++++------- drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c | 3 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 3 drivers/hid/hid-apple.c | 7 + drivers/hid/wacom_wac.c | 8 + drivers/hwmon/ltc2947-core.c | 8 - drivers/hwmon/pmbus/ibm-cffps.c | 10 + drivers/net/ethernet/broadcom/bgmac-platform.c | 3 drivers/net/ethernet/sun/Kconfig | 1 drivers/pinctrl/qcom/pinctrl-sc7280.c | 1 drivers/scsi/qla2xxx/qla_isr.c | 4 drivers/scsi/ses.c | 2 drivers/scsi/virtio_scsi.c | 4 fs/ext4/inline.c | 15 -- fs/ext4/inode.c | 41 +++--- fs/io_uring.c | 17 -- fs/vboxsf/super.c | 12 - include/linux/perf_event.h | 4 include/linux/sched.h | 2 include/net/pkt_sched.h | 1 kernel/events/core.c | 34 ++++- net/ipv6/netfilter/ip6_tables.c | 1 net/mac80211/mesh_pathtbl.c | 5 net/mac80211/rx.c | 3 net/netfilter/nf_nat_masquerade.c | 168 ++++++++++++++----------- net/sched/sch_api.c | 6 sound/firewire/oxfw/oxfw.c | 13 + sound/soc/intel/boards/sof_sdw.c | 5 sound/soc/sof/core.c | 4 sound/soc/sof/loader.c | 2 sound/usb/card.c | 18 -- sound/usb/mixer.c | 26 --- sound/usb/mixer.h | 3 sound/usb/mixer_quirks.c | 2 36 files changed, 290 insertions(+), 238 deletions(-)
Al Viro (1):
m68k: Handle arrivals of multiple signals correctly
Arun Easi (1):
scsi: qla2xxx: Fix excessive messages during device logout
Brandon Wyman (1):
hwmon: (pmbus/ibm-cffps) max_power_out swap changes
Colin Ian King (1):
scsi: virtio_scsi: Fix spelling mistake "Unsupport" -> "Unsupported"
Florian Westphal (2):
netfilter: nf_nat_masquerade: make async masq_inet6_event handling generic
netfilter: nf_nat_masquerade: defer conntrack walk to work queue
Greg Kroah-Hartman (1):
Linux 5.14.13
Jeremy Sowden (1):
netfilter: ip6_tables: zero-initialize fragment offset
Jiapeng Chong (1):
scsi: ses: Fix unsigned comparison with less than zero
Joshua-Dickens (1):
HID: wacom: Add new Intuos BT (CTL-4100WL/CTL-6100WL) device IDs
Leslie Shi (1):
drm/amdgpu: fix gart.bo pin_count leak
Linus Torvalds (1):
vboxfs: fix broken legacy mount signature checking
Marc Herbert (1):
ASoC: SOF: loader: release_firmware() on load failure to avoid batching
Matthew Hagan (1):
net: bgmac-platform: handle mac-address deferral
MichelleJin (1):
mac80211: check return value of rhashtable_init
Mizuho Mori (1):
HID: apple: Fix logical maximum and usage maximum of Magic Keyboard JIS
Pavel Begunkov (1):
io_uring: kill fasync
Peter Zijlstra (1):
sched: Always inline is_percpu_thread()
Pierre-Louis Bossart (1):
ASoC: Intel: sof_sdw: tag SoundWire BEs as non-atomic
Rajendra Nayak (1):
pinctrl: qcom: sc7280: Add PM suspend callbacks
Randy Dunlap (1):
net: sun: SUNVNET_COMMON should depend on INET
Song Liu (1):
perf/core: fix userpage->time_enabled of inactive events
Takashi Iwai (1):
ALSA: usb-audio: Unify mixer resume and reset_resume procedure
Takashi Sakamoto (1):
ALSA: oxfw: fix transmission method for Loud models based on OXFW971
Uwe Kleine-König (1):
hwmon: (ltc2947) Properly handle errors when looking for the external clock
YueHaibing (1):
mac80211: Drop frames from invalid MAC address in ad-hoc mode
Zenghui Yu (1):
KVM: arm64: nvhe: Fix missing FORCE for hyp-reloc.S build rule
Zhang Yi (2):
ext4: check and update i_disksize properly
ext4: correct the error path of ext4_write_inline_data_end()
王贇 (1):
net: prevent user from passing illegal stab size
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 14 -SUBLEVEL = 12 +SUBLEVEL = 13 EXTRAVERSION = NAME = Opossums on Parade
arch/arm64/kvm/hyp/nvhe/Makefile +1 -1
@@ -54,7 +54,7 @@ $(obj)/kvm_nvhe.tmp.o: $(obj)/hyp.lds $(addprefix $(obj)/,$(hyp-obj)) FORCE # runtime. Because the hypervisor is part of the kernel binary, relocations # produce a kernel VA. We enumerate relocations targeting hyp at build time # and convert the kernel VAs at those positions to hyp VAs. -$(obj)/hyp-reloc.S: $(obj)/kvm_nvhe.tmp.o $(obj)/gen-hyprel +$(obj)/hyp-reloc.S: $(obj)/kvm_nvhe.tmp.o $(obj)/gen-hyprel FORCE $(call if_changed,hyprel) # 5) Compile hyp-reloc.S and link it into the existing partially linked object.
arch/m68k/kernel/signal.c +42 -46
184 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c +2 -1
@@ -1094,6 +1094,8 @@ static int gmc_v10_0_hw_fini(void *handle) {struct amdgpu_device *adev = (struct amdgpu_device *)handle; +gmc_v10_0_gart_disable (adev); +if (amdgpu_sriov_vf (adev)) {/* full access mode, so don't touch any GMC register */ DRM_DEBUG ("For SRIOV client, shouldn't do anything.\n" );
@@ -1102,7 +1104,6 @@ static int gmc_v10_0_hw_fini(void *handle)amdgpu_irq_put (adev, &adev->gmc.ecc_irq,0 );amdgpu_irq_put (adev, &adev->gmc.vm_fault,0 ); -gmc_v10_0_gart_disable (adev);return 0 ; }
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c +2 -1
@@ -1764,6 +1764,8 @@ static int gmc_v9_0_hw_fini(void *handle) {struct amdgpu_device *adev = (struct amdgpu_device *)handle; +gmc_v9_0_gart_disable (adev); +if (amdgpu_sriov_vf (adev)) {/* full access mode, so don't touch any GMC register */ DRM_DEBUG ("For SRIOV client, shouldn't do anything.\n" );
@@ -1772,7 +1774,6 @@ static int gmc_v9_0_hw_fini(void *handle)amdgpu_irq_put (adev, &adev->gmc.ecc_irq,0 );amdgpu_irq_put (adev, &adev->gmc.vm_fault,0 ); -gmc_v9_0_gart_disable (adev);return 0 ; }
drivers/hid/hid-apple.c +7 -0
@@ -322,12 +322,19 @@ static int apple_event(struct hid_device *hdev, struct hid_field *field,/* * MacBook JIS keyboard has wrong logical maximum +* Magic Keyboard JIS has wrong logical maximum */ static __u8 *apple_report_fixup (struct hid_device *hdev,__u8 *rdesc,unsigned int *rsize) {struct apple_sc *asc =hid_get_drvdata (hdev); +if (*rsize >=71 && rdesc[70 ] ==0x65 && rdesc[64 ] ==0x65 ) { +hid_info (hdev, +"fixing up Magic Keyboard JIS report descriptor\n" ); + rdesc[64 ] = rdesc[70 ] =0xe7 ; + } +if ((asc->quirks &APPLE_RDESC_JIS ) && *rsize >=60 && rdesc[53 ] ==0x65 && rdesc[59 ] ==0x65 ) { hid_info(hdev,
drivers/hid/wacom_wac.c +8 -0
@@ -4720,6 +4720,12 @@ static const struct wacom_features wacom_features_0x393 = {"Wacom Intuos Pro S" ,31920 ,19950 ,8191 ,63 ,INTUOSP2S_BT ,WACOM_INTUOS3_RES ,WACOM_INTUOS3_RES ,7 , .touch_max = 10 }; +static const struct wacom_features wacom_features_0x3c6 = + {"Wacom Intuos BT S" ,15200 ,9500 ,4095 ,63 , +INTUOSHT3_BT ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES ,4 }; +static const struct wacom_features wacom_features_0x3c8 = + {"Wacom Intuos BT M" ,21600 ,13500 ,4095 ,63 , +INTUOSHT3_BT ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES ,4 };static const struct wacom_features wacom_features_HID_ANY_ID = {"Wacom HID" , .type =HID_GENERIC , .oVid =HID_ANY_ID , .oPid =HID_ANY_ID };
@@ -4893,6 +4899,8 @@ const struct hid_device_id wacom_ids[] = { { USB_DEVICE_WACOM(0x37A) }, { USB_DEVICE_WACOM(0x37B) }, { BT_DEVICE_WACOM(0x393) }, + { BT_DEVICE_WACOM(0x3c6) }, + { BT_DEVICE_WACOM(0x3c8) }, { USB_DEVICE_WACOM(0x4001) }, { USB_DEVICE_WACOM(0x4004) }, { USB_DEVICE_WACOM(0x5000) },
drivers/hwmon/ltc2947-core.c +6 -2
@@ -989,8 +989,12 @@ static int ltc2947_setup(struct ltc2947_data *st)return ret;/* check external clock presence */ - extclk =devm_clk_get (st->dev,NULL ); -if (!IS_ERR (extclk)) { + extclk =devm_clk_get_optional (st->dev,NULL ); +if (IS_ERR (extclk)) +return dev_err_probe (st->dev,PTR_ERR (extclk), +"Failed to get external clock\n" ); + +if (extclk) {unsigned long rate_hz;u8 pre =0 , div, tbctl;u64 aux;
drivers/hwmon/pmbus/ibm-cffps.c +8 -2
@@ -171,8 +171,14 @@ static ssize_t ibm_cffps_debugfs_read(struct file *file, char __user *buf, cmd =CFFPS_SN_CMD ;break ;case CFFPS_DEBUGFS_MAX_POWER_OUT : - rc =i2c_smbus_read_word_swapped (psu->client, -CFFPS_MAX_POWER_OUT_CMD ); +if (psu->version == cffps1) { + rc =i2c_smbus_read_word_swapped (psu->client, +CFFPS_MAX_POWER_OUT_CMD ); + }else { + rc =i2c_smbus_read_word_data (psu->client, +CFFPS_MAX_POWER_OUT_CMD ); + } +if (rc <0 )return rc;
drivers/net/ethernet/broadcom/bgmac-platform.c +3 -0
@@ -192,6 +192,9 @@ static int bgmac_probe(struct platform_device *pdev) bgmac->dma_dev = &pdev->dev; ret =of_get_mac_address (np, bgmac->net_dev->dev_addr); +if (ret == -EPROBE_DEFER ) +return ret; +if (ret)dev_warn (&pdev->dev,"MAC address not present in device tree\n" );
drivers/net/ethernet/sun/Kconfig +1 -0
@@ -73,6 +73,7 @@ config CASSINI config SUNVNET_COMMON tristate "Common routines to support Sun Virtual Networking" depends on SUN_LDOMS + depends on INET default m config SUNVNET
drivers/pinctrl/qcom/pinctrl-sc7280.c +1 -0
@@ -1496,6 +1496,7 @@ static const struct of_device_id sc7280_pinctrl_of_match[] = {static struct platform_driver sc7280_pinctrl_driver = { .driver = { .name ="sc7280-pinctrl" , + .pm = &msm_pinctrl_dev_pm_ops, .of_match_table = sc7280_pinctrl_of_match, }, .probe = sc7280_pinctrl_probe,
drivers/scsi/qla2xxx/qla_isr.c +2 -2
@@ -2399,7 +2399,7 @@ static void qla24xx_nvme_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, }if (unlikely (logit)) - ql_log(ql_log_warn, fcport->vha, 0x5060, + ql_log(ql_dbg_io, fcport->vha, 0x5060, "NVME-%s ERR Handling - hdl=%x status(%x) tr_len:%x resid=%x ox_id=%x\n", sp->name, sp->handle, comp_status, fd->transferred_length, le32_to_cpu(sts->residual_len),
@@ -3246,7 +3246,7 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) out:if (logit) - ql_log(ql_log_warn, fcport->vha, 0x3022, + ql_log(ql_dbg_io, fcport->vha, 0x3022, "FCP command status: 0x%x-0x%x (0x%x) nexus=%ld:%d:%llu portid=%02x%02x%02x oxid=0x%x cdb=%10phN len=0x%x rsp_info=0x%x resid=0x%x fw_resid=0x%x sp=%p cp=%p.\n", comp_status, scsi_status, res, vha->host_no, cp->device->id, cp->device->lun, fcport->d_id.b.domain,
drivers/scsi/ses.c +1 -1
@@ -118,7 +118,7 @@ static int ses_recv_diag(struct scsi_device *sdev, int page_code,static int ses_send_diag (struct scsi_device *sdev,int page_code,void *buf,int bufflen) { -u32 result; +int result;unsigned char cmd[] = {SEND_DIAGNOSTIC ,
drivers/scsi/virtio_scsi.c +2 -2
@@ -300,7 +300,7 @@ static void virtscsi_handle_transport_reset(struct virtio_scsi *vscsi, }break ;default : -pr_info ("Unsupport virtio scsi event reason %x\n" , event->reason); +pr_info ("Unsupported virtio scsi event reason %x\n" , event->reason); } }
@@ -392,7 +392,7 @@ static void virtscsi_handle_event(struct work_struct *work)virtscsi_handle_param_change (vscsi, event);break ;default : -pr_err ("Unsupport virtio scsi event %x\n" , event->event); +pr_err ("Unsupported virtio scsi event %x\n" , event->event); }virtscsi_kick_event (vscsi, event_node); }
fs/ext4/inline.c +5 -10
@@ -733,18 +733,13 @@ int ext4_write_inline_data_end(struct inode *inode, loff_t pos, unsigned len,void *kaddr;struct ext4_iloc iloc; -if (unlikely (copied < len)) { -if (!PageUptodate (page)) { - copied =0 ; - goto out; - } - } +if (unlikely (copied < len) && !PageUptodate (page)) +return 0 ; ret =ext4_get_inode_loc (inode, &iloc);if (ret) {ext4_std_error (inode->i_sb, ret); - copied =0 ; - goto out; +return ret; }ext4_write_lock_xattr (inode, &no_expand);
@@ -757,7 +752,7 @@ int ext4_write_inline_data_end(struct inode *inode, loff_t pos, unsigned len, (void )ext4_find_inline_data_nolock (inode); kaddr =kmap_atomic (page); -ext4_write_inline_data (inode, &iloc, kaddr, pos, len); +ext4_write_inline_data (inode, &iloc, kaddr, pos, copied);kunmap_atomic (kaddr);SetPageUptodate (page);/* clear page dirty so that writepages wouldn't work for us. */
@@ -766,7 +761,7 @@ int ext4_write_inline_data_end(struct inode *inode, loff_t pos, unsigned len,ext4_write_unlock_xattr (inode, &no_expand);brelse (iloc.bh);mark_inode_dirty (inode); -out: +return copied; }
fs/ext4/inode.c +23 -18
96 lines not on this page · raw message
fs/io_uring.c +2 -15
@@ -419,7 +419,6 @@ struct io_ring_ctx {struct wait_queue_head cq_wait;unsigned cq_extra;atomic_t cq_timeouts; -struct fasync_struct *cq_fasync;unsigned cq_last_tm_flush; }____cacheline_aligned_in_smp ;
@@ -1448,10 +1447,8 @@ static void io_cqring_ev_posted(struct io_ring_ctx *ctx)wake_up (&ctx->sq_data->wait);if (io_should_trigger_evfd (ctx))eventfd_signal (ctx->cq_ev_fd,1 ); -if (waitqueue_active (&ctx->poll_wait)) { +if (waitqueue_active (&ctx->poll_wait))wake_up_interruptible (&ctx->poll_wait); -kill_fasync (&ctx->cq_fasync,SIGIO ,POLL_IN ); - } }static void io_cqring_ev_posted_iopoll (struct io_ring_ctx *ctx)
@@ -1465,10 +1462,8 @@ static void io_cqring_ev_posted_iopoll(struct io_ring_ctx *ctx) }if (io_should_trigger_evfd (ctx))eventfd_signal (ctx->cq_ev_fd,1 ); -if (waitqueue_active (&ctx->poll_wait)) { +if (waitqueue_active (&ctx->poll_wait))wake_up_interruptible (&ctx->poll_wait); -kill_fasync (&ctx->cq_fasync,SIGIO ,POLL_IN ); - } }/* Returns true if there are no backlogged entries after the flush */
@@ -8779,13 +8774,6 @@ static __poll_t io_uring_poll(struct file *file, poll_table *wait)return mask; } -static int io_uring_fasync (int fd,struct file *file,int on) -{ -struct io_ring_ctx *ctx = file->private_data; - -return fasync_helper (fd, file, on, &ctx->cq_fasync); -} -static int io_unregister_personality (struct io_ring_ctx *ctx,unsigned id) {const struct cred *creds;
@@ -9571,7 +9559,6 @@ static const struct file_operations io_uring_fops = { .mmap_capabilities = io_uring_nommu_mmap_capabilities, #endif .poll = io_uring_poll, - .fasync = io_uring_fasync, #ifdef CONFIG_PROC_FS .show_fdinfo = io_uring_show_fdinfo,#endif
fs/vboxsf/super.c +2 -10
@@ -21,10 +21,7 @@#define VBOXSF_SUPER_MAGIC 0x786f4256/* 'VBox' little endian */ -#define VBSF_MOUNT_SIGNATURE_BYTE_0 ('\000') -#define VBSF_MOUNT_SIGNATURE_BYTE_1 ('\377') -#define VBSF_MOUNT_SIGNATURE_BYTE_2 ('\376') -#define VBSF_MOUNT_SIGNATURE_BYTE_3 ('\375') +static const unsigned char VBSF_MOUNT_SIGNATURE [4 ] ="\000\377\376\375" ;static int follow_symlinks;module_param (follow_symlinks, int,0444 );
@@ -386,12 +383,7 @@ static int vboxsf_setup(void)static int vboxsf_parse_monolithic (struct fs_context *fc,void *data) { -unsigned char *options = data; - -if (options && options[0 ] ==VBSF_MOUNT_SIGNATURE_BYTE_0 && - options[1 ] ==VBSF_MOUNT_SIGNATURE_BYTE_1 && - options[2 ] ==VBSF_MOUNT_SIGNATURE_BYTE_2 && - options[3 ] ==VBSF_MOUNT_SIGNATURE_BYTE_3 ) { +if (data && !memcmp (data,VBSF_MOUNT_SIGNATURE ,4 )) {vbg_err ("vboxsf: Old binary mount data not supported, remove obsolete mount.vboxsf and/or update your VBoxService.\n" );return -EINVAL ; }
include/linux/perf_event.h +3 -1
@@ -683,7 +683,9 @@ struct perf_event {/* * timestamp shadows the actual context timing but it can * be safely used in NMI interrupt context. It reflects the -* context time as it was when the event was last scheduled in. +* context time as it was when the event was last scheduled in, +* or when ctx_sched_in failed to schedule the event because we +* run out of PMC. * * ctx_time already accounts for ctx->timestamp. Therefore to * compute ctx_time for a sample, simply add perf_clock().
include/linux/sched.h +1 -1
@@ -1633,7 +1633,7 @@ extern struct pid *cad_pid;#define tsk_used_math (p) ((p)->flags & PF_USED_MATH)#define used_math () tsk_used_math(current) -static inline bool is_percpu_thread (void ) +static __always_inline bool is_percpu_thread(void) {#ifdef CONFIG_SMP return (current->flags & PF_NO_SETAFFINITY) &&
include/net/pkt_sched.h +1 -0
@@ -11,6 +11,7 @@#include <uapi/linux/pkt_sched.h> #define DEFAULT_TX_QUEUE_LEN 1000 +#define STAB_SIZE_LOG_MAX 30struct qdisc_walker {int stop;
kernel/events/core.c +30 -4
@@ -3707,6 +3707,29 @@ static noinline int visit_groups_merge(struct perf_cpu_context *cpuctx,return 0 ; } +static inline bool event_update_userpage (struct perf_event *event) +{ +if (likely (!atomic_read (&event->mmap_count))) +return false; + +perf_event_update_time (event); +perf_set_shadow_time (event, event->ctx); +perf_event_update_userpage (event); + +return true; +} + +static inline void group_update_userpage (struct perf_event *group_event) +{ +struct perf_event *event; + +if (!event_update_userpage (group_event)) +return ; + +for_each_sibling_event (event, group_event) +event_update_userpage (event); +} +static int merge_sched_in (struct perf_event *event,void *data) {struct perf_event_context *ctx = event->ctx;
@@ -3725,14 +3748,15 @@ static int merge_sched_in(struct perf_event *event, void *data) }if (event->state ==PERF_EVENT_STATE_INACTIVE ) { + *can_add_hw =0 ;if (event->attr.pinned) {perf_cgroup_event_disable (event, ctx);perf_event_set_state (event,PERF_EVENT_STATE_ERROR ); + }else { + ctx->rotate_necessary =1 ; +perf_mux_hrtimer_restart (cpuctx); +group_update_userpage (event); } - - *can_add_hw =0 ; - ctx->rotate_necessary =1 ; -perf_mux_hrtimer_restart (cpuctx); }return 0 ;
@@ -6311,6 +6335,8 @@ static int perf_mmap(struct file *file, struct vm_area_struct *vma)ring_buffer_attach (event, rb); +perf_event_update_time (event); +perf_set_shadow_time (event, event->ctx);perf_event_init_userpage (event);perf_event_update_userpage (event); }else {
net/ipv6/netfilter/ip6_tables.c +1 -0
@@ -273,6 +273,7 @@ ip6t_do_table(struct sk_buff *skb,* things we don't know, ie. tcp syn flag or ports). If the * rule is also a fragment-specific rule, non-fragments won't * match it. */ + acpar.fragoff =0 ; acpar.hotdrop = false; acpar.state = state;
net/mac80211/mesh_pathtbl.c +4 -1
@@ -60,7 +60,10 @@ static struct mesh_table *mesh_table_alloc(void)atomic_set (&newtbl->entries,0 );spin_lock_init (&newtbl->gates_lock);spin_lock_init (&newtbl->walk_lock); -rhashtable_init (&newtbl->rhead, &mesh_rht_params); +if (rhashtable_init (&newtbl->rhead, &mesh_rht_params)) { +kfree (newtbl); +return NULL ; + }return newtbl; }
net/mac80211/rx.c +2 -1
@@ -4053,7 +4053,8 @@ static bool ieee80211_accept_frame(struct ieee80211_rx_data *rx)if (!bssid)return false;if (ether_addr_equal (sdata->vif.addr, hdr->addr2) || -ether_addr_equal (sdata->u.ibss.bssid, hdr->addr2)) +ether_addr_equal (sdata->u.ibss.bssid, hdr->addr2) || + !is_valid_ether_addr (hdr->addr2))return false;if (ieee80211_is_beacon (hdr->frame_control))return true;
net/netfilter/nf_nat_masquerade.c +97 -71
245 lines not on this page · raw message
net/sched/sch_api.c +6 -0
@@ -513,6 +513,12 @@ static struct qdisc_size_table *qdisc_get_stab(struct nlattr *opt,return stab; } +if (s->size_log >STAB_SIZE_LOG_MAX || + s->cell_log >STAB_SIZE_LOG_MAX ) { +NL_SET_ERR_MSG (extack,"Invalid logarithmic size of size table" ); +return ERR_PTR (-EINVAL ); + } + stab =kmalloc (sizeof (*stab) + tsize *sizeof (u16),GFP_KERNEL );if (!stab)return ERR_PTR (-ENOMEM );
sound/firewire/oxfw/oxfw.c +8 -5
@@ -184,13 +184,16 @@ static int detect_quirks(struct snd_oxfw *oxfw, const struct ieee1394_device_id model = val; } -/* -* Mackie Onyx Satellite with base station has a quirk to report a wrong -* value in 'dbs' field of CIP header against its format information. -*/ -if (vendor ==VENDOR_LOUD && model ==MODEL_SATELLITE ) +if (vendor ==VENDOR_LOUD ) { +// Mackie Onyx Satellite with base station has a quirk to report a wrong +// value in 'dbs' field of CIP header against its format information. oxfw->quirks |=SND_OXFW_QUIRK_WRONG_DBS ; +// OXFW971-based models may transfer events by blocking method. +if (!(oxfw->quirks &SND_OXFW_QUIRK_JUMBO_PAYLOAD )) + oxfw->quirks |=SND_OXFW_QUIRK_BLOCKING_TRANSMISSION ; + } +return 0 ; }
sound/soc/intel/boards/sof_sdw.c +5 -0
@@ -860,6 +860,11 @@ static int create_sdw_dailink(struct device *dev, int *be_index, cpus + *cpu_id, cpu_dai_num, codecs, codec_num, NULL, &sdw_ops); +/* +* SoundWire DAILINKs use 'stream' functions and Bank Switch operations +* based on wait_for_completion(), tag them as 'nonatomic'. +*/ + dai_links[*be_index].nonatomic = true; ret =set_codec_init_func (link, dai_links + (*be_index)++, playback, group_id);
sound/soc/sof/core.c +1 -3
@@ -371,7 +371,6 @@ int snd_sof_device_remove(struct device *dev)dev_warn (dev,"error: %d failed to prepare DSP for device removal" , ret); -snd_sof_fw_unload (sdev);snd_sof_ipc_free (sdev);snd_sof_free_debug (sdev);snd_sof_free_trace (sdev);
@@ -394,8 +393,7 @@ int snd_sof_device_remove(struct device *dev)snd_sof_remove (sdev);/* release firmware */ -release_firmware (pdata->fw); - pdata->fw =NULL ; +snd_sof_fw_unload (sdev);return 0 ; }
sound/soc/sof/loader.c +2 -0
@@ -880,5 +880,7 @@ EXPORT_SYMBOL(snd_sof_run_firmware);void snd_sof_fw_unload (struct snd_sof_dev *sdev) {/* TODO: support module unloading at runtime */ +release_firmware (sdev->pdata->fw); + sdev->pdata->fw =NULL ; }EXPORT_SYMBOL (snd_sof_fw_unload);
sound/usb/card.c +4 -14
@@ -1020,7 +1020,7 @@ static int usb_audio_suspend(struct usb_interface *intf, pm_message_t message)return 0 ; } -static int __usb_audio_resume (struct usb_interface *intf,bool reset_resume) +static int usb_audio_resume (struct usb_interface *intf) {struct snd_usb_audio *chip =usb_get_intfdata (intf);struct snd_usb_stream *as;
@@ -1046,7 +1046,7 @@ static int __usb_audio_resume(struct usb_interface *intf, bool reset_resume)* we just notify and restart the mixers */ list_for_each_entry (mixer, &chip->mixer_list, list) { - err =snd_usb_mixer_resume (mixer, reset_resume); + err =snd_usb_mixer_resume (mixer);if (err <0 ) goto err_out; }
@@ -1066,20 +1066,10 @@ static int __usb_audio_resume(struct usb_interface *intf, bool reset_resume)atomic_dec (&chip->active);/* allow autopm after this point */ return err; } - -static int usb_audio_resume (struct usb_interface *intf) -{ -return __usb_audio_resume (intf, false); -} - -static int usb_audio_reset_resume (struct usb_interface *intf) -{ -return __usb_audio_resume (intf, true); -}#else #define usb_audio_suspend NULL#define usb_audio_resume NULL -#define usb_audio_reset_resume NULL +#define usb_audio_resume NULL#endif /* CONFIG_PM */ static const struct usb_device_id usb_audio_ids [] = {
@@ -1101,7 +1091,7 @@ static struct usb_driver usb_audio_driver = { .disconnect = usb_audio_disconnect, .suspend = usb_audio_suspend, .resume = usb_audio_resume, - .reset_resume = usb_audio_reset_resume, + .reset_resume = usb_audio_resume, .id_table = usb_audio_ids, .supports_autosuspend = 1, };
sound/usb/mixer.c +4 -22
@@ -3655,33 +3655,16 @@ static int restore_mixer_value(struct usb_mixer_elem_list *list)return 0 ; } -static int default_mixer_reset_resume (struct usb_mixer_elem_list *list) -{ -int err; - -if (list->resume) { - err = list->resume (list); -if (err <0 ) -return err; - } -return restore_mixer_value (list); -} - -int snd_usb_mixer_resume (struct usb_mixer_interface *mixer,bool reset_resume) +int snd_usb_mixer_resume (struct usb_mixer_interface *mixer) {struct usb_mixer_elem_list *list; -usb_mixer_elem_resume_func_t f;int id, err;/* restore cached mixer values */ for (id =0 ; id <MAX_ID_ELEMS ; id++) {for_each_mixer_elem (list, mixer, id) { -if (reset_resume) - f = list->reset_resume; -else - f = list->resume; -if (f) { - err =f (list); +if (list->resume) { + err = list->resume (list);if (err <0 )return err; }
@@ -3702,7 +3685,6 @@ void snd_usb_mixer_elem_init_std(struct usb_mixer_elem_list *list, list->id = unitid; list->dump = snd_usb_mixer_dump_cval;#ifdef CONFIG_PM - list->resume =NULL ; - list->reset_resume = default_mixer_reset_resume; + list->resume = restore_mixer_value;#endif }
sound/usb/mixer.h +1 -2
@@ -70,7 +70,6 @@ struct usb_mixer_elem_list {bool is_std_info;usb_mixer_elem_dump_func_t dump;usb_mixer_elem_resume_func_t resume; -usb_mixer_elem_resume_func_t reset_resume; };/* iterate over mixer element list of the given unit id */
@@ -122,7 +121,7 @@ int snd_usb_mixer_vol_tlv(struct snd_kcontrol *kcontrol, int op_flag,#ifdef CONFIG_PM int snd_usb_mixer_suspend (struct usb_mixer_interface *mixer); -int snd_usb_mixer_resume (struct usb_mixer_interface *mixer,bool reset_resume); +int snd_usb_mixer_resume (struct usb_mixer_interface *mixer);#endif int snd_usb_set_cur_mix_value(struct usb_mixer_elem_info *cval, int channel,
sound/usb/mixer_quirks.c +1 -1
@@ -151,7 +151,7 @@ static int add_single_ctl_with_resume(struct usb_mixer_interface *mixer, *listp = list; list->mixer = mixer; list->id = id; - list->reset_resume = resume; + list->resume = resume; kctl =snd_ctl_new1 (knew, list);if (!kctl) {kfree (list);