mirror of
https://github.com/brain-hackers/linux-brain.git
synced 2024-06-09 23:36:23 +09:00
This is the 5.4.117 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmCVAOoACgkQONu9yGCS aT7hHg//RSTMezyVHL3nU1cpPxTXE030uYYO6E6TGNIEmEfRijsJhZMQW/RPuqeX 4x3Beq7GtwnoDJTxR1FbeF8hFLSzqcyV0780Vknuk0bogM5tPL3HweysAzISbLWm bSDd76hQPTwOXOsgw1VDMwp9YLPYsZ5Bsnh9WuoIXwvBNUCu4pTS1bbs0Dd/vgGg OOf3aXr89Zrz79dvDq9KoE9gg2WVKhOTbK4jghJP2bgHI7hv7Enk87DPZSyHErDP v9SqgSNnREALL87K9UDdosJ5xDQloV0oJ/2AYsETPDKuIRWHo32R3VSAd8XtPrAz YP/Fmg08Q28onsoT+YUps44t1275mtUNFKPd6NHdyqGn+UHjxMG2EdWOR9cvL4Nh RF9B1jb2nq4olgeyt19CqwrYxcxuJOTPn/rUJcCLdyARIfzXOnHCSKJCkk5FSAU9 daU3HQlv5ukdrW7bl9QAVT6a7dJ9wZd9AB4WFghM68QZxHzylseF3ELTDLVcDN8O avGGOU6dc6MmO+7H6dr2s3cV9zBXCUoUD5mAzVzgz6h44Wpn+LK+ks6IWMnTNO9j ER94kMysUEcItguOEpJ1oe0b3Is+rmZsIBuRzneNlo1aGvhd3VCb+Zl9Wd92HwKi lvOwuha9GrLDkmUIaEbLQq9wdl3d6gcA6ldsnghParnrNEv319c= =iO7e -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEdQaENiSDAlGTDEbB7G51OISzHs0FAmCVHn0ACgkQ7G51OISz Hs1SQw/7BpMqSym7Def8uljmntnEqzt3ioxakM0TE2G/F9WJZZ/ESWTE6K6SvjbH DX9wYvvDdEh4UdxprXEDReU9w0szmIqicwlVbmmhRH+e2HsAbtow9yf5YnFzSiDU 3lC8GW3Rn6acNkqq6IFNiEHd525FJD7YwnfTfvMUflLBzm7+GD5+RG/bp9/yktMl CkV4BTSYc95CYEE/S0H47UMp7d1tbSEEZ98B2lgKtPDfhDsjn03Q26c3HPs8c0bR 4cAIOPMRZnv79S+TP75GZhmfapjEyBO3ajzihEYP5uWWWSF4OwZJ1VpGhgusLZ4j W+3sOUkG8x9ppaMQtDrrroSK56H9z1nODil7uLLsGuvf7mcUqj/w1/aR/HfxLrro H59YU4CZAPRjPh3eTdDWvtlsdHRqMjO/oywBCW/01CE+h9k2UHUowQdIV/q+CT+0 nnkZRiAVn0Ex4m1YtGgv9sNjAvkMbSWSOAHVKQS55F1ZEhamIAtijLHB52DIGL8r SYmjT6A22u/spQEZircFtP3PvHSeuLNDx0MDNBkntQTLGZOLKCajWs4y5zsZSAEw /X/6P+f5Fc2lvtUy7+OkJv6l3flXu9IsvHgdaGDdMfiMyI2ui5xp2med/wrceX2o MbihC/LlhRhBAT35RCD7hOtxvXy2Eufn9h89EnjmPHACjo8aQSs= =A+pM -----END PGP SIGNATURE----- Merge tag 'v5.4.117' into 5.4-2.3.x-imx This is the 5.4.117 stable release Signed-off-by: Andrey Zhizhikin <andrey.zhizhikin@leica-geosystems.com>
This commit is contained in:
commit
e43d547d72
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
VERSION = 5
|
VERSION = 5
|
||||||
PATCHLEVEL = 4
|
PATCHLEVEL = 4
|
||||||
SUBLEVEL = 116
|
SUBLEVEL = 117
|
||||||
EXTRAVERSION =
|
EXTRAVERSION =
|
||||||
NAME = Kleptomaniac Octopus
|
NAME = Kleptomaniac Octopus
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,12 @@
|
||||||
|
|
||||||
#define __VDSO_USE_SYSCALL ULLONG_MAX
|
#define __VDSO_USE_SYSCALL ULLONG_MAX
|
||||||
|
|
||||||
|
#if MIPS_ISA_REV < 6
|
||||||
|
#define VDSO_SYSCALL_CLOBBERS "hi", "lo",
|
||||||
|
#else
|
||||||
|
#define VDSO_SYSCALL_CLOBBERS
|
||||||
|
#endif
|
||||||
|
|
||||||
static __always_inline long gettimeofday_fallback(
|
static __always_inline long gettimeofday_fallback(
|
||||||
struct __kernel_old_timeval *_tv,
|
struct __kernel_old_timeval *_tv,
|
||||||
struct timezone *_tz)
|
struct timezone *_tz)
|
||||||
|
@ -41,7 +47,9 @@ static __always_inline long gettimeofday_fallback(
|
||||||
: "=r" (ret), "=r" (error)
|
: "=r" (ret), "=r" (error)
|
||||||
: "r" (tv), "r" (tz), "r" (nr)
|
: "r" (tv), "r" (tz), "r" (nr)
|
||||||
: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
|
: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
|
||||||
"$14", "$15", "$24", "$25", "hi", "lo", "memory");
|
"$14", "$15", "$24", "$25",
|
||||||
|
VDSO_SYSCALL_CLOBBERS
|
||||||
|
"memory");
|
||||||
|
|
||||||
return error ? -ret : ret;
|
return error ? -ret : ret;
|
||||||
}
|
}
|
||||||
|
@ -65,7 +73,9 @@ static __always_inline long clock_gettime_fallback(
|
||||||
: "=r" (ret), "=r" (error)
|
: "=r" (ret), "=r" (error)
|
||||||
: "r" (clkid), "r" (ts), "r" (nr)
|
: "r" (clkid), "r" (ts), "r" (nr)
|
||||||
: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
|
: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
|
||||||
"$14", "$15", "$24", "$25", "hi", "lo", "memory");
|
"$14", "$15", "$24", "$25",
|
||||||
|
VDSO_SYSCALL_CLOBBERS
|
||||||
|
"memory");
|
||||||
|
|
||||||
return error ? -ret : ret;
|
return error ? -ret : ret;
|
||||||
}
|
}
|
||||||
|
@ -89,7 +99,9 @@ static __always_inline int clock_getres_fallback(
|
||||||
: "=r" (ret), "=r" (error)
|
: "=r" (ret), "=r" (error)
|
||||||
: "r" (clkid), "r" (ts), "r" (nr)
|
: "r" (clkid), "r" (ts), "r" (nr)
|
||||||
: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
|
: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
|
||||||
"$14", "$15", "$24", "$25", "hi", "lo", "memory");
|
"$14", "$15", "$24", "$25",
|
||||||
|
VDSO_SYSCALL_CLOBBERS
|
||||||
|
"memory");
|
||||||
|
|
||||||
return error ? -ret : ret;
|
return error ? -ret : ret;
|
||||||
}
|
}
|
||||||
|
@ -113,7 +125,9 @@ static __always_inline long clock_gettime32_fallback(
|
||||||
: "=r" (ret), "=r" (error)
|
: "=r" (ret), "=r" (error)
|
||||||
: "r" (clkid), "r" (ts), "r" (nr)
|
: "r" (clkid), "r" (ts), "r" (nr)
|
||||||
: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
|
: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
|
||||||
"$14", "$15", "$24", "$25", "hi", "lo", "memory");
|
"$14", "$15", "$24", "$25",
|
||||||
|
VDSO_SYSCALL_CLOBBERS
|
||||||
|
"memory");
|
||||||
|
|
||||||
return error ? -ret : ret;
|
return error ? -ret : ret;
|
||||||
}
|
}
|
||||||
|
@ -133,7 +147,9 @@ static __always_inline int clock_getres32_fallback(
|
||||||
: "=r" (ret), "=r" (error)
|
: "=r" (ret), "=r" (error)
|
||||||
: "r" (clkid), "r" (ts), "r" (nr)
|
: "r" (clkid), "r" (ts), "r" (nr)
|
||||||
: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
|
: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
|
||||||
"$14", "$15", "$24", "$25", "hi", "lo", "memory");
|
"$14", "$15", "$24", "$25",
|
||||||
|
VDSO_SYSCALL_CLOBBERS
|
||||||
|
"memory");
|
||||||
|
|
||||||
return error ? -ret : ret;
|
return error ? -ret : ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1553,10 +1553,18 @@ void __init acpi_boot_table_init(void)
|
||||||
/*
|
/*
|
||||||
* Initialize the ACPI boot-time table parser.
|
* Initialize the ACPI boot-time table parser.
|
||||||
*/
|
*/
|
||||||
if (acpi_table_init()) {
|
if (acpi_locate_initial_tables())
|
||||||
disable_acpi();
|
disable_acpi();
|
||||||
return;
|
else
|
||||||
}
|
acpi_reserve_initial_tables();
|
||||||
|
}
|
||||||
|
|
||||||
|
int __init early_acpi_boot_init(void)
|
||||||
|
{
|
||||||
|
if (acpi_disabled)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
acpi_table_init_complete();
|
||||||
|
|
||||||
acpi_table_parse(ACPI_SIG_BOOT, acpi_parse_sbf);
|
acpi_table_parse(ACPI_SIG_BOOT, acpi_parse_sbf);
|
||||||
|
|
||||||
|
@ -1569,18 +1577,9 @@ void __init acpi_boot_table_init(void)
|
||||||
} else {
|
} else {
|
||||||
printk(KERN_WARNING PREFIX "Disabling ACPI support\n");
|
printk(KERN_WARNING PREFIX "Disabling ACPI support\n");
|
||||||
disable_acpi();
|
disable_acpi();
|
||||||
return;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
int __init early_acpi_boot_init(void)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* If acpi_disabled, bail out
|
|
||||||
*/
|
|
||||||
if (acpi_disabled)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Process the Multiple APIC Description Table (MADT), if present
|
* Process the Multiple APIC Description Table (MADT), if present
|
||||||
|
|
|
@ -1196,6 +1196,8 @@ void __init setup_arch(char **cmdline_p)
|
||||||
reserve_initrd();
|
reserve_initrd();
|
||||||
|
|
||||||
acpi_table_upgrade();
|
acpi_table_upgrade();
|
||||||
|
/* Look for ACPI tables and reserve memory occupied by them. */
|
||||||
|
acpi_boot_table_init();
|
||||||
|
|
||||||
vsmp_init();
|
vsmp_init();
|
||||||
|
|
||||||
|
@ -1203,11 +1205,6 @@ void __init setup_arch(char **cmdline_p)
|
||||||
|
|
||||||
early_platform_quirks();
|
early_platform_quirks();
|
||||||
|
|
||||||
/*
|
|
||||||
* Parse the ACPI tables for possible boot-time SMP configuration.
|
|
||||||
*/
|
|
||||||
acpi_boot_table_init();
|
|
||||||
|
|
||||||
early_acpi_boot_init();
|
early_acpi_boot_init();
|
||||||
|
|
||||||
initmem_init();
|
initmem_init();
|
||||||
|
|
|
@ -791,7 +791,7 @@ acpi_status acpi_os_table_override(struct acpi_table_header *existing_table,
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* acpi_table_init()
|
* acpi_locate_initial_tables()
|
||||||
*
|
*
|
||||||
* find RSDP, find and checksum SDT/XSDT.
|
* find RSDP, find and checksum SDT/XSDT.
|
||||||
* checksum all tables, print SDT/XSDT
|
* checksum all tables, print SDT/XSDT
|
||||||
|
@ -799,7 +799,7 @@ acpi_status acpi_os_table_override(struct acpi_table_header *existing_table,
|
||||||
* result: sdt_entry[] is initialized
|
* result: sdt_entry[] is initialized
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int __init acpi_table_init(void)
|
int __init acpi_locate_initial_tables(void)
|
||||||
{
|
{
|
||||||
acpi_status status;
|
acpi_status status;
|
||||||
|
|
||||||
|
@ -814,9 +814,45 @@ int __init acpi_table_init(void)
|
||||||
status = acpi_initialize_tables(initial_tables, ACPI_MAX_TABLES, 0);
|
status = acpi_initialize_tables(initial_tables, ACPI_MAX_TABLES, 0);
|
||||||
if (ACPI_FAILURE(status))
|
if (ACPI_FAILURE(status))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
acpi_table_initrd_scan();
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void __init acpi_reserve_initial_tables(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < ACPI_MAX_TABLES; i++) {
|
||||||
|
struct acpi_table_desc *table_desc = &initial_tables[i];
|
||||||
|
u64 start = table_desc->address;
|
||||||
|
u64 size = table_desc->length;
|
||||||
|
|
||||||
|
if (!start || !size)
|
||||||
|
break;
|
||||||
|
|
||||||
|
pr_info("Reserving %4s table memory at [mem 0x%llx-0x%llx]\n",
|
||||||
|
table_desc->signature.ascii, start, start + size - 1);
|
||||||
|
|
||||||
|
memblock_reserve(start, size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void __init acpi_table_init_complete(void)
|
||||||
|
{
|
||||||
|
acpi_table_initrd_scan();
|
||||||
check_multiple_madt();
|
check_multiple_madt();
|
||||||
|
}
|
||||||
|
|
||||||
|
int __init acpi_table_init(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = acpi_locate_initial_tables();
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
acpi_table_init_complete();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4326,8 +4326,7 @@ static void igb_setup_mrqc(struct igb_adapter *adapter)
|
||||||
else
|
else
|
||||||
mrqc |= E1000_MRQC_ENABLE_VMDQ;
|
mrqc |= E1000_MRQC_ENABLE_VMDQ;
|
||||||
} else {
|
} else {
|
||||||
if (hw->mac.type != e1000_i211)
|
mrqc |= E1000_MRQC_ENABLE_RSS_MQ;
|
||||||
mrqc |= E1000_MRQC_ENABLE_RSS_MQ;
|
|
||||||
}
|
}
|
||||||
igb_vmm_control(adapter);
|
igb_vmm_control(adapter);
|
||||||
|
|
||||||
|
|
|
@ -295,12 +295,12 @@ static int ax88179_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (2 == size) {
|
if (2 == size) {
|
||||||
u16 buf;
|
u16 buf = 0;
|
||||||
ret = __ax88179_read_cmd(dev, cmd, value, index, size, &buf, 0);
|
ret = __ax88179_read_cmd(dev, cmd, value, index, size, &buf, 0);
|
||||||
le16_to_cpus(&buf);
|
le16_to_cpus(&buf);
|
||||||
*((u16 *)data) = buf;
|
*((u16 *)data) = buf;
|
||||||
} else if (4 == size) {
|
} else if (4 == size) {
|
||||||
u32 buf;
|
u32 buf = 0;
|
||||||
ret = __ax88179_read_cmd(dev, cmd, value, index, size, &buf, 0);
|
ret = __ax88179_read_cmd(dev, cmd, value, index, size, &buf, 0);
|
||||||
le32_to_cpus(&buf);
|
le32_to_cpus(&buf);
|
||||||
*((u32 *)data) = buf;
|
*((u32 *)data) = buf;
|
||||||
|
|
|
@ -705,6 +705,7 @@ static int iwl_pcie_gen2_enqueue_hcmd(struct iwl_trans *trans,
|
||||||
const u8 *cmddata[IWL_MAX_CMD_TBS_PER_TFD];
|
const u8 *cmddata[IWL_MAX_CMD_TBS_PER_TFD];
|
||||||
u16 cmdlen[IWL_MAX_CMD_TBS_PER_TFD];
|
u16 cmdlen[IWL_MAX_CMD_TBS_PER_TFD];
|
||||||
struct iwl_tfh_tfd *tfd;
|
struct iwl_tfh_tfd *tfd;
|
||||||
|
unsigned long flags2;
|
||||||
|
|
||||||
copy_size = sizeof(struct iwl_cmd_header_wide);
|
copy_size = sizeof(struct iwl_cmd_header_wide);
|
||||||
cmd_size = sizeof(struct iwl_cmd_header_wide);
|
cmd_size = sizeof(struct iwl_cmd_header_wide);
|
||||||
|
@ -773,14 +774,14 @@ static int iwl_pcie_gen2_enqueue_hcmd(struct iwl_trans *trans,
|
||||||
goto free_dup_buf;
|
goto free_dup_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_bh(&txq->lock);
|
spin_lock_irqsave(&txq->lock, flags2);
|
||||||
|
|
||||||
idx = iwl_pcie_get_cmd_index(txq, txq->write_ptr);
|
idx = iwl_pcie_get_cmd_index(txq, txq->write_ptr);
|
||||||
tfd = iwl_pcie_get_tfd(trans, txq, txq->write_ptr);
|
tfd = iwl_pcie_get_tfd(trans, txq, txq->write_ptr);
|
||||||
memset(tfd, 0, sizeof(*tfd));
|
memset(tfd, 0, sizeof(*tfd));
|
||||||
|
|
||||||
if (iwl_queue_space(trans, txq) < ((cmd->flags & CMD_ASYNC) ? 2 : 1)) {
|
if (iwl_queue_space(trans, txq) < ((cmd->flags & CMD_ASYNC) ? 2 : 1)) {
|
||||||
spin_unlock_bh(&txq->lock);
|
spin_unlock_irqrestore(&txq->lock, flags2);
|
||||||
|
|
||||||
IWL_ERR(trans, "No space in command queue\n");
|
IWL_ERR(trans, "No space in command queue\n");
|
||||||
iwl_op_mode_cmd_queue_full(trans->op_mode);
|
iwl_op_mode_cmd_queue_full(trans->op_mode);
|
||||||
|
@ -915,7 +916,7 @@ static int iwl_pcie_gen2_enqueue_hcmd(struct iwl_trans *trans,
|
||||||
spin_unlock_irqrestore(&trans_pcie->reg_lock, flags);
|
spin_unlock_irqrestore(&trans_pcie->reg_lock, flags);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
spin_unlock_bh(&txq->lock);
|
spin_unlock_irqrestore(&txq->lock, flags2);
|
||||||
free_dup_buf:
|
free_dup_buf:
|
||||||
if (idx < 0)
|
if (idx < 0)
|
||||||
kfree(dup_buf);
|
kfree(dup_buf);
|
||||||
|
|
|
@ -1544,6 +1544,7 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans,
|
||||||
u32 cmd_pos;
|
u32 cmd_pos;
|
||||||
const u8 *cmddata[IWL_MAX_CMD_TBS_PER_TFD];
|
const u8 *cmddata[IWL_MAX_CMD_TBS_PER_TFD];
|
||||||
u16 cmdlen[IWL_MAX_CMD_TBS_PER_TFD];
|
u16 cmdlen[IWL_MAX_CMD_TBS_PER_TFD];
|
||||||
|
unsigned long flags2;
|
||||||
|
|
||||||
if (WARN(!trans->wide_cmd_header &&
|
if (WARN(!trans->wide_cmd_header &&
|
||||||
group_id > IWL_ALWAYS_LONG_GROUP,
|
group_id > IWL_ALWAYS_LONG_GROUP,
|
||||||
|
@ -1627,10 +1628,10 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans,
|
||||||
goto free_dup_buf;
|
goto free_dup_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock_bh(&txq->lock);
|
spin_lock_irqsave(&txq->lock, flags2);
|
||||||
|
|
||||||
if (iwl_queue_space(trans, txq) < ((cmd->flags & CMD_ASYNC) ? 2 : 1)) {
|
if (iwl_queue_space(trans, txq) < ((cmd->flags & CMD_ASYNC) ? 2 : 1)) {
|
||||||
spin_unlock_bh(&txq->lock);
|
spin_unlock_irqrestore(&txq->lock, flags2);
|
||||||
|
|
||||||
IWL_ERR(trans, "No space in command queue\n");
|
IWL_ERR(trans, "No space in command queue\n");
|
||||||
iwl_op_mode_cmd_queue_full(trans->op_mode);
|
iwl_op_mode_cmd_queue_full(trans->op_mode);
|
||||||
|
@ -1791,7 +1792,7 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans,
|
||||||
spin_unlock_irqrestore(&trans_pcie->reg_lock, flags);
|
spin_unlock_irqrestore(&trans_pcie->reg_lock, flags);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
spin_unlock_bh(&txq->lock);
|
spin_unlock_irqrestore(&txq->lock, flags2);
|
||||||
free_dup_buf:
|
free_dup_buf:
|
||||||
if (idx < 0)
|
if (idx < 0)
|
||||||
kfree(dup_buf);
|
kfree(dup_buf);
|
||||||
|
|
|
@ -6284,6 +6284,7 @@ enum thermal_access_mode {
|
||||||
enum { /* TPACPI_THERMAL_TPEC_* */
|
enum { /* TPACPI_THERMAL_TPEC_* */
|
||||||
TP_EC_THERMAL_TMP0 = 0x78, /* ACPI EC regs TMP 0..7 */
|
TP_EC_THERMAL_TMP0 = 0x78, /* ACPI EC regs TMP 0..7 */
|
||||||
TP_EC_THERMAL_TMP8 = 0xC0, /* ACPI EC regs TMP 8..15 */
|
TP_EC_THERMAL_TMP8 = 0xC0, /* ACPI EC regs TMP 8..15 */
|
||||||
|
TP_EC_FUNCREV = 0xEF, /* ACPI EC Functional revision */
|
||||||
TP_EC_THERMAL_TMP_NA = -128, /* ACPI EC sensor not available */
|
TP_EC_THERMAL_TMP_NA = -128, /* ACPI EC sensor not available */
|
||||||
|
|
||||||
TPACPI_THERMAL_SENSOR_NA = -128000, /* Sensor not available */
|
TPACPI_THERMAL_SENSOR_NA = -128000, /* Sensor not available */
|
||||||
|
@ -6482,7 +6483,7 @@ static const struct attribute_group thermal_temp_input8_group = {
|
||||||
|
|
||||||
static int __init thermal_init(struct ibm_init_struct *iibm)
|
static int __init thermal_init(struct ibm_init_struct *iibm)
|
||||||
{
|
{
|
||||||
u8 t, ta1, ta2;
|
u8 t, ta1, ta2, ver = 0;
|
||||||
int i;
|
int i;
|
||||||
int acpi_tmp7;
|
int acpi_tmp7;
|
||||||
int res;
|
int res;
|
||||||
|
@ -6497,7 +6498,14 @@ static int __init thermal_init(struct ibm_init_struct *iibm)
|
||||||
* 0x78-0x7F, 0xC0-0xC7. Registers return 0x00 for
|
* 0x78-0x7F, 0xC0-0xC7. Registers return 0x00 for
|
||||||
* non-implemented, thermal sensors return 0x80 when
|
* non-implemented, thermal sensors return 0x80 when
|
||||||
* not available
|
* not available
|
||||||
|
* The above rule is unfortunately flawed. This has been seen with
|
||||||
|
* 0xC2 (power supply ID) causing thermal control problems.
|
||||||
|
* The EC version can be determined by offset 0xEF and at least for
|
||||||
|
* version 3 the Lenovo firmware team confirmed that registers 0xC0-0xC7
|
||||||
|
* are not thermal registers.
|
||||||
*/
|
*/
|
||||||
|
if (!acpi_ec_read(TP_EC_FUNCREV, &ver))
|
||||||
|
pr_warn("Thinkpad ACPI EC unable to access EC version\n");
|
||||||
|
|
||||||
ta1 = ta2 = 0;
|
ta1 = ta2 = 0;
|
||||||
for (i = 0; i < 8; i++) {
|
for (i = 0; i < 8; i++) {
|
||||||
|
@ -6507,11 +6515,13 @@ static int __init thermal_init(struct ibm_init_struct *iibm)
|
||||||
ta1 = 0;
|
ta1 = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (acpi_ec_read(TP_EC_THERMAL_TMP8 + i, &t)) {
|
if (ver < 3) {
|
||||||
ta2 |= t;
|
if (acpi_ec_read(TP_EC_THERMAL_TMP8 + i, &t)) {
|
||||||
} else {
|
ta2 |= t;
|
||||||
ta1 = 0;
|
} else {
|
||||||
break;
|
ta1 = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ta1 == 0) {
|
if (ta1 == 0) {
|
||||||
|
@ -6524,9 +6534,12 @@ static int __init thermal_init(struct ibm_init_struct *iibm)
|
||||||
thermal_read_mode = TPACPI_THERMAL_NONE;
|
thermal_read_mode = TPACPI_THERMAL_NONE;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
thermal_read_mode =
|
if (ver >= 3)
|
||||||
(ta2 != 0) ?
|
thermal_read_mode = TPACPI_THERMAL_TPEC_8;
|
||||||
TPACPI_THERMAL_TPEC_16 : TPACPI_THERMAL_TPEC_8;
|
else
|
||||||
|
thermal_read_mode =
|
||||||
|
(ta2 != 0) ?
|
||||||
|
TPACPI_THERMAL_TPEC_16 : TPACPI_THERMAL_TPEC_8;
|
||||||
}
|
}
|
||||||
} else if (acpi_tmp7) {
|
} else if (acpi_tmp7) {
|
||||||
if (tpacpi_is_ibm() &&
|
if (tpacpi_is_ibm() &&
|
||||||
|
|
|
@ -2639,8 +2639,10 @@ static int ufshcd_exec_dev_cmd(struct ufs_hba *hba,
|
||||||
* the maximum wait time is bounded by SCSI request timeout.
|
* the maximum wait time is bounded by SCSI request timeout.
|
||||||
*/
|
*/
|
||||||
req = blk_get_request(q, REQ_OP_DRV_OUT, 0);
|
req = blk_get_request(q, REQ_OP_DRV_OUT, 0);
|
||||||
if (IS_ERR(req))
|
if (IS_ERR(req)) {
|
||||||
return PTR_ERR(req);
|
err = PTR_ERR(req);
|
||||||
|
goto out_unlock;
|
||||||
|
}
|
||||||
tag = req->tag;
|
tag = req->tag;
|
||||||
WARN_ON_ONCE(!ufshcd_valid_tag(hba, tag));
|
WARN_ON_ONCE(!ufshcd_valid_tag(hba, tag));
|
||||||
|
|
||||||
|
@ -2668,6 +2670,7 @@ static int ufshcd_exec_dev_cmd(struct ufs_hba *hba,
|
||||||
|
|
||||||
out_put_tag:
|
out_put_tag:
|
||||||
blk_put_request(req);
|
blk_put_request(req);
|
||||||
|
out_unlock:
|
||||||
up_read(&hba->clk_scaling_lock);
|
up_read(&hba->clk_scaling_lock);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -5842,8 +5845,10 @@ static int ufshcd_issue_devman_upiu_cmd(struct ufs_hba *hba,
|
||||||
down_read(&hba->clk_scaling_lock);
|
down_read(&hba->clk_scaling_lock);
|
||||||
|
|
||||||
req = blk_get_request(q, REQ_OP_DRV_OUT, 0);
|
req = blk_get_request(q, REQ_OP_DRV_OUT, 0);
|
||||||
if (IS_ERR(req))
|
if (IS_ERR(req)) {
|
||||||
return PTR_ERR(req);
|
err = PTR_ERR(req);
|
||||||
|
goto out_unlock;
|
||||||
|
}
|
||||||
tag = req->tag;
|
tag = req->tag;
|
||||||
WARN_ON_ONCE(!ufshcd_valid_tag(hba, tag));
|
WARN_ON_ONCE(!ufshcd_valid_tag(hba, tag));
|
||||||
|
|
||||||
|
@ -5920,6 +5925,7 @@ static int ufshcd_issue_devman_upiu_cmd(struct ufs_hba *hba,
|
||||||
}
|
}
|
||||||
|
|
||||||
blk_put_request(req);
|
blk_put_request(req);
|
||||||
|
out_unlock:
|
||||||
up_read(&hba->clk_scaling_lock);
|
up_read(&hba->clk_scaling_lock);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
|
@ -406,6 +406,7 @@ static const struct usb_device_id usb_quirk_list[] = {
|
||||||
|
|
||||||
/* Realtek hub in Dell WD19 (Type-C) */
|
/* Realtek hub in Dell WD19 (Type-C) */
|
||||||
{ USB_DEVICE(0x0bda, 0x0487), .driver_info = USB_QUIRK_NO_LPM },
|
{ USB_DEVICE(0x0bda, 0x0487), .driver_info = USB_QUIRK_NO_LPM },
|
||||||
|
{ USB_DEVICE(0x0bda, 0x5487), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||||
|
|
||||||
/* Generic RTL8153 based ethernet adapters */
|
/* Generic RTL8153 based ethernet adapters */
|
||||||
{ USB_DEVICE(0x0bda, 0x8153), .driver_info = USB_QUIRK_NO_LPM },
|
{ USB_DEVICE(0x0bda, 0x8153), .driver_info = USB_QUIRK_NO_LPM },
|
||||||
|
@ -438,6 +439,9 @@ static const struct usb_device_id usb_quirk_list[] = {
|
||||||
{ USB_DEVICE(0x17ef, 0xa012), .driver_info =
|
{ USB_DEVICE(0x17ef, 0xa012), .driver_info =
|
||||||
USB_QUIRK_DISCONNECT_SUSPEND },
|
USB_QUIRK_DISCONNECT_SUSPEND },
|
||||||
|
|
||||||
|
/* Lenovo ThinkPad USB-C Dock Gen2 Ethernet (RTL8153 GigE) */
|
||||||
|
{ USB_DEVICE(0x17ef, 0xa387), .driver_info = USB_QUIRK_NO_LPM },
|
||||||
|
|
||||||
/* BUILDWIN Photo Frame */
|
/* BUILDWIN Photo Frame */
|
||||||
{ USB_DEVICE(0x1908, 0x1315), .driver_info =
|
{ USB_DEVICE(0x1908, 0x1315), .driver_info =
|
||||||
USB_QUIRK_HONOR_BNUMINTERFACES },
|
USB_QUIRK_HONOR_BNUMINTERFACES },
|
||||||
|
|
|
@ -22,7 +22,7 @@ config VFIO_VIRQFD
|
||||||
menuconfig VFIO
|
menuconfig VFIO
|
||||||
tristate "VFIO Non-Privileged userspace driver framework"
|
tristate "VFIO Non-Privileged userspace driver framework"
|
||||||
select IOMMU_API
|
select IOMMU_API
|
||||||
select VFIO_IOMMU_TYPE1 if (X86 || S390 || ARM || ARM64)
|
select VFIO_IOMMU_TYPE1 if MMU && (X86 || S390 || ARM || ARM64)
|
||||||
help
|
help
|
||||||
VFIO provides a framework for secure userspace device drivers.
|
VFIO provides a framework for secure userspace device drivers.
|
||||||
See Documentation/driver-api/vfio.rst for more details.
|
See Documentation/driver-api/vfio.rst for more details.
|
||||||
|
|
|
@ -1525,7 +1525,8 @@ static struct ovl_entry *ovl_get_lowerstack(struct super_block *sb,
|
||||||
* - upper/work dir of any overlayfs instance
|
* - upper/work dir of any overlayfs instance
|
||||||
*/
|
*/
|
||||||
static int ovl_check_layer(struct super_block *sb, struct ovl_fs *ofs,
|
static int ovl_check_layer(struct super_block *sb, struct ovl_fs *ofs,
|
||||||
struct dentry *dentry, const char *name)
|
struct dentry *dentry, const char *name,
|
||||||
|
bool is_lower)
|
||||||
{
|
{
|
||||||
struct dentry *next = dentry, *parent;
|
struct dentry *next = dentry, *parent;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
@ -1537,7 +1538,7 @@ static int ovl_check_layer(struct super_block *sb, struct ovl_fs *ofs,
|
||||||
|
|
||||||
/* Walk back ancestors to root (inclusive) looking for traps */
|
/* Walk back ancestors to root (inclusive) looking for traps */
|
||||||
while (!err && parent != next) {
|
while (!err && parent != next) {
|
||||||
if (ovl_lookup_trap_inode(sb, parent)) {
|
if (is_lower && ovl_lookup_trap_inode(sb, parent)) {
|
||||||
err = -ELOOP;
|
err = -ELOOP;
|
||||||
pr_err("overlayfs: overlapping %s path\n", name);
|
pr_err("overlayfs: overlapping %s path\n", name);
|
||||||
} else if (ovl_is_inuse(parent)) {
|
} else if (ovl_is_inuse(parent)) {
|
||||||
|
@ -1563,7 +1564,7 @@ static int ovl_check_overlapping_layers(struct super_block *sb,
|
||||||
|
|
||||||
if (ofs->upper_mnt) {
|
if (ofs->upper_mnt) {
|
||||||
err = ovl_check_layer(sb, ofs, ofs->upper_mnt->mnt_root,
|
err = ovl_check_layer(sb, ofs, ofs->upper_mnt->mnt_root,
|
||||||
"upperdir");
|
"upperdir", false);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
@ -1574,7 +1575,8 @@ static int ovl_check_overlapping_layers(struct super_block *sb,
|
||||||
* workbasedir. In that case, we already have their traps in
|
* workbasedir. In that case, we already have their traps in
|
||||||
* inode cache and we will catch that case on lookup.
|
* inode cache and we will catch that case on lookup.
|
||||||
*/
|
*/
|
||||||
err = ovl_check_layer(sb, ofs, ofs->workbasedir, "workdir");
|
err = ovl_check_layer(sb, ofs, ofs->workbasedir, "workdir",
|
||||||
|
false);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -1582,7 +1584,7 @@ static int ovl_check_overlapping_layers(struct super_block *sb,
|
||||||
for (i = 0; i < ofs->numlower; i++) {
|
for (i = 0; i < ofs->numlower; i++) {
|
||||||
err = ovl_check_layer(sb, ofs,
|
err = ovl_check_layer(sb, ofs,
|
||||||
ofs->lower_layers[i].mnt->mnt_root,
|
ofs->lower_layers[i].mnt->mnt_root,
|
||||||
"lowerdir");
|
"lowerdir", true);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
|
@ -222,10 +222,14 @@ void __iomem *__acpi_map_table(unsigned long phys, unsigned long size);
|
||||||
void __acpi_unmap_table(void __iomem *map, unsigned long size);
|
void __acpi_unmap_table(void __iomem *map, unsigned long size);
|
||||||
int early_acpi_boot_init(void);
|
int early_acpi_boot_init(void);
|
||||||
int acpi_boot_init (void);
|
int acpi_boot_init (void);
|
||||||
|
void acpi_boot_table_prepare (void);
|
||||||
void acpi_boot_table_init (void);
|
void acpi_boot_table_init (void);
|
||||||
int acpi_mps_check (void);
|
int acpi_mps_check (void);
|
||||||
int acpi_numa_init (void);
|
int acpi_numa_init (void);
|
||||||
|
|
||||||
|
int acpi_locate_initial_tables (void);
|
||||||
|
void acpi_reserve_initial_tables (void);
|
||||||
|
void acpi_table_init_complete (void);
|
||||||
int acpi_table_init (void);
|
int acpi_table_init (void);
|
||||||
int acpi_table_parse(char *id, acpi_tbl_table_handler handler);
|
int acpi_table_parse(char *id, acpi_tbl_table_handler handler);
|
||||||
int __init acpi_table_parse_entries(char *id, unsigned long table_size,
|
int __init acpi_table_parse_entries(char *id, unsigned long table_size,
|
||||||
|
@ -759,9 +763,12 @@ static inline int acpi_boot_init(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void acpi_boot_table_prepare(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
static inline void acpi_boot_table_init(void)
|
static inline void acpi_boot_table_init(void)
|
||||||
{
|
{
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int acpi_mps_check(void)
|
static inline int acpi_mps_check(void)
|
||||||
|
|
|
@ -281,10 +281,11 @@ struct bpf_verifier_state_list {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Possible states for alu_state member. */
|
/* Possible states for alu_state member. */
|
||||||
#define BPF_ALU_SANITIZE_SRC 1U
|
#define BPF_ALU_SANITIZE_SRC (1U << 0)
|
||||||
#define BPF_ALU_SANITIZE_DST 2U
|
#define BPF_ALU_SANITIZE_DST (1U << 1)
|
||||||
#define BPF_ALU_NEG_VALUE (1U << 2)
|
#define BPF_ALU_NEG_VALUE (1U << 2)
|
||||||
#define BPF_ALU_NON_POINTER (1U << 3)
|
#define BPF_ALU_NON_POINTER (1U << 3)
|
||||||
|
#define BPF_ALU_IMMEDIATE (1U << 4)
|
||||||
#define BPF_ALU_SANITIZE (BPF_ALU_SANITIZE_SRC | \
|
#define BPF_ALU_SANITIZE (BPF_ALU_SANITIZE_SRC | \
|
||||||
BPF_ALU_SANITIZE_DST)
|
BPF_ALU_SANITIZE_DST)
|
||||||
|
|
||||||
|
|
|
@ -4359,6 +4359,7 @@ static int sanitize_ptr_alu(struct bpf_verifier_env *env,
|
||||||
{
|
{
|
||||||
struct bpf_insn_aux_data *aux = commit_window ? cur_aux(env) : tmp_aux;
|
struct bpf_insn_aux_data *aux = commit_window ? cur_aux(env) : tmp_aux;
|
||||||
struct bpf_verifier_state *vstate = env->cur_state;
|
struct bpf_verifier_state *vstate = env->cur_state;
|
||||||
|
bool off_is_imm = tnum_is_const(off_reg->var_off);
|
||||||
bool off_is_neg = off_reg->smin_value < 0;
|
bool off_is_neg = off_reg->smin_value < 0;
|
||||||
bool ptr_is_dst_reg = ptr_reg == dst_reg;
|
bool ptr_is_dst_reg = ptr_reg == dst_reg;
|
||||||
u8 opcode = BPF_OP(insn->code);
|
u8 opcode = BPF_OP(insn->code);
|
||||||
|
@ -4389,6 +4390,7 @@ static int sanitize_ptr_alu(struct bpf_verifier_env *env,
|
||||||
alu_limit = abs(tmp_aux->alu_limit - alu_limit);
|
alu_limit = abs(tmp_aux->alu_limit - alu_limit);
|
||||||
} else {
|
} else {
|
||||||
alu_state = off_is_neg ? BPF_ALU_NEG_VALUE : 0;
|
alu_state = off_is_neg ? BPF_ALU_NEG_VALUE : 0;
|
||||||
|
alu_state |= off_is_imm ? BPF_ALU_IMMEDIATE : 0;
|
||||||
alu_state |= ptr_is_dst_reg ?
|
alu_state |= ptr_is_dst_reg ?
|
||||||
BPF_ALU_SANITIZE_SRC : BPF_ALU_SANITIZE_DST;
|
BPF_ALU_SANITIZE_SRC : BPF_ALU_SANITIZE_DST;
|
||||||
}
|
}
|
||||||
|
@ -9156,7 +9158,7 @@ static int fixup_bpf_calls(struct bpf_verifier_env *env)
|
||||||
const u8 code_sub = BPF_ALU64 | BPF_SUB | BPF_X;
|
const u8 code_sub = BPF_ALU64 | BPF_SUB | BPF_X;
|
||||||
struct bpf_insn insn_buf[16];
|
struct bpf_insn insn_buf[16];
|
||||||
struct bpf_insn *patch = &insn_buf[0];
|
struct bpf_insn *patch = &insn_buf[0];
|
||||||
bool issrc, isneg;
|
bool issrc, isneg, isimm;
|
||||||
u32 off_reg;
|
u32 off_reg;
|
||||||
|
|
||||||
aux = &env->insn_aux_data[i + delta];
|
aux = &env->insn_aux_data[i + delta];
|
||||||
|
@ -9167,28 +9169,29 @@ static int fixup_bpf_calls(struct bpf_verifier_env *env)
|
||||||
isneg = aux->alu_state & BPF_ALU_NEG_VALUE;
|
isneg = aux->alu_state & BPF_ALU_NEG_VALUE;
|
||||||
issrc = (aux->alu_state & BPF_ALU_SANITIZE) ==
|
issrc = (aux->alu_state & BPF_ALU_SANITIZE) ==
|
||||||
BPF_ALU_SANITIZE_SRC;
|
BPF_ALU_SANITIZE_SRC;
|
||||||
|
isimm = aux->alu_state & BPF_ALU_IMMEDIATE;
|
||||||
|
|
||||||
off_reg = issrc ? insn->src_reg : insn->dst_reg;
|
off_reg = issrc ? insn->src_reg : insn->dst_reg;
|
||||||
if (isneg)
|
if (isimm) {
|
||||||
*patch++ = BPF_ALU64_IMM(BPF_MUL, off_reg, -1);
|
*patch++ = BPF_MOV32_IMM(BPF_REG_AX, aux->alu_limit);
|
||||||
*patch++ = BPF_MOV32_IMM(BPF_REG_AX, aux->alu_limit);
|
|
||||||
*patch++ = BPF_ALU64_REG(BPF_SUB, BPF_REG_AX, off_reg);
|
|
||||||
*patch++ = BPF_ALU64_REG(BPF_OR, BPF_REG_AX, off_reg);
|
|
||||||
*patch++ = BPF_ALU64_IMM(BPF_NEG, BPF_REG_AX, 0);
|
|
||||||
*patch++ = BPF_ALU64_IMM(BPF_ARSH, BPF_REG_AX, 63);
|
|
||||||
if (issrc) {
|
|
||||||
*patch++ = BPF_ALU64_REG(BPF_AND, BPF_REG_AX,
|
|
||||||
off_reg);
|
|
||||||
insn->src_reg = BPF_REG_AX;
|
|
||||||
} else {
|
} else {
|
||||||
*patch++ = BPF_ALU64_REG(BPF_AND, off_reg,
|
if (isneg)
|
||||||
BPF_REG_AX);
|
*patch++ = BPF_ALU64_IMM(BPF_MUL, off_reg, -1);
|
||||||
|
*patch++ = BPF_MOV32_IMM(BPF_REG_AX, aux->alu_limit);
|
||||||
|
*patch++ = BPF_ALU64_REG(BPF_SUB, BPF_REG_AX, off_reg);
|
||||||
|
*patch++ = BPF_ALU64_REG(BPF_OR, BPF_REG_AX, off_reg);
|
||||||
|
*patch++ = BPF_ALU64_IMM(BPF_NEG, BPF_REG_AX, 0);
|
||||||
|
*patch++ = BPF_ALU64_IMM(BPF_ARSH, BPF_REG_AX, 63);
|
||||||
|
*patch++ = BPF_ALU64_REG(BPF_AND, BPF_REG_AX, off_reg);
|
||||||
}
|
}
|
||||||
|
if (!issrc)
|
||||||
|
*patch++ = BPF_MOV64_REG(insn->dst_reg, insn->src_reg);
|
||||||
|
insn->src_reg = BPF_REG_AX;
|
||||||
if (isneg)
|
if (isneg)
|
||||||
insn->code = insn->code == code_add ?
|
insn->code = insn->code == code_add ?
|
||||||
code_sub : code_add;
|
code_sub : code_add;
|
||||||
*patch++ = *insn;
|
*patch++ = *insn;
|
||||||
if (issrc && isneg)
|
if (issrc && isneg && !isimm)
|
||||||
*patch++ = BPF_ALU64_IMM(BPF_MUL, off_reg, -1);
|
*patch++ = BPF_ALU64_IMM(BPF_MUL, off_reg, -1);
|
||||||
cnt = patch - insn_buf;
|
cnt = patch - insn_buf;
|
||||||
|
|
||||||
|
|
|
@ -10953,12 +10953,12 @@ SYSCALL_DEFINE5(perf_event_open,
|
||||||
perf_paranoid_kernel() && !capable(CAP_SYS_ADMIN))
|
perf_paranoid_kernel() && !capable(CAP_SYS_ADMIN))
|
||||||
return -EACCES;
|
return -EACCES;
|
||||||
|
|
||||||
err = security_locked_down(LOCKDOWN_PERF);
|
/* REGS_INTR can leak data, lockdown must prevent this */
|
||||||
if (err && (attr.sample_type & PERF_SAMPLE_REGS_INTR))
|
if (attr.sample_type & PERF_SAMPLE_REGS_INTR) {
|
||||||
/* REGS_INTR can leak data, lockdown must prevent this */
|
err = security_locked_down(LOCKDOWN_PERF);
|
||||||
return err;
|
if (err)
|
||||||
|
return err;
|
||||||
err = 0;
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In cgroup mode, the pid argument is used to pass the fd
|
* In cgroup mode, the pid argument is used to pass the fd
|
||||||
|
|
|
@ -31,7 +31,7 @@ lib-y := ctype.o string.o vsprintf.o cmdline.o \
|
||||||
flex_proportions.o ratelimit.o show_mem.o \
|
flex_proportions.o ratelimit.o show_mem.o \
|
||||||
is_single_threaded.o plist.o decompress.o kobject_uevent.o \
|
is_single_threaded.o plist.o decompress.o kobject_uevent.o \
|
||||||
earlycpio.o seq_buf.o siphash.o dec_and_lock.o \
|
earlycpio.o seq_buf.o siphash.o dec_and_lock.o \
|
||||||
nmi_backtrace.o nodemask.o win_minmax.o memcat_p.o
|
nmi_backtrace.o nodemask.o win_minmax.o
|
||||||
|
|
||||||
lib-$(CONFIG_PRINTK) += dump_stack.o
|
lib-$(CONFIG_PRINTK) += dump_stack.o
|
||||||
lib-$(CONFIG_MMU) += ioremap.o
|
lib-$(CONFIG_MMU) += ioremap.o
|
||||||
|
@ -46,7 +46,7 @@ obj-y += bcd.o sort.o parser.o debug_locks.o random32.o \
|
||||||
bsearch.o find_bit.o llist.o memweight.o kfifo.o \
|
bsearch.o find_bit.o llist.o memweight.o kfifo.o \
|
||||||
percpu-refcount.o rhashtable.o \
|
percpu-refcount.o rhashtable.o \
|
||||||
once.o refcount.o usercopy.o errseq.o bucket_locks.o \
|
once.o refcount.o usercopy.o errseq.o bucket_locks.o \
|
||||||
generic-radix-tree.o
|
generic-radix-tree.o memcat_p.o
|
||||||
obj-$(CONFIG_STRING_SELFTEST) += test_string.o
|
obj-$(CONFIG_STRING_SELFTEST) += test_string.o
|
||||||
obj-y += string_helpers.o
|
obj-y += string_helpers.o
|
||||||
obj-$(CONFIG_TEST_STRING_HELPERS) += test-string_helpers.o
|
obj-$(CONFIG_TEST_STRING_HELPERS) += test-string_helpers.o
|
||||||
|
|
|
@ -2485,6 +2485,16 @@ YAMAHA_DEVICE(0x7010, "UB99"),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
USB_DEVICE_VENDOR_SPEC(0x0944, 0x0204),
|
||||||
|
.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
|
||||||
|
.vendor_name = "KORG, Inc.",
|
||||||
|
/* .product_name = "ToneLab EX", */
|
||||||
|
.ifnum = 3,
|
||||||
|
.type = QUIRK_MIDI_STANDARD_INTERFACE,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
/* AKAI devices */
|
/* AKAI devices */
|
||||||
{
|
{
|
||||||
USB_DEVICE(0x09e8, 0x0062),
|
USB_DEVICE(0x09e8, 0x0062),
|
||||||
|
|
|
@ -161,7 +161,7 @@ static int set_tracing_pid(struct perf_ftrace *ftrace)
|
||||||
|
|
||||||
for (i = 0; i < perf_thread_map__nr(ftrace->evlist->core.threads); i++) {
|
for (i = 0; i < perf_thread_map__nr(ftrace->evlist->core.threads); i++) {
|
||||||
scnprintf(buf, sizeof(buf), "%d",
|
scnprintf(buf, sizeof(buf), "%d",
|
||||||
ftrace->evlist->core.threads->map[i]);
|
perf_thread_map__pid(ftrace->evlist->core.threads, i));
|
||||||
if (append_tracing_file("set_ftrace_pid", buf) < 0)
|
if (append_tracing_file("set_ftrace_pid", buf) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ void perf_data__close_dir(struct perf_data *data)
|
||||||
int perf_data__create_dir(struct perf_data *data, int nr)
|
int perf_data__create_dir(struct perf_data *data, int nr)
|
||||||
{
|
{
|
||||||
struct perf_data_file *files = NULL;
|
struct perf_data_file *files = NULL;
|
||||||
int i, ret = -1;
|
int i, ret;
|
||||||
|
|
||||||
if (WARN_ON(!data->is_dir))
|
if (WARN_ON(!data->is_dir))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -51,7 +51,8 @@ int perf_data__create_dir(struct perf_data *data, int nr)
|
||||||
for (i = 0; i < nr; i++) {
|
for (i = 0; i < nr; i++) {
|
||||||
struct perf_data_file *file = &files[i];
|
struct perf_data_file *file = &files[i];
|
||||||
|
|
||||||
if (asprintf(&file->path, "%s/data.%d", data->path, i) < 0)
|
ret = asprintf(&file->path, "%s/data.%d", data->path, i);
|
||||||
|
if (ret < 0)
|
||||||
goto out_err;
|
goto out_err;
|
||||||
|
|
||||||
ret = open(file->path, O_RDWR|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR);
|
ret = open(file->path, O_RDWR|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user