Update odroidxu4-current to 6.6.113 (#8806)
This commit is contained in:
parent
a24fadabd4
commit
23ca542c87
3085
patch/kernel/archive/odroidxu4-6.6/patch-6.6.108-109.patch
Normal file
3085
patch/kernel/archive/odroidxu4-6.6/patch-6.6.108-109.patch
Normal file
File diff suppressed because it is too large
Load Diff
327
patch/kernel/archive/odroidxu4-6.6/patch-6.6.109-110.patch
Normal file
327
patch/kernel/archive/odroidxu4-6.6/patch-6.6.109-110.patch
Normal file
@ -0,0 +1,327 @@
|
||||
diff --git a/Makefile b/Makefile
|
||||
index afeacf5efc9553..196343089737f3 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 6
|
||||
PATCHLEVEL = 6
|
||||
-SUBLEVEL = 109
|
||||
+SUBLEVEL = 110
|
||||
EXTRAVERSION =
|
||||
NAME = Pinguïn Aangedreven
|
||||
|
||||
diff --git a/drivers/media/pci/b2c2/flexcop-pci.c b/drivers/media/pci/b2c2/flexcop-pci.c
|
||||
index 486c8ec0fa60d9..ab53c5b02c48df 100644
|
||||
--- a/drivers/media/pci/b2c2/flexcop-pci.c
|
||||
+++ b/drivers/media/pci/b2c2/flexcop-pci.c
|
||||
@@ -411,7 +411,7 @@ static void flexcop_pci_remove(struct pci_dev *pdev)
|
||||
struct flexcop_pci *fc_pci = pci_get_drvdata(pdev);
|
||||
|
||||
if (irq_chk_intv > 0)
|
||||
- cancel_delayed_work(&fc_pci->irq_check_work);
|
||||
+ cancel_delayed_work_sync(&fc_pci->irq_check_work);
|
||||
|
||||
flexcop_pci_dma_exit(fc_pci);
|
||||
flexcop_device_exit(fc_pci->fc_dev);
|
||||
diff --git a/drivers/media/rc/imon.c b/drivers/media/rc/imon.c
|
||||
index e5590a708f1c5d..f4deca8894e0f7 100644
|
||||
--- a/drivers/media/rc/imon.c
|
||||
+++ b/drivers/media/rc/imon.c
|
||||
@@ -536,7 +536,9 @@ static int display_open(struct inode *inode, struct file *file)
|
||||
|
||||
mutex_lock(&ictx->lock);
|
||||
|
||||
- if (!ictx->display_supported) {
|
||||
+ if (ictx->disconnected) {
|
||||
+ retval = -ENODEV;
|
||||
+ } else if (!ictx->display_supported) {
|
||||
pr_err("display not supported by device\n");
|
||||
retval = -ENODEV;
|
||||
} else if (ictx->display_isopen) {
|
||||
@@ -598,6 +600,9 @@ static int send_packet(struct imon_context *ictx)
|
||||
int retval = 0;
|
||||
struct usb_ctrlrequest *control_req = NULL;
|
||||
|
||||
+ if (ictx->disconnected)
|
||||
+ return -ENODEV;
|
||||
+
|
||||
/* Check if we need to use control or interrupt urb */
|
||||
if (!ictx->tx_control) {
|
||||
pipe = usb_sndintpipe(ictx->usbdev_intf0,
|
||||
@@ -949,12 +954,14 @@ static ssize_t vfd_write(struct file *file, const char __user *buf,
|
||||
static const unsigned char vfd_packet6[] = {
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF };
|
||||
|
||||
- if (ictx->disconnected)
|
||||
- return -ENODEV;
|
||||
-
|
||||
if (mutex_lock_interruptible(&ictx->lock))
|
||||
return -ERESTARTSYS;
|
||||
|
||||
+ if (ictx->disconnected) {
|
||||
+ retval = -ENODEV;
|
||||
+ goto exit;
|
||||
+ }
|
||||
+
|
||||
if (!ictx->dev_present_intf0) {
|
||||
pr_err_ratelimited("no iMON device present\n");
|
||||
retval = -ENODEV;
|
||||
@@ -1029,11 +1036,13 @@ static ssize_t lcd_write(struct file *file, const char __user *buf,
|
||||
int retval = 0;
|
||||
struct imon_context *ictx = file->private_data;
|
||||
|
||||
- if (ictx->disconnected)
|
||||
- return -ENODEV;
|
||||
-
|
||||
mutex_lock(&ictx->lock);
|
||||
|
||||
+ if (ictx->disconnected) {
|
||||
+ retval = -ENODEV;
|
||||
+ goto exit;
|
||||
+ }
|
||||
+
|
||||
if (!ictx->display_supported) {
|
||||
pr_err_ratelimited("no iMON display present\n");
|
||||
retval = -ENODEV;
|
||||
@@ -2499,7 +2508,11 @@ static void imon_disconnect(struct usb_interface *interface)
|
||||
int ifnum;
|
||||
|
||||
ictx = usb_get_intfdata(interface);
|
||||
+
|
||||
+ mutex_lock(&ictx->lock);
|
||||
ictx->disconnected = true;
|
||||
+ mutex_unlock(&ictx->lock);
|
||||
+
|
||||
dev = ictx->dev;
|
||||
ifnum = interface->cur_altsetting->desc.bInterfaceNumber;
|
||||
|
||||
diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
|
||||
index 09753993068a95..c7cee6b185264d 100644
|
||||
--- a/drivers/media/usb/uvc/uvc_driver.c
|
||||
+++ b/drivers/media/usb/uvc/uvc_driver.c
|
||||
@@ -135,6 +135,9 @@ struct uvc_entity *uvc_entity_by_id(struct uvc_device *dev, int id)
|
||||
{
|
||||
struct uvc_entity *entity;
|
||||
|
||||
+ if (id == UVC_INVALID_ENTITY_ID)
|
||||
+ return NULL;
|
||||
+
|
||||
list_for_each_entry(entity, &dev->entities, list) {
|
||||
if (entity->id == id)
|
||||
return entity;
|
||||
@@ -778,14 +781,27 @@ static const u8 uvc_media_transport_input_guid[16] =
|
||||
UVC_GUID_UVC_MEDIA_TRANSPORT_INPUT;
|
||||
static const u8 uvc_processing_guid[16] = UVC_GUID_UVC_PROCESSING;
|
||||
|
||||
-static struct uvc_entity *uvc_alloc_entity(u16 type, u16 id,
|
||||
- unsigned int num_pads, unsigned int extra_size)
|
||||
+static struct uvc_entity *uvc_alloc_new_entity(struct uvc_device *dev, u16 type,
|
||||
+ u16 id, unsigned int num_pads,
|
||||
+ unsigned int extra_size)
|
||||
{
|
||||
struct uvc_entity *entity;
|
||||
unsigned int num_inputs;
|
||||
unsigned int size;
|
||||
unsigned int i;
|
||||
|
||||
+ /* Per UVC 1.1+ spec 3.7.2, the ID should be non-zero. */
|
||||
+ if (id == 0) {
|
||||
+ dev_err(&dev->intf->dev, "Found Unit with invalid ID 0\n");
|
||||
+ id = UVC_INVALID_ENTITY_ID;
|
||||
+ }
|
||||
+
|
||||
+ /* Per UVC 1.1+ spec 3.7.2, the ID is unique. */
|
||||
+ if (uvc_entity_by_id(dev, id)) {
|
||||
+ dev_err(&dev->intf->dev, "Found multiple Units with ID %u\n", id);
|
||||
+ id = UVC_INVALID_ENTITY_ID;
|
||||
+ }
|
||||
+
|
||||
extra_size = roundup(extra_size, sizeof(*entity->pads));
|
||||
if (num_pads)
|
||||
num_inputs = type & UVC_TERM_OUTPUT ? num_pads : num_pads - 1;
|
||||
@@ -795,7 +811,7 @@ static struct uvc_entity *uvc_alloc_entity(u16 type, u16 id,
|
||||
+ num_inputs;
|
||||
entity = kzalloc(size, GFP_KERNEL);
|
||||
if (entity == NULL)
|
||||
- return NULL;
|
||||
+ return ERR_PTR(-ENOMEM);
|
||||
|
||||
entity->id = id;
|
||||
entity->type = type;
|
||||
@@ -907,10 +923,10 @@ static int uvc_parse_vendor_control(struct uvc_device *dev,
|
||||
break;
|
||||
}
|
||||
|
||||
- unit = uvc_alloc_entity(UVC_VC_EXTENSION_UNIT, buffer[3],
|
||||
- p + 1, 2*n);
|
||||
- if (unit == NULL)
|
||||
- return -ENOMEM;
|
||||
+ unit = uvc_alloc_new_entity(dev, UVC_VC_EXTENSION_UNIT,
|
||||
+ buffer[3], p + 1, 2 * n);
|
||||
+ if (IS_ERR(unit))
|
||||
+ return PTR_ERR(unit);
|
||||
|
||||
memcpy(unit->guid, &buffer[4], 16);
|
||||
unit->extension.bNumControls = buffer[20];
|
||||
@@ -1019,10 +1035,10 @@ static int uvc_parse_standard_control(struct uvc_device *dev,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
- term = uvc_alloc_entity(type | UVC_TERM_INPUT, buffer[3],
|
||||
- 1, n + p);
|
||||
- if (term == NULL)
|
||||
- return -ENOMEM;
|
||||
+ term = uvc_alloc_new_entity(dev, type | UVC_TERM_INPUT,
|
||||
+ buffer[3], 1, n + p);
|
||||
+ if (IS_ERR(term))
|
||||
+ return PTR_ERR(term);
|
||||
|
||||
if (UVC_ENTITY_TYPE(term) == UVC_ITT_CAMERA) {
|
||||
term->camera.bControlSize = n;
|
||||
@@ -1078,10 +1094,10 @@ static int uvc_parse_standard_control(struct uvc_device *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
- term = uvc_alloc_entity(type | UVC_TERM_OUTPUT, buffer[3],
|
||||
- 1, 0);
|
||||
- if (term == NULL)
|
||||
- return -ENOMEM;
|
||||
+ term = uvc_alloc_new_entity(dev, type | UVC_TERM_OUTPUT,
|
||||
+ buffer[3], 1, 0);
|
||||
+ if (IS_ERR(term))
|
||||
+ return PTR_ERR(term);
|
||||
|
||||
memcpy(term->baSourceID, &buffer[7], 1);
|
||||
|
||||
@@ -1100,9 +1116,10 @@ static int uvc_parse_standard_control(struct uvc_device *dev,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
- unit = uvc_alloc_entity(buffer[2], buffer[3], p + 1, 0);
|
||||
- if (unit == NULL)
|
||||
- return -ENOMEM;
|
||||
+ unit = uvc_alloc_new_entity(dev, buffer[2], buffer[3],
|
||||
+ p + 1, 0);
|
||||
+ if (IS_ERR(unit))
|
||||
+ return PTR_ERR(unit);
|
||||
|
||||
memcpy(unit->baSourceID, &buffer[5], p);
|
||||
|
||||
@@ -1122,9 +1139,9 @@ static int uvc_parse_standard_control(struct uvc_device *dev,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
- unit = uvc_alloc_entity(buffer[2], buffer[3], 2, n);
|
||||
- if (unit == NULL)
|
||||
- return -ENOMEM;
|
||||
+ unit = uvc_alloc_new_entity(dev, buffer[2], buffer[3], 2, n);
|
||||
+ if (IS_ERR(unit))
|
||||
+ return PTR_ERR(unit);
|
||||
|
||||
memcpy(unit->baSourceID, &buffer[4], 1);
|
||||
unit->processing.wMaxMultiplier =
|
||||
@@ -1151,9 +1168,10 @@ static int uvc_parse_standard_control(struct uvc_device *dev,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
- unit = uvc_alloc_entity(buffer[2], buffer[3], p + 1, n);
|
||||
- if (unit == NULL)
|
||||
- return -ENOMEM;
|
||||
+ unit = uvc_alloc_new_entity(dev, buffer[2], buffer[3],
|
||||
+ p + 1, n);
|
||||
+ if (IS_ERR(unit))
|
||||
+ return PTR_ERR(unit);
|
||||
|
||||
memcpy(unit->guid, &buffer[4], 16);
|
||||
unit->extension.bNumControls = buffer[20];
|
||||
@@ -1293,9 +1311,10 @@ static int uvc_gpio_parse(struct uvc_device *dev)
|
||||
return dev_err_probe(&dev->intf->dev, irq,
|
||||
"No IRQ for privacy GPIO\n");
|
||||
|
||||
- unit = uvc_alloc_entity(UVC_EXT_GPIO_UNIT, UVC_EXT_GPIO_UNIT_ID, 0, 1);
|
||||
- if (!unit)
|
||||
- return -ENOMEM;
|
||||
+ unit = uvc_alloc_new_entity(dev, UVC_EXT_GPIO_UNIT,
|
||||
+ UVC_EXT_GPIO_UNIT_ID, 0, 1);
|
||||
+ if (IS_ERR(unit))
|
||||
+ return PTR_ERR(unit);
|
||||
|
||||
unit->gpio.gpio_privacy = gpio_privacy;
|
||||
unit->gpio.irq = irq;
|
||||
diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
|
||||
index e99bfaa622669b..cbb5ce963cd097 100644
|
||||
--- a/drivers/media/usb/uvc/uvcvideo.h
|
||||
+++ b/drivers/media/usb/uvc/uvcvideo.h
|
||||
@@ -41,6 +41,8 @@
|
||||
#define UVC_EXT_GPIO_UNIT 0x7ffe
|
||||
#define UVC_EXT_GPIO_UNIT_ID 0x100
|
||||
|
||||
+#define UVC_INVALID_ENTITY_ID 0xffff
|
||||
+
|
||||
/* ------------------------------------------------------------------------
|
||||
* Driver specific constants.
|
||||
*/
|
||||
diff --git a/drivers/target/target_core_configfs.c b/drivers/target/target_core_configfs.c
|
||||
index 9a88774836c9db..eddcfd09c05b86 100644
|
||||
--- a/drivers/target/target_core_configfs.c
|
||||
+++ b/drivers/target/target_core_configfs.c
|
||||
@@ -2738,7 +2738,7 @@ static ssize_t target_lu_gp_members_show(struct config_item *item, char *page)
|
||||
config_item_name(&dev->dev_group.cg_item));
|
||||
cur_len++; /* Extra byte for NULL terminator */
|
||||
|
||||
- if ((cur_len + len) > PAGE_SIZE) {
|
||||
+ if ((cur_len + len) > PAGE_SIZE || cur_len > LU_GROUP_NAME_BUF) {
|
||||
pr_warn("Ran out of lu_gp_show_attr"
|
||||
"_members buffer\n");
|
||||
break;
|
||||
diff --git a/include/crypto/sha256_base.h b/include/crypto/sha256_base.h
|
||||
index ab904d82236fb8..0f5f3a6f79f0cf 100644
|
||||
--- a/include/crypto/sha256_base.h
|
||||
+++ b/include/crypto/sha256_base.h
|
||||
@@ -44,7 +44,7 @@ static inline int lib_sha256_base_do_update(struct sha256_state *sctx,
|
||||
sctx->count += len;
|
||||
|
||||
if (unlikely((partial + len) >= SHA256_BLOCK_SIZE)) {
|
||||
- int blocks;
|
||||
+ unsigned int blocks;
|
||||
|
||||
if (partial) {
|
||||
int p = SHA256_BLOCK_SIZE - partial;
|
||||
diff --git a/scripts/gcc-plugins/gcc-common.h b/scripts/gcc-plugins/gcc-common.h
|
||||
index 90e83d62adb547..de1e4c927cbc76 100644
|
||||
--- a/scripts/gcc-plugins/gcc-common.h
|
||||
+++ b/scripts/gcc-plugins/gcc-common.h
|
||||
@@ -196,10 +196,17 @@ inline bool is_a_helper<const gassign *>::test(const_gimple gs)
|
||||
}
|
||||
#endif
|
||||
|
||||
+#if BUILDING_GCC_VERSION < 16000
|
||||
#define TODO_verify_ssa TODO_verify_il
|
||||
#define TODO_verify_flow TODO_verify_il
|
||||
#define TODO_verify_stmts TODO_verify_il
|
||||
#define TODO_verify_rtl_sharing TODO_verify_il
|
||||
+#else
|
||||
+#define TODO_verify_ssa 0
|
||||
+#define TODO_verify_flow 0
|
||||
+#define TODO_verify_stmts 0
|
||||
+#define TODO_verify_rtl_sharing 0
|
||||
+#endif
|
||||
|
||||
#define INSN_DELETED_P(insn) (insn)->deleted()
|
||||
|
||||
diff --git a/sound/soc/qcom/qdsp6/topology.c b/sound/soc/qcom/qdsp6/topology.c
|
||||
index 70572c83e1017d..d4c3bc85fb3562 100644
|
||||
--- a/sound/soc/qcom/qdsp6/topology.c
|
||||
+++ b/sound/soc/qcom/qdsp6/topology.c
|
||||
@@ -586,8 +586,8 @@ static int audioreach_widget_load_module_common(struct snd_soc_component *compon
|
||||
return PTR_ERR(cont);
|
||||
|
||||
mod = audioreach_parse_common_tokens(apm, cont, &tplg_w->priv, w);
|
||||
- if (IS_ERR(mod))
|
||||
- return PTR_ERR(mod);
|
||||
+ if (IS_ERR_OR_NULL(mod))
|
||||
+ return mod ? PTR_ERR(mod) : -ENODEV;
|
||||
|
||||
dobj = &w->dobj;
|
||||
dobj->private = mod;
|
||||
860
patch/kernel/archive/odroidxu4-6.6/patch-6.6.110-111.patch
Normal file
860
patch/kernel/archive/odroidxu4-6.6/patch-6.6.110-111.patch
Normal file
@ -0,0 +1,860 @@
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 196343089737f3..9531c465e9c240 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 6
|
||||
PATCHLEVEL = 6
|
||||
-SUBLEVEL = 110
|
||||
+SUBLEVEL = 111
|
||||
EXTRAVERSION =
|
||||
NAME = Pinguïn Aangedreven
|
||||
|
||||
diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c
|
||||
index d0d836448a76b2..83827384982e49 100644
|
||||
--- a/arch/arm64/kernel/fpsimd.c
|
||||
+++ b/arch/arm64/kernel/fpsimd.c
|
||||
@@ -1873,13 +1873,17 @@ static void fpsimd_flush_cpu_state(void)
|
||||
*/
|
||||
void fpsimd_save_and_flush_cpu_state(void)
|
||||
{
|
||||
+ unsigned long flags;
|
||||
+
|
||||
if (!system_supports_fpsimd())
|
||||
return;
|
||||
WARN_ON(preemptible());
|
||||
- get_cpu_fpsimd_context();
|
||||
+ local_irq_save(flags);
|
||||
+ __get_cpu_fpsimd_context();
|
||||
fpsimd_save();
|
||||
fpsimd_flush_cpu_state();
|
||||
- put_cpu_fpsimd_context();
|
||||
+ __put_cpu_fpsimd_context();
|
||||
+ local_irq_restore(flags);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_KERNEL_MODE_NEON
|
||||
diff --git a/arch/riscv/include/asm/processor.h b/arch/riscv/include/asm/processor.h
|
||||
index 4f6af8c6cfa060..4747277983ad1a 100644
|
||||
--- a/arch/riscv/include/asm/processor.h
|
||||
+++ b/arch/riscv/include/asm/processor.h
|
||||
@@ -13,42 +13,19 @@
|
||||
|
||||
#include <asm/ptrace.h>
|
||||
|
||||
-#ifdef CONFIG_64BIT
|
||||
-#define DEFAULT_MAP_WINDOW (UL(1) << (MMAP_VA_BITS - 1))
|
||||
-#define STACK_TOP_MAX TASK_SIZE
|
||||
-
|
||||
#define arch_get_mmap_end(addr, len, flags) \
|
||||
({ \
|
||||
- unsigned long mmap_end; \
|
||||
- typeof(addr) _addr = (addr); \
|
||||
- if ((_addr) == 0 || (IS_ENABLED(CONFIG_COMPAT) && is_compat_task())) \
|
||||
- mmap_end = STACK_TOP_MAX; \
|
||||
- else if ((_addr) >= VA_USER_SV57) \
|
||||
- mmap_end = STACK_TOP_MAX; \
|
||||
- else if ((((_addr) >= VA_USER_SV48)) && (VA_BITS >= VA_BITS_SV48)) \
|
||||
- mmap_end = VA_USER_SV48; \
|
||||
- else \
|
||||
- mmap_end = VA_USER_SV39; \
|
||||
- mmap_end; \
|
||||
+ STACK_TOP_MAX; \
|
||||
})
|
||||
|
||||
#define arch_get_mmap_base(addr, base) \
|
||||
({ \
|
||||
- unsigned long mmap_base; \
|
||||
- typeof(addr) _addr = (addr); \
|
||||
- typeof(base) _base = (base); \
|
||||
- unsigned long rnd_gap = DEFAULT_MAP_WINDOW - (_base); \
|
||||
- if ((_addr) == 0 || (IS_ENABLED(CONFIG_COMPAT) && is_compat_task())) \
|
||||
- mmap_base = (_base); \
|
||||
- else if (((_addr) >= VA_USER_SV57) && (VA_BITS >= VA_BITS_SV57)) \
|
||||
- mmap_base = VA_USER_SV57 - rnd_gap; \
|
||||
- else if ((((_addr) >= VA_USER_SV48)) && (VA_BITS >= VA_BITS_SV48)) \
|
||||
- mmap_base = VA_USER_SV48 - rnd_gap; \
|
||||
- else \
|
||||
- mmap_base = VA_USER_SV39 - rnd_gap; \
|
||||
- mmap_base; \
|
||||
+ base; \
|
||||
})
|
||||
|
||||
+#ifdef CONFIG_64BIT
|
||||
+#define DEFAULT_MAP_WINDOW (UL(1) << (MMAP_VA_BITS - 1))
|
||||
+#define STACK_TOP_MAX TASK_SIZE
|
||||
#else
|
||||
#define DEFAULT_MAP_WINDOW TASK_SIZE
|
||||
#define STACK_TOP_MAX TASK_SIZE
|
||||
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
||||
index 2673cd5c46cb48..313cb2ffd6aae6 100644
|
||||
--- a/arch/x86/kvm/emulate.c
|
||||
+++ b/arch/x86/kvm/emulate.c
|
||||
@@ -5134,12 +5134,11 @@ void init_decode_cache(struct x86_emulate_ctxt *ctxt)
|
||||
ctxt->mem_read.end = 0;
|
||||
}
|
||||
|
||||
-int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
|
||||
+int x86_emulate_insn(struct x86_emulate_ctxt *ctxt, bool check_intercepts)
|
||||
{
|
||||
const struct x86_emulate_ops *ops = ctxt->ops;
|
||||
int rc = X86EMUL_CONTINUE;
|
||||
int saved_dst_type = ctxt->dst.type;
|
||||
- bool is_guest_mode = ctxt->ops->is_guest_mode(ctxt);
|
||||
|
||||
ctxt->mem_read.pos = 0;
|
||||
|
||||
@@ -5187,7 +5186,7 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
|
||||
fetch_possible_mmx_operand(&ctxt->dst);
|
||||
}
|
||||
|
||||
- if (unlikely(is_guest_mode) && ctxt->intercept) {
|
||||
+ if (unlikely(check_intercepts) && ctxt->intercept) {
|
||||
rc = emulator_check_intercept(ctxt, ctxt->intercept,
|
||||
X86_ICPT_PRE_EXCEPT);
|
||||
if (rc != X86EMUL_CONTINUE)
|
||||
@@ -5216,7 +5215,7 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
|
||||
goto done;
|
||||
}
|
||||
|
||||
- if (unlikely(is_guest_mode) && (ctxt->d & Intercept)) {
|
||||
+ if (unlikely(check_intercepts) && (ctxt->d & Intercept)) {
|
||||
rc = emulator_check_intercept(ctxt, ctxt->intercept,
|
||||
X86_ICPT_POST_EXCEPT);
|
||||
if (rc != X86EMUL_CONTINUE)
|
||||
@@ -5270,7 +5269,7 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
|
||||
|
||||
special_insn:
|
||||
|
||||
- if (unlikely(is_guest_mode) && (ctxt->d & Intercept)) {
|
||||
+ if (unlikely(check_intercepts) && (ctxt->d & Intercept)) {
|
||||
rc = emulator_check_intercept(ctxt, ctxt->intercept,
|
||||
X86_ICPT_POST_MEMACCESS);
|
||||
if (rc != X86EMUL_CONTINUE)
|
||||
diff --git a/arch/x86/kvm/kvm_emulate.h b/arch/x86/kvm/kvm_emulate.h
|
||||
index be7aeb9b8ea3b1..b940ee604bd849 100644
|
||||
--- a/arch/x86/kvm/kvm_emulate.h
|
||||
+++ b/arch/x86/kvm/kvm_emulate.h
|
||||
@@ -220,7 +220,6 @@ struct x86_emulate_ops {
|
||||
void (*set_nmi_mask)(struct x86_emulate_ctxt *ctxt, bool masked);
|
||||
|
||||
bool (*is_smm)(struct x86_emulate_ctxt *ctxt);
|
||||
- bool (*is_guest_mode)(struct x86_emulate_ctxt *ctxt);
|
||||
int (*leave_smm)(struct x86_emulate_ctxt *ctxt);
|
||||
void (*triple_fault)(struct x86_emulate_ctxt *ctxt);
|
||||
int (*set_xcr)(struct x86_emulate_ctxt *ctxt, u32 index, u64 xcr);
|
||||
@@ -498,7 +497,7 @@ bool x86_page_table_writing_insn(struct x86_emulate_ctxt *ctxt);
|
||||
#define EMULATION_RESTART 1
|
||||
#define EMULATION_INTERCEPTED 2
|
||||
void init_decode_cache(struct x86_emulate_ctxt *ctxt);
|
||||
-int x86_emulate_insn(struct x86_emulate_ctxt *ctxt);
|
||||
+int x86_emulate_insn(struct x86_emulate_ctxt *ctxt, bool check_intercepts);
|
||||
int emulator_task_switch(struct x86_emulate_ctxt *ctxt,
|
||||
u16 tss_selector, int idt_index, int reason,
|
||||
bool has_error_code, u32 error_code);
|
||||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
||||
index 7238686a49bb5a..71d60d4e991fd3 100644
|
||||
--- a/arch/x86/kvm/x86.c
|
||||
+++ b/arch/x86/kvm/x86.c
|
||||
@@ -8308,11 +8308,6 @@ static bool emulator_is_smm(struct x86_emulate_ctxt *ctxt)
|
||||
return is_smm(emul_to_vcpu(ctxt));
|
||||
}
|
||||
|
||||
-static bool emulator_is_guest_mode(struct x86_emulate_ctxt *ctxt)
|
||||
-{
|
||||
- return is_guest_mode(emul_to_vcpu(ctxt));
|
||||
-}
|
||||
-
|
||||
#ifndef CONFIG_KVM_SMM
|
||||
static int emulator_leave_smm(struct x86_emulate_ctxt *ctxt)
|
||||
{
|
||||
@@ -8379,7 +8374,6 @@ static const struct x86_emulate_ops emulate_ops = {
|
||||
.guest_has_rdpid = emulator_guest_has_rdpid,
|
||||
.set_nmi_mask = emulator_set_nmi_mask,
|
||||
.is_smm = emulator_is_smm,
|
||||
- .is_guest_mode = emulator_is_guest_mode,
|
||||
.leave_smm = emulator_leave_smm,
|
||||
.triple_fault = emulator_triple_fault,
|
||||
.set_xcr = emulator_set_xcr,
|
||||
@@ -8999,7 +8993,14 @@ int x86_emulate_instruction(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa,
|
||||
ctxt->exception.address = 0;
|
||||
}
|
||||
|
||||
- r = x86_emulate_insn(ctxt);
|
||||
+ /*
|
||||
+ * Check L1's instruction intercepts when emulating instructions for
|
||||
+ * L2, unless KVM is re-emulating a previously decoded instruction,
|
||||
+ * e.g. to complete userspace I/O, in which case KVM has already
|
||||
+ * checked the intercepts.
|
||||
+ */
|
||||
+ r = x86_emulate_insn(ctxt, is_guest_mode(vcpu) &&
|
||||
+ !(emulation_type & EMULTYPE_NO_DECODE));
|
||||
|
||||
if (r == EMULATION_INTERCEPTED)
|
||||
return 1;
|
||||
diff --git a/crypto/rng.c b/crypto/rng.c
|
||||
index 279dffdebf5981..e462031fef68c6 100644
|
||||
--- a/crypto/rng.c
|
||||
+++ b/crypto/rng.c
|
||||
@@ -197,6 +197,11 @@ int crypto_del_default_rng(void)
|
||||
EXPORT_SYMBOL_GPL(crypto_del_default_rng);
|
||||
#endif
|
||||
|
||||
+static void rng_default_set_ent(struct crypto_rng *tfm, const u8 *data,
|
||||
+ unsigned int len)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
int crypto_register_rng(struct rng_alg *alg)
|
||||
{
|
||||
struct crypto_istat_rng *istat = rng_get_stat(alg);
|
||||
@@ -212,6 +217,9 @@ int crypto_register_rng(struct rng_alg *alg)
|
||||
if (IS_ENABLED(CONFIG_CRYPTO_STATS))
|
||||
memset(istat, 0, sizeof(*istat));
|
||||
|
||||
+ if (!alg->set_ent)
|
||||
+ alg->set_ent = rng_default_set_ent;
|
||||
+
|
||||
return crypto_register_alg(base);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(crypto_register_rng);
|
||||
diff --git a/drivers/hid/hid-mcp2221.c b/drivers/hid/hid-mcp2221.c
|
||||
index a985301a4135f5..d2d413c829f44a 100644
|
||||
--- a/drivers/hid/hid-mcp2221.c
|
||||
+++ b/drivers/hid/hid-mcp2221.c
|
||||
@@ -814,6 +814,10 @@ static int mcp2221_raw_event(struct hid_device *hdev,
|
||||
}
|
||||
if (data[2] == MCP2221_I2C_READ_COMPL ||
|
||||
data[2] == MCP2221_I2C_READ_PARTIAL) {
|
||||
+ if (!mcp->rxbuf || mcp->rxbuf_idx < 0 || data[3] > 60) {
|
||||
+ mcp->status = -EINVAL;
|
||||
+ break;
|
||||
+ }
|
||||
buf = mcp->rxbuf;
|
||||
memcpy(&buf[mcp->rxbuf_idx], &data[4], data[3]);
|
||||
mcp->rxbuf_idx = mcp->rxbuf_idx + data[3];
|
||||
diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c
|
||||
index 0bd76f8d4dc6b8..6442d41622eff9 100644
|
||||
--- a/drivers/md/dm-integrity.c
|
||||
+++ b/drivers/md/dm-integrity.c
|
||||
@@ -129,7 +129,7 @@ struct journal_sector {
|
||||
commit_id_t commit_id;
|
||||
};
|
||||
|
||||
-#define MAX_TAG_SIZE (JOURNAL_SECTOR_DATA - JOURNAL_MAC_PER_SECTOR - offsetof(struct journal_entry, last_bytes[MAX_SECTORS_PER_BLOCK]))
|
||||
+#define MAX_TAG_SIZE 255
|
||||
|
||||
#define METADATA_PADDING_SECTORS 8
|
||||
|
||||
diff --git a/drivers/media/i2c/tc358743.c b/drivers/media/i2c/tc358743.c
|
||||
index 8a1a33862ba712..4b6ad85cf261de 100644
|
||||
--- a/drivers/media/i2c/tc358743.c
|
||||
+++ b/drivers/media/i2c/tc358743.c
|
||||
@@ -2180,10 +2180,10 @@ static int tc358743_probe(struct i2c_client *client)
|
||||
err_work_queues:
|
||||
cec_unregister_adapter(state->cec_adap);
|
||||
if (!state->i2c_client->irq) {
|
||||
- del_timer(&state->timer);
|
||||
+ timer_delete_sync(&state->timer);
|
||||
flush_work(&state->work_i2c_poll);
|
||||
}
|
||||
- cancel_delayed_work(&state->delayed_work_enable_hotplug);
|
||||
+ cancel_delayed_work_sync(&state->delayed_work_enable_hotplug);
|
||||
mutex_destroy(&state->confctl_mutex);
|
||||
err_hdl:
|
||||
media_entity_cleanup(&sd->entity);
|
||||
diff --git a/drivers/media/tuners/xc5000.c b/drivers/media/tuners/xc5000.c
|
||||
index 2182e5b7b6064c..ec9a3cd4784e1f 100644
|
||||
--- a/drivers/media/tuners/xc5000.c
|
||||
+++ b/drivers/media/tuners/xc5000.c
|
||||
@@ -58,7 +58,7 @@ struct xc5000_priv {
|
||||
struct dvb_frontend *fe;
|
||||
struct delayed_work timer_sleep;
|
||||
|
||||
- const struct firmware *firmware;
|
||||
+ bool inited;
|
||||
};
|
||||
|
||||
/* Misc Defines */
|
||||
@@ -1110,23 +1110,19 @@ static int xc_load_fw_and_init_tuner(struct dvb_frontend *fe, int force)
|
||||
if (!force && xc5000_is_firmware_loaded(fe) == 0)
|
||||
return 0;
|
||||
|
||||
- if (!priv->firmware) {
|
||||
- ret = request_firmware(&fw, desired_fw->name,
|
||||
- priv->i2c_props.adap->dev.parent);
|
||||
- if (ret) {
|
||||
- pr_err("xc5000: Upload failed. rc %d\n", ret);
|
||||
- return ret;
|
||||
- }
|
||||
- dprintk(1, "firmware read %zu bytes.\n", fw->size);
|
||||
+ ret = request_firmware(&fw, desired_fw->name,
|
||||
+ priv->i2c_props.adap->dev.parent);
|
||||
+ if (ret) {
|
||||
+ pr_err("xc5000: Upload failed. rc %d\n", ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+ dprintk(1, "firmware read %zu bytes.\n", fw->size);
|
||||
|
||||
- if (fw->size != desired_fw->size) {
|
||||
- pr_err("xc5000: Firmware file with incorrect size\n");
|
||||
- release_firmware(fw);
|
||||
- return -EINVAL;
|
||||
- }
|
||||
- priv->firmware = fw;
|
||||
- } else
|
||||
- fw = priv->firmware;
|
||||
+ if (fw->size != desired_fw->size) {
|
||||
+ pr_err("xc5000: Firmware file with incorrect size\n");
|
||||
+ release_firmware(fw);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
|
||||
/* Try up to 5 times to load firmware */
|
||||
for (i = 0; i < 5; i++) {
|
||||
@@ -1204,6 +1200,7 @@ static int xc_load_fw_and_init_tuner(struct dvb_frontend *fe, int force)
|
||||
}
|
||||
|
||||
err:
|
||||
+ release_firmware(fw);
|
||||
if (!ret)
|
||||
printk(KERN_INFO "xc5000: Firmware %s loaded and running.\n",
|
||||
desired_fw->name);
|
||||
@@ -1274,7 +1271,7 @@ static int xc5000_resume(struct dvb_frontend *fe)
|
||||
|
||||
/* suspended before firmware is loaded.
|
||||
Avoid firmware load in resume path. */
|
||||
- if (!priv->firmware)
|
||||
+ if (!priv->inited)
|
||||
return 0;
|
||||
|
||||
return xc5000_set_params(fe);
|
||||
@@ -1293,6 +1290,8 @@ static int xc5000_init(struct dvb_frontend *fe)
|
||||
if (debug)
|
||||
xc_debug_dump(priv);
|
||||
|
||||
+ priv->inited = true;
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1305,11 +1304,7 @@ static void xc5000_release(struct dvb_frontend *fe)
|
||||
mutex_lock(&xc5000_list_mutex);
|
||||
|
||||
if (priv) {
|
||||
- cancel_delayed_work(&priv->timer_sleep);
|
||||
- if (priv->firmware) {
|
||||
- release_firmware(priv->firmware);
|
||||
- priv->firmware = NULL;
|
||||
- }
|
||||
+ cancel_delayed_work_sync(&priv->timer_sleep);
|
||||
hybrid_tuner_release_state(priv);
|
||||
}
|
||||
|
||||
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
|
||||
index e501b55678d1dc..ae4ebcee607792 100644
|
||||
--- a/drivers/net/can/rcar/rcar_canfd.c
|
||||
+++ b/drivers/net/can/rcar/rcar_canfd.c
|
||||
@@ -738,9 +738,6 @@ static int rcar_canfd_reset_controller(struct rcar_canfd_global *gpriv)
|
||||
/* Reset Global error flags */
|
||||
rcar_canfd_write(gpriv->base, RCANFD_GERFL, 0x0);
|
||||
|
||||
- /* Set the controller into appropriate mode */
|
||||
- rcar_canfd_set_mode(gpriv);
|
||||
-
|
||||
/* Transition all Channels to reset mode */
|
||||
for_each_set_bit(ch, &gpriv->channels_mask, gpriv->info->max_channels) {
|
||||
rcar_canfd_clear_bit(gpriv->base,
|
||||
@@ -760,6 +757,10 @@ static int rcar_canfd_reset_controller(struct rcar_canfd_global *gpriv)
|
||||
return err;
|
||||
}
|
||||
}
|
||||
+
|
||||
+ /* Set the controller into appropriate mode */
|
||||
+ rcar_canfd_set_mode(gpriv);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/drivers/net/can/spi/hi311x.c b/drivers/net/can/spi/hi311x.c
|
||||
index 57ea7dfe8a596f..1acd4fc7adc8bf 100644
|
||||
--- a/drivers/net/can/spi/hi311x.c
|
||||
+++ b/drivers/net/can/spi/hi311x.c
|
||||
@@ -545,8 +545,6 @@ static int hi3110_stop(struct net_device *net)
|
||||
|
||||
priv->force_quit = 1;
|
||||
free_irq(spi->irq, priv);
|
||||
- destroy_workqueue(priv->wq);
|
||||
- priv->wq = NULL;
|
||||
|
||||
mutex_lock(&priv->hi3110_lock);
|
||||
|
||||
@@ -771,34 +769,23 @@ static int hi3110_open(struct net_device *net)
|
||||
goto out_close;
|
||||
}
|
||||
|
||||
- priv->wq = alloc_workqueue("hi3110_wq", WQ_FREEZABLE | WQ_MEM_RECLAIM,
|
||||
- 0);
|
||||
- if (!priv->wq) {
|
||||
- ret = -ENOMEM;
|
||||
- goto out_free_irq;
|
||||
- }
|
||||
- INIT_WORK(&priv->tx_work, hi3110_tx_work_handler);
|
||||
- INIT_WORK(&priv->restart_work, hi3110_restart_work_handler);
|
||||
-
|
||||
ret = hi3110_hw_reset(spi);
|
||||
if (ret)
|
||||
- goto out_free_wq;
|
||||
+ goto out_free_irq;
|
||||
|
||||
ret = hi3110_setup(net);
|
||||
if (ret)
|
||||
- goto out_free_wq;
|
||||
+ goto out_free_irq;
|
||||
|
||||
ret = hi3110_set_normal_mode(spi);
|
||||
if (ret)
|
||||
- goto out_free_wq;
|
||||
+ goto out_free_irq;
|
||||
|
||||
netif_wake_queue(net);
|
||||
mutex_unlock(&priv->hi3110_lock);
|
||||
|
||||
return 0;
|
||||
|
||||
- out_free_wq:
|
||||
- destroy_workqueue(priv->wq);
|
||||
out_free_irq:
|
||||
free_irq(spi->irq, priv);
|
||||
hi3110_hw_sleep(spi);
|
||||
@@ -915,6 +902,15 @@ static int hi3110_can_probe(struct spi_device *spi)
|
||||
if (ret)
|
||||
goto out_clk;
|
||||
|
||||
+ priv->wq = alloc_workqueue("hi3110_wq", WQ_FREEZABLE | WQ_MEM_RECLAIM,
|
||||
+ 0);
|
||||
+ if (!priv->wq) {
|
||||
+ ret = -ENOMEM;
|
||||
+ goto out_clk;
|
||||
+ }
|
||||
+ INIT_WORK(&priv->tx_work, hi3110_tx_work_handler);
|
||||
+ INIT_WORK(&priv->restart_work, hi3110_restart_work_handler);
|
||||
+
|
||||
priv->spi = spi;
|
||||
mutex_init(&priv->hi3110_lock);
|
||||
|
||||
@@ -950,6 +946,8 @@ static int hi3110_can_probe(struct spi_device *spi)
|
||||
return 0;
|
||||
|
||||
error_probe:
|
||||
+ destroy_workqueue(priv->wq);
|
||||
+ priv->wq = NULL;
|
||||
hi3110_power_enable(priv->power, 0);
|
||||
|
||||
out_clk:
|
||||
@@ -970,6 +968,9 @@ static void hi3110_can_remove(struct spi_device *spi)
|
||||
|
||||
hi3110_power_enable(priv->power, 0);
|
||||
|
||||
+ destroy_workqueue(priv->wq);
|
||||
+ priv->wq = NULL;
|
||||
+
|
||||
clk_disable_unprepare(priv->clk);
|
||||
|
||||
free_candev(net);
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
|
||||
index e6403d4c937c8c..a0c0932a85d1e9 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
|
||||
@@ -294,7 +294,6 @@ static const struct usb_device_id rtl8192c_usb_ids[] = {
|
||||
{RTL_USB_DEVICE(0x050d, 0x1102, rtl92cu_hal_cfg)}, /*Belkin - Edimax*/
|
||||
{RTL_USB_DEVICE(0x050d, 0x11f2, rtl92cu_hal_cfg)}, /*Belkin - ISY*/
|
||||
{RTL_USB_DEVICE(0x06f8, 0xe033, rtl92cu_hal_cfg)}, /*Hercules - Edimax*/
|
||||
- {RTL_USB_DEVICE(0x07b8, 0x8188, rtl92cu_hal_cfg)}, /*Abocom - Abocom*/
|
||||
{RTL_USB_DEVICE(0x07b8, 0x8189, rtl92cu_hal_cfg)}, /*Funai - Abocom*/
|
||||
{RTL_USB_DEVICE(0x0846, 0x9041, rtl92cu_hal_cfg)}, /*NetGear WNA1000M*/
|
||||
{RTL_USB_DEVICE(0x0846, 0x9043, rtl92cu_hal_cfg)}, /*NG WNA1000Mv2*/
|
||||
diff --git a/drivers/platform/x86/amd/pmc/pmc-quirks.c b/drivers/platform/x86/amd/pmc/pmc-quirks.c
|
||||
index 6f5437d210a617..9fd2829ee2ab48 100644
|
||||
--- a/drivers/platform/x86/amd/pmc/pmc-quirks.c
|
||||
+++ b/drivers/platform/x86/amd/pmc/pmc-quirks.c
|
||||
@@ -233,6 +233,14 @@ static const struct dmi_system_id fwbug_list[] = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "WUJIE14-GX4HRXL"),
|
||||
}
|
||||
},
|
||||
+ {
|
||||
+ .ident = "MECHREVO Yilong15Pro Series GM5HG7A",
|
||||
+ .driver_data = &quirk_spurious_8042,
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "MECHREVO"),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "Yilong15Pro Series GM5HG7A"),
|
||||
+ }
|
||||
+ },
|
||||
/* https://bugzilla.kernel.org/show_bug.cgi?id=220116 */
|
||||
{
|
||||
.ident = "PCSpecialist Lafite Pro V 14M",
|
||||
@@ -242,6 +250,13 @@ static const struct dmi_system_id fwbug_list[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Lafite Pro V 14M"),
|
||||
}
|
||||
},
|
||||
+ {
|
||||
+ .ident = "TUXEDO Stellaris Slim 15 AMD Gen6",
|
||||
+ .driver_data = &quirk_spurious_8042,
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_BOARD_NAME, "GMxHGxx"),
|
||||
+ }
|
||||
+ },
|
||||
{
|
||||
.ident = "TUXEDO InfinityBook Pro 14/15 AMD Gen10",
|
||||
.driver_data = &quirk_spurious_8042,
|
||||
diff --git a/drivers/staging/axis-fifo/axis-fifo.c b/drivers/staging/axis-fifo/axis-fifo.c
|
||||
index f667b3b62f1883..4c38eeda53c4e7 100644
|
||||
--- a/drivers/staging/axis-fifo/axis-fifo.c
|
||||
+++ b/drivers/staging/axis-fifo/axis-fifo.c
|
||||
@@ -42,7 +42,6 @@
|
||||
#define DRIVER_NAME "axis_fifo"
|
||||
|
||||
#define READ_BUF_SIZE 128U /* read buffer length in words */
|
||||
-#define WRITE_BUF_SIZE 128U /* write buffer length in words */
|
||||
|
||||
/* ----------------------------
|
||||
* IP register offsets
|
||||
@@ -397,6 +396,7 @@ static ssize_t axis_fifo_read(struct file *f, char __user *buf,
|
||||
}
|
||||
|
||||
bytes_available = ioread32(fifo->base_addr + XLLF_RLR_OFFSET);
|
||||
+ words_available = bytes_available / sizeof(u32);
|
||||
if (!bytes_available) {
|
||||
dev_err(fifo->dt_device, "received a packet of length 0\n");
|
||||
ret = -EIO;
|
||||
@@ -407,7 +407,7 @@ static ssize_t axis_fifo_read(struct file *f, char __user *buf,
|
||||
dev_err(fifo->dt_device, "user read buffer too small (available bytes=%zu user buffer bytes=%zu)\n",
|
||||
bytes_available, len);
|
||||
ret = -EINVAL;
|
||||
- goto end_unlock;
|
||||
+ goto err_flush_rx;
|
||||
}
|
||||
|
||||
if (bytes_available % sizeof(u32)) {
|
||||
@@ -416,11 +416,9 @@ static ssize_t axis_fifo_read(struct file *f, char __user *buf,
|
||||
*/
|
||||
dev_err(fifo->dt_device, "received a packet that isn't word-aligned\n");
|
||||
ret = -EIO;
|
||||
- goto end_unlock;
|
||||
+ goto err_flush_rx;
|
||||
}
|
||||
|
||||
- words_available = bytes_available / sizeof(u32);
|
||||
-
|
||||
/* read data into an intermediate buffer, copying the contents
|
||||
* to userspace when the buffer is full
|
||||
*/
|
||||
@@ -432,18 +430,23 @@ static ssize_t axis_fifo_read(struct file *f, char __user *buf,
|
||||
tmp_buf[i] = ioread32(fifo->base_addr +
|
||||
XLLF_RDFD_OFFSET);
|
||||
}
|
||||
+ words_available -= copy;
|
||||
|
||||
if (copy_to_user(buf + copied * sizeof(u32), tmp_buf,
|
||||
copy * sizeof(u32))) {
|
||||
ret = -EFAULT;
|
||||
- goto end_unlock;
|
||||
+ goto err_flush_rx;
|
||||
}
|
||||
|
||||
copied += copy;
|
||||
- words_available -= copy;
|
||||
}
|
||||
+ mutex_unlock(&fifo->read_lock);
|
||||
+
|
||||
+ return bytes_available;
|
||||
|
||||
- ret = bytes_available;
|
||||
+err_flush_rx:
|
||||
+ while (words_available--)
|
||||
+ ioread32(fifo->base_addr + XLLF_RDFD_OFFSET);
|
||||
|
||||
end_unlock:
|
||||
mutex_unlock(&fifo->read_lock);
|
||||
@@ -471,11 +474,8 @@ static ssize_t axis_fifo_write(struct file *f, const char __user *buf,
|
||||
{
|
||||
struct axis_fifo *fifo = (struct axis_fifo *)f->private_data;
|
||||
unsigned int words_to_write;
|
||||
- unsigned int copied;
|
||||
- unsigned int copy;
|
||||
- unsigned int i;
|
||||
+ u32 *txbuf;
|
||||
int ret;
|
||||
- u32 tmp_buf[WRITE_BUF_SIZE];
|
||||
|
||||
if (len % sizeof(u32)) {
|
||||
dev_err(fifo->dt_device,
|
||||
@@ -491,11 +491,17 @@ static ssize_t axis_fifo_write(struct file *f, const char __user *buf,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
- if (words_to_write > fifo->tx_fifo_depth) {
|
||||
- dev_err(fifo->dt_device, "tried to write more words [%u] than slots in the fifo buffer [%u]\n",
|
||||
- words_to_write, fifo->tx_fifo_depth);
|
||||
+ /*
|
||||
+ * In 'Store-and-Forward' mode, the maximum packet that can be
|
||||
+ * transmitted is limited by the size of the FIFO, which is
|
||||
+ * (C_TX_FIFO_DEPTH–4)*(data interface width/8) bytes.
|
||||
+ *
|
||||
+ * Do not attempt to send a packet larger than 'tx_fifo_depth - 4',
|
||||
+ * otherwise a 'Transmit Packet Overrun Error' interrupt will be
|
||||
+ * raised, which requires a reset of the TX circuit to recover.
|
||||
+ */
|
||||
+ if (words_to_write > (fifo->tx_fifo_depth - 4))
|
||||
return -EINVAL;
|
||||
- }
|
||||
|
||||
if (fifo->write_flags & O_NONBLOCK) {
|
||||
/*
|
||||
@@ -534,32 +540,20 @@ static ssize_t axis_fifo_write(struct file *f, const char __user *buf,
|
||||
}
|
||||
}
|
||||
|
||||
- /* write data from an intermediate buffer into the fifo IP, refilling
|
||||
- * the buffer with userspace data as needed
|
||||
- */
|
||||
- copied = 0;
|
||||
- while (words_to_write > 0) {
|
||||
- copy = min(words_to_write, WRITE_BUF_SIZE);
|
||||
-
|
||||
- if (copy_from_user(tmp_buf, buf + copied * sizeof(u32),
|
||||
- copy * sizeof(u32))) {
|
||||
- ret = -EFAULT;
|
||||
- goto end_unlock;
|
||||
- }
|
||||
-
|
||||
- for (i = 0; i < copy; i++)
|
||||
- iowrite32(tmp_buf[i], fifo->base_addr +
|
||||
- XLLF_TDFD_OFFSET);
|
||||
-
|
||||
- copied += copy;
|
||||
- words_to_write -= copy;
|
||||
+ txbuf = vmemdup_user(buf, len);
|
||||
+ if (IS_ERR(txbuf)) {
|
||||
+ ret = PTR_ERR(txbuf);
|
||||
+ goto end_unlock;
|
||||
}
|
||||
|
||||
- ret = copied * sizeof(u32);
|
||||
+ for (int i = 0; i < words_to_write; ++i)
|
||||
+ iowrite32(txbuf[i], fifo->base_addr + XLLF_TDFD_OFFSET);
|
||||
|
||||
/* write packet size to fifo */
|
||||
- iowrite32(ret, fifo->base_addr + XLLF_TLR_OFFSET);
|
||||
+ iowrite32(len, fifo->base_addr + XLLF_TLR_OFFSET);
|
||||
|
||||
+ ret = len;
|
||||
+ kvfree(txbuf);
|
||||
end_unlock:
|
||||
mutex_unlock(&fifo->write_lock);
|
||||
|
||||
diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
|
||||
index bdc568a4ab6693..4f57833e3ec742 100644
|
||||
--- a/drivers/tty/serial/Kconfig
|
||||
+++ b/drivers/tty/serial/Kconfig
|
||||
@@ -1405,7 +1405,7 @@ config SERIAL_STM32
|
||||
|
||||
config SERIAL_STM32_CONSOLE
|
||||
bool "Support for console on STM32"
|
||||
- depends on SERIAL_STM32=y
|
||||
+ depends on SERIAL_STM32
|
||||
select SERIAL_CORE_CONSOLE
|
||||
select SERIAL_EARLYCON
|
||||
|
||||
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
|
||||
index ef546f660b9927..dca610369ca94a 100644
|
||||
--- a/drivers/usb/serial/option.c
|
||||
+++ b/drivers/usb/serial/option.c
|
||||
@@ -2114,6 +2114,12 @@ static const struct usb_device_id option_ids[] = {
|
||||
{ USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9003, 0xff) }, /* Simcom SIM7500/SIM7600 MBIM mode */
|
||||
{ USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9011, 0xff), /* Simcom SIM7500/SIM7600 RNDIS mode */
|
||||
.driver_info = RSVD(7) },
|
||||
+ { USB_DEVICE(0x1e0e, 0x9071), /* Simcom SIM8230 RMNET mode */
|
||||
+ .driver_info = RSVD(3) | RSVD(4) },
|
||||
+ { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9078, 0xff), /* Simcom SIM8230 ECM mode */
|
||||
+ .driver_info = RSVD(5) },
|
||||
+ { USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x907b, 0xff), /* Simcom SIM8230 RNDIS mode */
|
||||
+ .driver_info = RSVD(5) },
|
||||
{ USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9205, 0xff) }, /* Simcom SIM7070/SIM7080/SIM7090 AT+ECM mode */
|
||||
{ USB_DEVICE_INTERFACE_CLASS(0x1e0e, 0x9206, 0xff) }, /* Simcom SIM7070/SIM7080/SIM7090 AT-only mode */
|
||||
{ USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S_X200),
|
||||
diff --git a/fs/btrfs/ref-verify.c b/fs/btrfs/ref-verify.c
|
||||
index 28ac7995716e04..b8122582d75556 100644
|
||||
--- a/fs/btrfs/ref-verify.c
|
||||
+++ b/fs/btrfs/ref-verify.c
|
||||
@@ -990,11 +990,18 @@ int btrfs_build_ref_tree(struct btrfs_fs_info *fs_info)
|
||||
if (!btrfs_test_opt(fs_info, REF_VERIFY))
|
||||
return 0;
|
||||
|
||||
+ extent_root = btrfs_extent_root(fs_info, 0);
|
||||
+ /* If the extent tree is damaged we cannot ignore it (IGNOREBADROOTS). */
|
||||
+ if (IS_ERR(extent_root)) {
|
||||
+ btrfs_warn(fs_info, "ref-verify: extent tree not available, disabling");
|
||||
+ btrfs_clear_opt(fs_info->mount_opt, REF_VERIFY);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
path = btrfs_alloc_path();
|
||||
if (!path)
|
||||
return -ENOMEM;
|
||||
|
||||
- extent_root = btrfs_extent_root(fs_info, 0);
|
||||
eb = btrfs_read_lock_root_node(extent_root);
|
||||
level = btrfs_header_level(eb);
|
||||
path->nodes[level] = eb;
|
||||
diff --git a/include/linux/device.h b/include/linux/device.h
|
||||
index 3627b26b243e61..e5f1a773dc5470 100644
|
||||
--- a/include/linux/device.h
|
||||
+++ b/include/linux/device.h
|
||||
@@ -968,6 +968,9 @@ static inline bool device_pm_not_required(struct device *dev)
|
||||
static inline void device_set_pm_not_required(struct device *dev)
|
||||
{
|
||||
dev->power.no_pm = true;
|
||||
+#ifdef CONFIG_PM
|
||||
+ dev->power.no_callbacks = true;
|
||||
+#endif
|
||||
}
|
||||
|
||||
static inline void dev_pm_syscore_device(struct device *dev, bool val)
|
||||
diff --git a/net/9p/trans_fd.c b/net/9p/trans_fd.c
|
||||
index d0eb03ada704dc..a1e3cb48621a90 100644
|
||||
--- a/net/9p/trans_fd.c
|
||||
+++ b/net/9p/trans_fd.c
|
||||
@@ -719,10 +719,10 @@ static int p9_fd_cancelled(struct p9_client *client, struct p9_req_t *req)
|
||||
p9_debug(P9_DEBUG_TRANS, "client %p req %p\n", client, req);
|
||||
|
||||
spin_lock(&m->req_lock);
|
||||
- /* Ignore cancelled request if message has been received
|
||||
- * before lock.
|
||||
- */
|
||||
- if (req->status == REQ_STATUS_RCVD) {
|
||||
+ /* Ignore cancelled request if status changed since the request was
|
||||
+ * processed in p9_client_flush()
|
||||
+ */
|
||||
+ if (req->status != REQ_STATUS_SENT) {
|
||||
spin_unlock(&m->req_lock);
|
||||
return 0;
|
||||
}
|
||||
diff --git a/sound/soc/amd/acp/amd.h b/sound/soc/amd/acp/amd.h
|
||||
index d6cfae6ec5f74a..3f1761755b8660 100644
|
||||
--- a/sound/soc/amd/acp/amd.h
|
||||
+++ b/sound/soc/amd/acp/amd.h
|
||||
@@ -116,7 +116,7 @@
|
||||
#define PDM_DMA_INTR_MASK 0x10000
|
||||
#define PDM_DEC_64 0x2
|
||||
#define PDM_CLK_FREQ_MASK 0x07
|
||||
-#define PDM_MISC_CTRL_MASK 0x10
|
||||
+#define PDM_MISC_CTRL_MASK 0x18
|
||||
#define PDM_ENABLE 0x01
|
||||
#define PDM_DISABLE 0x00
|
||||
#define DMA_EN_MASK 0x02
|
||||
diff --git a/sound/soc/codecs/rt5682s.c b/sound/soc/codecs/rt5682s.c
|
||||
index 92c647d439ec7f..89de427c19e793 100644
|
||||
--- a/sound/soc/codecs/rt5682s.c
|
||||
+++ b/sound/soc/codecs/rt5682s.c
|
||||
@@ -653,14 +653,15 @@ static void rt5682s_sar_power_mode(struct snd_soc_component *component, int mode
|
||||
switch (mode) {
|
||||
case SAR_PWR_SAVING:
|
||||
snd_soc_component_update_bits(component, RT5682S_CBJ_CTRL_3,
|
||||
- RT5682S_CBJ_IN_BUF_MASK, RT5682S_CBJ_IN_BUF_DIS);
|
||||
+ RT5682S_CBJ_IN_BUF_MASK, RT5682S_CBJ_IN_BUF_EN);
|
||||
snd_soc_component_update_bits(component, RT5682S_CBJ_CTRL_1,
|
||||
- RT5682S_MB1_PATH_MASK | RT5682S_MB2_PATH_MASK,
|
||||
- RT5682S_CTRL_MB1_REG | RT5682S_CTRL_MB2_REG);
|
||||
+ RT5682S_MB1_PATH_MASK | RT5682S_MB2_PATH_MASK |
|
||||
+ RT5682S_VREF_POW_MASK, RT5682S_CTRL_MB1_FSM |
|
||||
+ RT5682S_CTRL_MB2_FSM | RT5682S_VREF_POW_FSM);
|
||||
snd_soc_component_update_bits(component, RT5682S_SAR_IL_CMD_1,
|
||||
RT5682S_SAR_BUTDET_MASK | RT5682S_SAR_BUTDET_POW_MASK |
|
||||
RT5682S_SAR_SEL_MB1_2_CTL_MASK, RT5682S_SAR_BUTDET_DIS |
|
||||
- RT5682S_SAR_BUTDET_POW_SAV | RT5682S_SAR_SEL_MB1_2_MANU);
|
||||
+ RT5682S_SAR_BUTDET_POW_NORM | RT5682S_SAR_SEL_MB1_2_MANU);
|
||||
usleep_range(5000, 5500);
|
||||
snd_soc_component_update_bits(component, RT5682S_SAR_IL_CMD_1,
|
||||
RT5682S_SAR_BUTDET_MASK, RT5682S_SAR_BUTDET_EN);
|
||||
@@ -688,7 +689,7 @@ static void rt5682s_sar_power_mode(struct snd_soc_component *component, int mode
|
||||
snd_soc_component_update_bits(component, RT5682S_SAR_IL_CMD_1,
|
||||
RT5682S_SAR_BUTDET_MASK | RT5682S_SAR_BUTDET_POW_MASK |
|
||||
RT5682S_SAR_SEL_MB1_2_CTL_MASK, RT5682S_SAR_BUTDET_DIS |
|
||||
- RT5682S_SAR_BUTDET_POW_SAV | RT5682S_SAR_SEL_MB1_2_MANU);
|
||||
+ RT5682S_SAR_BUTDET_POW_NORM | RT5682S_SAR_SEL_MB1_2_MANU);
|
||||
break;
|
||||
default:
|
||||
dev_err(component->dev, "Invalid SAR Power mode: %d\n", mode);
|
||||
@@ -725,7 +726,7 @@ static void rt5682s_disable_push_button_irq(struct snd_soc_component *component)
|
||||
snd_soc_component_update_bits(component, RT5682S_SAR_IL_CMD_1,
|
||||
RT5682S_SAR_BUTDET_MASK | RT5682S_SAR_BUTDET_POW_MASK |
|
||||
RT5682S_SAR_SEL_MB1_2_CTL_MASK, RT5682S_SAR_BUTDET_DIS |
|
||||
- RT5682S_SAR_BUTDET_POW_SAV | RT5682S_SAR_SEL_MB1_2_MANU);
|
||||
+ RT5682S_SAR_BUTDET_POW_NORM | RT5682S_SAR_SEL_MB1_2_MANU);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -786,7 +787,7 @@ static int rt5682s_headset_detect(struct snd_soc_component *component, int jack_
|
||||
jack_type = SND_JACK_HEADSET;
|
||||
snd_soc_component_write(component, RT5682S_SAR_IL_CMD_3, 0x024c);
|
||||
snd_soc_component_update_bits(component, RT5682S_CBJ_CTRL_1,
|
||||
- RT5682S_FAST_OFF_MASK, RT5682S_FAST_OFF_EN);
|
||||
+ RT5682S_FAST_OFF_MASK, RT5682S_FAST_OFF_DIS);
|
||||
snd_soc_component_update_bits(component, RT5682S_SAR_IL_CMD_1,
|
||||
RT5682S_SAR_SEL_MB1_2_MASK, val << RT5682S_SAR_SEL_MB1_2_SFT);
|
||||
rt5682s_enable_push_button_irq(component);
|
||||
@@ -966,7 +967,7 @@ static int rt5682s_set_jack_detect(struct snd_soc_component *component,
|
||||
RT5682S_EMB_JD_MASK | RT5682S_DET_TYPE |
|
||||
RT5682S_POL_FAST_OFF_MASK | RT5682S_MIC_CAP_MASK,
|
||||
RT5682S_EMB_JD_EN | RT5682S_DET_TYPE |
|
||||
- RT5682S_POL_FAST_OFF_HIGH | RT5682S_MIC_CAP_HS);
|
||||
+ RT5682S_POL_FAST_OFF_LOW | RT5682S_MIC_CAP_HS);
|
||||
regmap_update_bits(rt5682s->regmap, RT5682S_SAR_IL_CMD_1,
|
||||
RT5682S_SAR_POW_MASK, RT5682S_SAR_POW_EN);
|
||||
regmap_update_bits(rt5682s->regmap, RT5682S_GPIO_CTRL_1,
|
||||
diff --git a/sound/usb/midi.c b/sound/usb/midi.c
|
||||
index 3059f814eb5c2d..fdf69917d19cc8 100644
|
||||
--- a/sound/usb/midi.c
|
||||
+++ b/sound/usb/midi.c
|
||||
@@ -1522,12 +1522,12 @@ static void snd_usbmidi_free(struct snd_usb_midi *umidi)
|
||||
{
|
||||
int i;
|
||||
|
||||
+ if (!umidi->disconnected)
|
||||
+ snd_usbmidi_disconnect(&umidi->list);
|
||||
+
|
||||
for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) {
|
||||
struct snd_usb_midi_endpoint *ep = &umidi->endpoints[i];
|
||||
- if (ep->out)
|
||||
- snd_usbmidi_out_endpoint_delete(ep->out);
|
||||
- if (ep->in)
|
||||
- snd_usbmidi_in_endpoint_delete(ep->in);
|
||||
+ kfree(ep->out);
|
||||
}
|
||||
mutex_destroy(&umidi->mutex);
|
||||
kfree(umidi);
|
||||
@@ -1553,7 +1553,7 @@ void snd_usbmidi_disconnect(struct list_head *p)
|
||||
spin_unlock_irq(&umidi->disc_lock);
|
||||
up_write(&umidi->disc_rwsem);
|
||||
|
||||
- del_timer_sync(&umidi->error_timer);
|
||||
+ timer_shutdown_sync(&umidi->error_timer);
|
||||
|
||||
for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) {
|
||||
struct snd_usb_midi_endpoint *ep = &umidi->endpoints[i];
|
||||
diff --git a/tools/lib/subcmd/help.c b/tools/lib/subcmd/help.c
|
||||
index 9ef569492560ef..ddaeb4eb3e2497 100644
|
||||
--- a/tools/lib/subcmd/help.c
|
||||
+++ b/tools/lib/subcmd/help.c
|
||||
@@ -75,6 +75,9 @@ void exclude_cmds(struct cmdnames *cmds, struct cmdnames *excludes)
|
||||
size_t ci, cj, ei;
|
||||
int cmp;
|
||||
|
||||
+ if (!excludes->cnt)
|
||||
+ return;
|
||||
+
|
||||
ci = cj = ei = 0;
|
||||
while (ci < cmds->cnt && ei < excludes->cnt) {
|
||||
cmp = strcmp(cmds->names[ci]->name, excludes->names[ei]->name);
|
||||
6153
patch/kernel/archive/odroidxu4-6.6/patch-6.6.111-112.patch
Normal file
6153
patch/kernel/archive/odroidxu4-6.6/patch-6.6.111-112.patch
Normal file
File diff suppressed because it is too large
Load Diff
7576
patch/kernel/archive/odroidxu4-6.6/patch-6.6.112-113.patch
Normal file
7576
patch/kernel/archive/odroidxu4-6.6/patch-6.6.112-113.patch
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user