6.12.5-rc1 review
Subsystems (5)
Greg Kroah-Hartman
maintainerPATCH 381/466 thermal/drivers/qcom/tsens-v1: Add support for MSM8937 tsens
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Barnabás Czémán <[email protected]>
[ Upstream commit e2ffb6c3a40ee714160e35e61f0a984028b5d550 ]
Add support for tsens v1.4 block what can be found in MSM8937 and MSM8917.
--- drivers/thermal/qcom/tsens-v1.c | 21 ++++++++++++++------- drivers/thermal/qcom/tsens.c | 3 +++ drivers/thermal/qcom/tsens.h | 2 +- 3 files changed, 18 insertions(+), 8 deletions(-)
drivers/thermal/qcom/tsens-v1.c +14 -7
@@ -162,28 +162,35 @@ struct tsens_plat_data data_tsens_v1 = { .fields = tsens_v1_regfields, }; -static const struct tsens_ops ops_8956 = { - .init = init_8956, +static const struct tsens_ops ops_common = { + .init = init_common, .calibrate = tsens_calibrate_common, .get_temp = get_temp_tsens_valid, }; -struct tsens_plat_data data_8956 = { +struct tsens_plat_data data_8937 = { .num_sensors =11 , - .ops = &ops_8956, + .ops = &ops_common, .feat = &tsens_v1_feat, .fields = tsens_v1_regfields, }; -static const struct tsens_ops ops_8976 = { - .init = init_common, +static const struct tsens_ops ops_8956 = { + .init = init_8956, .calibrate = tsens_calibrate_common, .get_temp = get_temp_tsens_valid, }; +struct tsens_plat_data data_8956 = { + .num_sensors =11 , + .ops = &ops_8956, + .feat = &tsens_v1_feat, + .fields = tsens_v1_regfields, +}; +struct tsens_plat_data data_8976 = { .num_sensors =11 , - .ops = &ops_8976, + .ops = &ops_common, .feat = &tsens_v1_feat, .fields = tsens_v1_regfields, };
drivers/thermal/qcom/tsens.c +3 -0
@@ -1119,6 +1119,9 @@ static const struct of_device_id tsens_table[] = { }, { .compatible = "qcom,msm8916-tsens", .data = &data_8916, + }, { + .compatible = "qcom,msm8937-tsens", + .data = &data_8937, }, { .compatible = "qcom,msm8939-tsens", .data = &data_8939,
drivers/thermal/qcom/tsens.h +1 -1
@@ -647,7 +647,7 @@ extern struct tsens_plat_data data_8960;extern struct tsens_plat_data data_8226, data_8909, data_8916, data_8939, data_8974, data_9607;/* TSENS v1 targets */ -extern struct tsens_plat_data data_tsens_v1, data_8976, data_8956; +extern struct tsens_plat_data data_tsens_v1, data_8937, data_8976, data_8956;/* TSENS v2 targets */ extern struct tsens_plat_data data_8996, data_ipq8074, data_tsens_v2;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 382/466 nvdimm: rectify the illogical code within nd_dax_probe()
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yi Yang <[email protected]>
[ Upstream commit b61352101470f8b68c98af674e187cfaa7c43504 ]
When nd_dax is NULL, nd_pfn is consequently NULL as well. Nevertheless, it is inadvisable to perform pointer arithmetic or address-taking on a NULL pointer.
Introduce the nd_dax_devinit() function to enhance the code's logic and improve its readability.
--- drivers/nvdimm/dax_devs.c | 4 ++-- drivers/nvdimm/nd.h | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-)
drivers/nvdimm/dax_devs.c +2 -2
@@ -106,12 +106,12 @@ int nd_dax_probe(struct device *dev, struct nd_namespace_common *ndns)nvdimm_bus_lock (&ndns->dev); nd_dax =nd_dax_alloc (nd_region); - nd_pfn = &nd_dax->nd_pfn; - dax_dev =nd_pfn_devinit (nd_pfn, ndns); + dax_dev =nd_dax_devinit (nd_dax, ndns);nvdimm_bus_unlock (&ndns->dev);if (!dax_dev)return -ENOMEM ; pfn_sb =devm_kmalloc (dev,sizeof (*pfn_sb),GFP_KERNEL ); + nd_pfn = &nd_dax->nd_pfn; nd_pfn->pfn_sb = pfn_sb; rc =nd_pfn_validate (nd_pfn,DAX_SIG );dev_dbg (dev,"dax: %s\n" , rc ==0 ?dev_name (dax_dev) :"<none>" );
drivers/nvdimm/nd.h +7 -0
@@ -600,6 +600,13 @@ struct nd_dax *to_nd_dax(struct device *dev);int nd_dax_probe (struct device *dev,struct nd_namespace_common *ndns);bool is_nd_dax (const struct device *dev);struct device *nd_dax_create (struct nd_region *nd_region); +static inline struct device *nd_dax_devinit (struct nd_dax *nd_dax, +struct nd_namespace_common *ndns) +{ +if (!nd_dax) +return NULL ; +return nd_pfn_devinit (&nd_dax->nd_pfn, ndns); +}#else static inline int nd_dax_probe (struct device *dev,struct nd_namespace_common *ndns)
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 383/466 smb: client: memcpy() with surrounding object base address
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kees Cook <[email protected]>
[ Upstream commit f69b0187f8745a7a9584f6b13f5e792594b88b2e ]
Like commit f1f047bd7ce0 ("smb: client: Fix -Wstringop-overflow issues"), adjust the memcpy() destination address to be based off the surrounding object rather than based off the 4-byte "Protocol" member. This avoids a build-time warning when compiling under CONFIG_FORTIFY_SOURCE with GCC 15:
In function 'fortify_memcpy_chk',
inlined from 'CIFSSMBSetPathInfo' at ../fs/smb/client/cifssmb.c:5358:2:../include/linux/fortify-string.h:571:25: error: call to '__write_overflow_field' declared with attribute warning: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror=attribute-warning]
571 | __write_overflow_field(p_size_field, size);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~--- fs/smb/client/cifssmb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/smb/client/cifssmb.c +1 -1
@@ -5406,7 +5406,7 @@ CIFSSMBSetPathInfo(const unsigned int xid, struct cifs_tcon *tcon, param_offset = offsetof(struct smb_com_transaction2_spi_req , InformationLevel) -4 ; offset = param_offset + params; - data_offset = (char *) (&pSMB->hdr.Protocol) + offset; + data_offset = (char *)pSMB + offsetof(typeof(*pSMB), hdr.Protocol) + offset; pSMB->ParameterOffset =cpu_to_le16 (param_offset); pSMB->DataOffset =cpu_to_le16 (offset); pSMB->SetupCount =1 ;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 384/466 tracing: Fix function name for trampoline
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tatsuya S <[email protected]>
[ Upstream commit 6ce5a6f0a07d37cc377df08a8d8a9c283420f323 ]
The issue that unrelated function name is shown on stack trace like following even though it should be trampoline code address is caused by the creation of trampoline code in the area where .init.text section of module was freed after module is loaded.
bash-1344 [002] ..... 43.644608: <stack trace>
=> (MODULE INIT FUNCTION)
=> vfs_write
=> ksys_write
=> do_syscall_64
=> entry_SYSCALL_64_after_hwframe
To resolve this, when function address of stack trace entry is in trampoline, output without looking up symbol name.
--- kernel/trace/trace.c | 33 +++++++++++++++++++++++++-------- kernel/trace/trace.h | 7 +++++++ kernel/trace/trace_output.c | 4 ++++ 3 files changed, 36 insertions(+), 8 deletions(-)
kernel/trace/trace.c +25 -8
@@ -988,7 +988,8 @@ static inline void trace_access_lock_init(void)#endif #ifdef CONFIG_STACKTRACE -static void __ftrace_trace_stack (struct trace_buffer *buffer, +static void __ftrace_trace_stack (struct trace_array *tr, +struct trace_buffer *buffer,unsigned int trace_ctx,int skip,struct pt_regs *regs); static inline void ftrace_trace_stack(struct trace_array *tr,
@@ -997,7 +998,8 @@ static inline void ftrace_trace_stack(struct trace_array *tr, int skip, struct pt_regs *regs);#else -static inline void __ftrace_trace_stack (struct trace_buffer *buffer, +static inline void __ftrace_trace_stack (struct trace_array *tr, +struct trace_buffer *buffer,unsigned int trace_ctx,int skip,struct pt_regs *regs) {
@@ -2947,7 +2949,8 @@ struct ftrace_stacks { static DEFINE_PER_CPU(struct ftrace_stacks, ftrace_stacks); static DEFINE_PER_CPU(int, ftrace_stack_reserve); -static void __ftrace_trace_stack (struct trace_buffer *buffer, +static void __ftrace_trace_stack (struct trace_array *tr, +struct trace_buffer *buffer,unsigned int trace_ctx,int skip,struct pt_regs *regs) {
@@ -2994,6 +2997,20 @@ static void __ftrace_trace_stack(struct trace_buffer *buffer, nr_entries =stack_trace_save (fstack->calls, size, skip); } +#ifdef CONFIG_DYNAMIC_FTRACE +/* Mark entry of stack trace as trampoline code */ +if (tr->ops && tr->ops->trampoline) { +unsigned long tramp_start = tr->ops->trampoline; +unsigned long tramp_end = tramp_start + tr->ops->trampoline_size; +unsigned long *calls = fstack->calls; + +for (int i =0 ; i < nr_entries; i++) { +if (calls[i] >= tramp_start && calls[i] < tramp_end) + calls[i] =FTRACE_TRAMPOLINE_MARKER ; + } + } +#endif + event =__trace_buffer_lock_reserve (buffer,TRACE_STACK ,struct_size (entry, caller, nr_entries), trace_ctx);
@@ -3024,7 +3041,7 @@ static inline void ftrace_trace_stack(struct trace_array *tr,if (!(tr->trace_flags &TRACE_ITER_STACKTRACE ))return ; -__ftrace_trace_stack (buffer, trace_ctx, skip, regs); +__ftrace_trace_stack (tr, buffer, trace_ctx, skip, regs); } void __trace_stack(struct trace_array *tr, unsigned int trace_ctx,
@@ -3033,7 +3050,7 @@ void __trace_stack(struct trace_array *tr, unsigned int trace_ctx,struct trace_buffer *buffer = tr->array_buffer.buffer;if (rcu_is_watching ()) { -__ftrace_trace_stack (buffer, trace_ctx, skip,NULL ); +__ftrace_trace_stack (tr, buffer, trace_ctx, skip,NULL );return ; }
@@ -3050,7 +3067,7 @@ void __trace_stack(struct trace_array *tr, unsigned int trace_ctx,return ;ct_irq_enter_irqson (); -__ftrace_trace_stack (buffer, trace_ctx, skip,NULL ); +__ftrace_trace_stack (tr, buffer, trace_ctx, skip,NULL );ct_irq_exit_irqson (); }
@@ -3067,8 +3084,8 @@ void trace_dump_stack(int skip)/* Skip 1 to skip this function. */ skip++;#endif -__ftrace_trace_stack (printk_trace->array_buffer.buffer, -tracing_gen_ctx (), skip,NULL ); +__ftrace_trace_stack (printk_trace, printk_trace->array_buffer.buffer, +tracing_gen_ctx (), skip,NULL ); }EXPORT_SYMBOL_GPL (trace_dump_stack);
kernel/trace/trace.h +7 -0
@@ -2176,4 +2176,11 @@ static inline int rv_init_interface(void) }#endif +/* +* This is used only to distinguish +* function address from trampoline code. +* So this value has no meaning. +*/ +#define FTRACE_TRAMPOLINE_MARKER ((unsigned long) INT_MAX) +#endif /* _LINUX_KERNEL_TRACE_H */
kernel/trace/trace_output.c +4 -0
@@ -1246,6 +1246,10 @@ static enum print_line_t trace_stack_print(struct trace_iterator *iter,break ;trace_seq_puts (s," => " ); +if ((*p) ==FTRACE_TRAMPOLINE_MARKER ) { +trace_seq_puts (s,"[FTRACE TRAMPOLINE]\n" ); +continue ; + }seq_print_ip_sym (s, (*p) + delta, flags);trace_seq_putc (s,'\n' ); }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 385/466 tools/rtla: Enhance argument parsing in timerlat_load.py
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: furkanonder <[email protected]>
[ Upstream commit bd26818343dc02936a4f2f7b63368d5e1e1773c8 ]
The enhancements made to timerlat_load.py are aimed at improving the clarity of argument parsing.
Summary of Changes:
- The cpu argument is now specified as an integer type in the argument parser to enforce input validation, and the construction of affinity_mask has been simplified to directly use the integer value of args.cpu.
- The prio argument is similarly updated to be of integer type for consistency and validation, eliminating the need for the conversion of args.prio to an integer, as this is now handled by the argument parser.
--- tools/tracing/rtla/sample/timerlat_load.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)
tools/tracing/rtla/sample/timerlat_load.py +4 -5
@@ -25,13 +25,12 @@ import sys import os parser = argparse.ArgumentParser(description='user-space timerlat thread in Python') -parser.add_argument("cpu", help='CPU to run timerlat thread') -parser.add_argument("-p", "--prio", help='FIFO priority') - +parser.add_argument("cpu", type=int, help='CPU to run timerlat thread') +parser.add_argument("-p", "--prio", type=int, help='FIFO priority') args = parser.parse_args() try: - affinity_mask = { int(args.cpu) } + affinity_mask = {args.cpu} except: print("Invalid cpu: " + args.cpu) exit(1)
@@ -44,7 +43,7 @@ except: if (args.prio): try: - param = os.sched_param(int(args.prio)) + param = os.sched_param(args.prio) os.sched_setscheduler(0, os.SCHED_FIFO, param) except: print("Error setting priority")
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 386/466 verification/dot2: Improve dot parser robustness
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Gabriele Monaco <[email protected]>
[ Upstream commit 571f8b3f866a6d990a50fe5c89fe0ea78784d70b ]
This patch makes the dot parser used by dot2c and dot2k slightly more robust, namely:
* allows parsing files with the gv extension (GraphViz)
* correctly parses edges with any indentation
* used to work only with a single character (e.g. '\t')
Additionally it fixes a couple of warnings reported by pylint such as wrong indentation and comparison to False instead of not ...
--- tools/verification/dot2/automata.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-)
tools/verification/dot2/automata.py +9 -9
@@ -29,11 +29,11 @@ class Automata: def __get_model_name(self): basename = ntpath.basename(self.__dot_path) - if basename.endswith(".dot") == False: + if not basename.endswith(".dot") and not basename.endswith(".gv"): print("not a dot file") raise Exception("not a dot file: %s" % self.__dot_path) - model_name = basename[0:-4] + model_name = ntpath.splitext(basename)[0] if model_name.__len__() == 0: raise Exception("not a dot file: %s" % self.__dot_path)
@@ -68,9 +68,9 @@ class Automata: def __get_cursor_begin_events(self): cursor = 0 while self.__dot_lines[cursor].split()[0] != "{node": - cursor += 1 + cursor += 1 while self.__dot_lines[cursor].split()[0] == "{node": - cursor += 1 + cursor += 1 # skip initial state transition cursor += 1 return cursor
@@ -94,11 +94,11 @@ class Automata: initial_state = state[7:] else: states.append(state) - if self.__dot_lines[cursor].__contains__("doublecircle") == True: + if "doublecircle" in self.__dot_lines[cursor]: final_states.append(state) has_final_states = True - if self.__dot_lines[cursor].__contains__("ellipse") == True: + if "ellipse" in self.__dot_lines[cursor]: final_states.append(state) has_final_states = True
@@ -110,7 +110,7 @@ class Automata: # Insert the initial state at the bein og the states states.insert(0, initial_state) - if has_final_states == False: + if not has_final_states: final_states.append(initial_state) return states, initial_state, final_states
@@ -120,7 +120,7 @@ class Automata: cursor = self.__get_cursor_begin_events() events = [] - while self.__dot_lines[cursor][1] == '"': + while self.__dot_lines[cursor].lstrip()[0] == '"': # transitions have the format: # "all_fired" -> "both_fired" [ label = "disable_irq" ]; # ------------ event is here ------------^^^^^
@@ -161,7 +161,7 @@ class Automata: # and we are back! Let's fill the matrix cursor = self.__get_cursor_begin_events() - while self.__dot_lines[cursor][1] == '"': + while self.__dot_lines[cursor].lstrip()[0] == '"': if self.__dot_lines[cursor].split()[1] == "->": line = self.__dot_lines[cursor].split() origin_state = line[0].replace('"','').replace(',','_')
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 387/466 mailbox: pcc: Check before sending MCTP PCC response ACK
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adam Young <[email protected]>
[ Upstream commit 7f9e19f207be0c534d517d65e01417ba968cdd34 ]
Type 4 PCC channels have an option to send back a response to the platform when they are done processing the request. The flag to indicate whether or not to respond is inside the message body, and thus is not available to the pcc mailbox.
If the flag is not set, still set command completion bit after processing message.
In order to read the flag, this patch maps the shared buffer to virtual memory. To avoid duplication of mapping the shared buffer is then made available to be used by the driver that uses the mailbox.
--- drivers/mailbox/pcc.c | 61 +++++++++++++++++++++++++++++++++++++------ include/acpi/pcc.h | 7 +++++ 2 files changed, 60 insertions(+), 8 deletions(-)
drivers/mailbox/pcc.c +53 -8
@@ -269,6 +269,35 @@ static bool pcc_mbox_cmd_complete_check(struct pcc_chan_info *pchan)return !!val; } +static void check_and_ack (struct pcc_chan_info *pchan,struct mbox_chan *chan) +{ +struct acpi_pcct_ext_pcc_shared_memory pcc_hdr; + +if (pchan->type !=ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE ) +return ; +/* If the memory region has not been mapped, we cannot +* determine if we need to send the message, but we still +* need to set the cmd_update flag before returning. +*/ +if (pchan->chan.shmem ==NULL ) { +pcc_chan_reg_read_modify_write (&pchan->cmd_update); +return ; + } +memcpy_fromio (&pcc_hdr, pchan->chan.shmem, +sizeof (struct acpi_pcct_ext_pcc_shared_memory )); +/* +* The PCC slave subspace channel needs to set the command complete bit +* after processing message. If the PCC_ACK_FLAG is set, it should also +* ring the doorbell. +* +* The PCC master subspace channel clears chan_in_use to free channel. +*/ +if (le32_to_cpup (&pcc_hdr.flags) &PCC_ACK_FLAG_MASK ) +pcc_send_data (chan,NULL ); +else +pcc_chan_reg_read_modify_write (&pchan->cmd_update); +} +/** * pcc_mbox_irq - PCC mailbox interrupt handler * @irq: interrupt number
@@ -306,14 +335,7 @@ static irqreturn_t pcc_mbox_irq(int irq, void *p)mbox_chan_received_data (chan,NULL ); -/* -* The PCC slave subspace channel needs to set the command complete bit -* and ring doorbell after processing message. -* -* The PCC master subspace channel clears chan_in_use to free channel. -*/ -if (pchan->type ==ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE ) -pcc_send_data (chan,NULL ); +check_and_ack (pchan, chan); pchan->chan_in_use = false;return IRQ_HANDLED ;
@@ -365,14 +387,37 @@ EXPORT_SYMBOL_GPL(pcc_mbox_request_channel);void pcc_mbox_free_channel (struct pcc_mbox_chan *pchan) {struct mbox_chan *chan = pchan->mchan; +struct pcc_chan_info *pchan_info; +struct pcc_mbox_chan *pcc_mbox_chan;if (!chan || !chan->cl)return ; + pchan_info = chan->con_priv; + pcc_mbox_chan = &pchan_info->chan; +if (pcc_mbox_chan->shmem) { +iounmap (pcc_mbox_chan->shmem); + pcc_mbox_chan->shmem =NULL ; + }mbox_free_channel (chan); }EXPORT_SYMBOL_GPL (pcc_mbox_free_channel); +int pcc_mbox_ioremap (struct mbox_chan *chan) +{ +struct pcc_chan_info *pchan_info; +struct pcc_mbox_chan *pcc_mbox_chan; + +if (!chan || !chan->cl) +return -1 ; + pchan_info = chan->con_priv; + pcc_mbox_chan = &pchan_info->chan; + pcc_mbox_chan->shmem =ioremap (pcc_mbox_chan->shmem_base_addr, + pcc_mbox_chan->shmem_size); +return 0 ; +} +EXPORT_SYMBOL_GPL (pcc_mbox_ioremap); +/** * pcc_send_data - Called from Mailbox Controller code. Used * here only to ring the channel doorbell. The PCC client
include/acpi/pcc.h +7 -0
@@ -12,6 +12,7 @@struct pcc_mbox_chan {struct mbox_chan *mchan;u64 shmem_base_addr; +void __iomem *shmem;u64 shmem_size;u32 latency;u32 max_access_rate;
@@ -31,11 +32,13 @@ struct pcc_mbox_chan {#define PCC_CMD_COMPLETION_NOTIFY BIT(0)#define MAX_PCC_SUBSPACES 256 +#define PCC_ACK_FLAG_MASK 0x1#ifdef CONFIG_PCC extern struct pcc_mbox_chan *pcc_mbox_request_channel (struct mbox_client *cl,int subspace_id);extern void pcc_mbox_free_channel (struct pcc_mbox_chan *chan); +extern int pcc_mbox_ioremap (struct mbox_chan *chan);#else static inline struct pcc_mbox_chan *pcc_mbox_request_channel (struct mbox_client *cl,int subspace_id)
@@ -43,6 +46,10 @@ pcc_mbox_request_channel(struct mbox_client *cl, int subspace_id)return ERR_PTR (-ENODEV ); }static inline void pcc_mbox_free_channel (struct pcc_mbox_chan *chan) { } +static inline int pcc_mbox_ioremap (struct mbox_chan *chan) +{ +return 0 ; +};#endif #endif /* _PCC_H */
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 388/466 f2fs: fix f2fs_bug_on when uninstalling filesystem call f2fs_evict_inode.
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qi Han <[email protected]>
[ Upstream commit d5c367ef8287fb4d235c46a2f8c8d68715f3a0ca ]
creating a large files during checkpoint disable until it runs out of space and then delete it, then remount to enable checkpoint again, and then unmount the filesystem triggers the f2fs_bug_on as below:
------------[ cut here ]------------ kernel BUG at fs/f2fs/inode.c:896! CPU: 2 UID: 0 PID: 1286 Comm: umount Not tainted 6.11.0-rc7-dirty #360 Oops: invalid opcode: 0000 [#1] PREEMPT SMP NOPTI RIP: 0010:f2fs_evict_inode+0x58c/0x610 Call Trace: __die_body+0x15/0x60 die+0x33/0x50 do_trap+0x10a/0x120 f2fs_evict_inode+0x58c/0x610 do_error_trap+0x60/0x80 f2fs_evict_inode+0x58c/0x610 exc_invalid_op+0x53/0x60 f2fs_evict_inode+0x58c/0x610 asm_exc_invalid_op+0x16/0x20 f2fs_evict_inode+0x58c/0x610 evict+0x101/0x260 dispose_list+0x30/0x50 evict_inodes+0x140/0x190 generic_shutdown_super+0x2f/0x150 kill_block_super+0x11/0x40 kill_f2fs_super+0x7d/0x140 deactivate_locked_super+0x2a/0x70 cleanup_mnt+0xb3/0x140 task_work_run+0x61/0x90
The root cause is: creating large files during disable checkpoint period results in not enough free segments, so when writing back root inode will failed in f2fs_enable_checkpoint. When umount the file system after enabling checkpoint, the root inode is dirty in f2fs_evict_inode function, which triggers BUG_ON. The steps to reproduce are as follows:
dd if=/dev/zero of=f2fs.img bs=1M count=55
mount f2fs.img f2fs_dir -o checkpoint=disable:10%
dd if=/dev/zero of=big bs=1M count=50
sync
rm big
mount -o remount,checkpoint=enable f2fs_dir
umount f2fs_dir
Let's redirty inode when there is not free segments during checkpoint is disable.
--- fs/f2fs/inode.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
fs/f2fs/inode.c +3 -1
@@ -775,8 +775,10 @@ int f2fs_write_inode(struct inode *inode, struct writeback_control *wbc) !is_inode_flag_set(inode, FI_DIRTY_INODE))return 0 ; -if (!f2fs_is_checkpoint_ready (sbi)) +if (!f2fs_is_checkpoint_ready (sbi)) { +f2fs_mark_inode_dirty_sync (inode, true);return -ENOSPC ; + }/* * We need to balance fs here to prevent from producing dirty node pages
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 389/466 KMSAN: uninit-value in inode_go_dump (5)
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qianqiang Liu <[email protected]>
[ Upstream commit f9417fcfca3c5e30a0b961e7250fab92cfa5d123 ]
When mounting of a corrupted disk image fails, the error message printed can reference uninitialized inode fields. To prevent that from happening, always initialize those fields.
--- fs/gfs2/super.c | 2 ++ 1 file changed, 2 insertions(+)
fs/gfs2/super.c +2 -0
@@ -1537,11 +1537,13 @@ static struct inode *gfs2_alloc_inode(struct super_block *sb)if (!ip)return NULL ; ip->i_no_addr =0 ; + ip->i_no_formal_ino =0 ; ip->i_flags =0 ; ip->i_gl =NULL ;gfs2_holder_mark_uninitialized (&ip->i_iopen_gh);memset (&ip->i_res,0 ,sizeof (ip->i_res));RB_CLEAR_NODE (&ip->i_res.rs_node); + ip->i_diskflags =0 ; ip->i_rahead =0 ;return &ip->i_inode; }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 390/466 i3c: mipi-i3c-hci: Mask ring interrupts before ring stop request
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jarkko Nikula <[email protected]>
[ Upstream commit 6ca2738174e4ee44edb2ab2d86ce74f015a0cc32 ]
Bus cleanup path in DMA mode may trigger a RING_OP_STAT interrupt when the ring is being stopped. Depending on timing between ring stop request completion, interrupt handler removal and code execution this may lead to a NULL pointer dereference in hci_dma_irq_handler() if it gets to run after the io_data pointer is set to NULL in hci_dma_cleanup().
Prevent this my masking the ring interrupts before ring stop request.
--- drivers/i3c/master/mipi-i3c-hci/dma.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/i3c/master/mipi-i3c-hci/dma.c +1 -1
@@ -159,10 +159,10 @@ static void hci_dma_cleanup(struct i3c_hci *hci)for (i =0 ; i < rings->total; i++) { rh = &rings->headers[i]; +rh_reg_write (INTR_SIGNAL_ENABLE ,0 );rh_reg_write (RING_CONTROL ,0 );rh_reg_write (CR_SETUP ,0 );rh_reg_write (IBI_SETUP ,0 ); -rh_reg_write (INTR_SIGNAL_ENABLE ,0 );if (rh->xfer) dma_free_coherent(&hci->master.dev,
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 391/466 PCI: qcom: Add support for IPQ9574
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: devi priya <[email protected]>
[ Upstream commit a63b74f2e35be3829f256922037ae5cee6bb844a ]
Add the new IPQ9574 platform which is based on the Qcom IP rev. 1.27.0 and Synopsys IP rev. 5.80a.
The platform itself has four PCIe Gen3 controllers: two single-lane and two dual-lane, all are based on Synopsys IP rev. 5.70a. As such, reuse all the members of 'ops_2_9_0'.
--- drivers/pci/controller/dwc/pcie-qcom.c | 1 + 1 file changed, 1 insertion(+)
drivers/pci/controller/dwc/pcie-qcom.c +1 -0
@@ -1830,6 +1830,7 @@ static const struct of_device_id qcom_pcie_match[] = { { .compatible = "qcom,pcie-ipq8064-v2", .data = &cfg_2_1_0 }, { .compatible = "qcom,pcie-ipq8074", .data = &cfg_2_3_3 }, { .compatible = "qcom,pcie-ipq8074-gen3", .data = &cfg_2_9_0 }, + { .compatible = "qcom,pcie-ipq9574", .data = &cfg_2_9_0 }, { .compatible = "qcom,pcie-msm8996", .data = &cfg_2_3_2 }, { .compatible = "qcom,pcie-qcs404", .data = &cfg_2_4_0 }, { .compatible = "qcom,pcie-sa8540p", .data = &cfg_sc8280xp },
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 392/466 PCI: vmd: Add DID 8086:B06F and 8086:B60B for Intel client SKUs
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nirmal Patel <[email protected]>
[ Upstream commit b727484cace4be22be9321cc0bc9487648ba447b ]
Add support for this VMD device which supports the bus restriction mode. The feature that turns off vector 0 for MSI-X remapping is also enabled.
--- drivers/pci/controller/vmd.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/pci/controller/vmd.c +4 -0
@@ -1100,6 +1100,10 @@ static const struct pci_device_id vmd_ids[] = { .driver_data = VMD_FEATS_CLIENT,}, {PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_VMD_9A0B), .driver_data = VMD_FEATS_CLIENT,}, + {PCI_VDEVICE(INTEL, 0xb60b), + .driver_data = VMD_FEATS_CLIENT,}, + {PCI_VDEVICE(INTEL, 0xb06f), + .driver_data = VMD_FEATS_CLIENT,}, {0,} };MODULE_DEVICE_TABLE (pci, vmd_ids);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 393/466 PCI: vmd: Set devices to D0 before enabling PM L1 Substates
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jian-Hong Pan <[email protected]>
[ Upstream commit d66041063192497a4a97d21dbf86b79a03a7f4fb ]
The remapped PCIe Root Port and the child device have PM L1 Substates capability, but they are disabled originally.
Here is a failed example on ASUS B1400CEAE:
Capabilities: [900 v1] L1 PM Substates
L1SubCap: PCI-PM_L1.2+ PCI-PM_L1.1- ASPM_L1.2+ ASPM_L1.1- L1_PM_Substates+
PortCommonModeRestoreTime=32us PortTPowerOnTime=10us
L1SubCtl1: PCI-PM_L1.2- PCI-PM_L1.1- ASPM_L1.2+ ASPM_L1.1-
T_CommonMode=0us LTR1.2_Threshold=101376ns
L1SubCtl2: T_PwrOn=50usEnable PCI-PM L1 PM Substates for devices below VMD while they are in D0 (see PCIe r6.0, sec 5.5.4).
--- drivers/pci/controller/vmd.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)
drivers/pci/controller/vmd.c +9 -4
@@ -740,11 +740,9 @@ static int vmd_pm_enable_quirk(struct pci_dev *pdev, void *userdata)if (!(features &VMD_FEAT_BIOS_PM_QUIRK ))return 0 ; -pci_enable_link_state_locked (pdev,PCIE_LINK_STATE_ALL ); - pos =pci_find_ext_capability (pdev,PCI_EXT_CAP_ID_LTR );if (!pos) -return 0 ; + goto out_state_change;/* * Skip if the max snoop LTR is non-zero, indicating BIOS has set it
@@ -752,7 +750,7 @@ static int vmd_pm_enable_quirk(struct pci_dev *pdev, void *userdata)*/ pci_read_config_dword (pdev, pos +PCI_LTR_MAX_SNOOP_LAT , <r_reg);if (!!(ltr_reg & (PCI_LTR_VALUE_MASK |PCI_LTR_SCALE_MASK ))) -return 0 ; + goto out_state_change;/* * Set the default values to the maximum required by the platform to
@@ -764,6 +762,13 @@ static int vmd_pm_enable_quirk(struct pci_dev *pdev, void *userdata)pci_write_config_dword (pdev, pos +PCI_LTR_MAX_SNOOP_LAT , ltr_reg);pci_info (pdev,"VMD: Default LTR value set by driver\n" ); +out_state_change: +/* +* Ensure devices are in D0 before enabling PCI-PM L1 PM Substates, per +* PCIe r6.0, sec 5.5.4. +*/ +pci_set_power_state_locked (pdev,PCI_D0 ); +pci_enable_link_state_locked (pdev,PCIE_LINK_STATE_ALL );return 0 ; }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 394/466 PCI: Detect and trust built-in Thunderbolt chips
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Esther Shimanovich <[email protected]>
[ Upstream commit 3b96b895127b7c0aed63d82c974b46340e8466c1 ]
Some computers with CPUs that lack Thunderbolt features use discrete Thunderbolt chips to add Thunderbolt functionality. These Thunderbolt chips are located within the chassis; between the Root Port labeled ExternalFacingPort and the USB-C port.
These Thunderbolt PCIe devices should be labeled as fixed and trusted, as they are built into the computer. Otherwise, security policies that rely on those flags may have unintended results, such as preventing USB-C ports from enumerating.
Detect the above scenario through the process of elimination.
1) Integrated Thunderbolt host controllers already have Thunderbolt implemented, so anything outside their external facing Root Port is removable and untrusted.
Detect them using the following properties:
- Most integrated host controllers have the "usb4-host-interface" ACPI property, as described here:
- Integrated Thunderbolt PCIe Root Ports before Alder Lake do not have the "usb4-host-interface" ACPI property. Identify those by their PCI IDs instead.
2) If a Root Port does not have integrated Thunderbolt capabilities, but has the "ExternalFacingPort" ACPI property, that means the manufacturer has opted to use a discrete Thunderbolt host controller that is built into the computer.
This host controller can be identified by virtue of being located directly below an external-facing Root Port that lacks integrated Thunderbolt. Label it as trusted and fixed.
Everything downstream from it is untrusted and removable.
The "ExternalFacingPort" ACPI property is described here:
https://learn.microsoft.com/en-us/windows-hardware/drivers/pci/dsd-for-pcie-root-ports#identifying-externally-exposed-pcie-root-ports
--- arch/x86/pci/acpi.c | 119 ++++++++++++++++++++++++++++++++++++++++++++ drivers/pci/probe.c | 30 ++++++++--- include/linux/pci.h | 6 +++ 3 files changed, 148 insertions(+), 7 deletions(-)
arch/x86/pci/acpi.c +119 -0
@@ -250,6 +250,125 @@ void __init pci_acpi_crs_quirks(void)pr_info ("Please notify [email protected] so future kernels can do this automatically\n" ); } +/* +* Check if pdev is part of a PCIe switch that is directly below the +* specified bridge. +*/ +static bool pcie_switch_directly_under (struct pci_dev *bridge, +struct pci_dev *pdev) +{ +struct pci_dev *parent =pci_upstream_bridge (pdev); + +/* If the device doesn't have a parent, it's not under anything */ +if (!parent) +return false; + +/* +* If the device has a PCIe type, check if it is below the +* corresponding PCIe switch components (if applicable). Then check +* if its upstream port is directly beneath the specified bridge. +*/ +switch (pci_pcie_type (pdev)) { +case PCI_EXP_TYPE_UPSTREAM : +return parent == bridge; + +case PCI_EXP_TYPE_DOWNSTREAM : +if (pci_pcie_type (parent) !=PCI_EXP_TYPE_UPSTREAM ) +return false; + parent =pci_upstream_bridge (parent); +return parent == bridge; + +case PCI_EXP_TYPE_ENDPOINT : +if (pci_pcie_type (parent) !=PCI_EXP_TYPE_DOWNSTREAM ) +return false; + parent =pci_upstream_bridge (parent); +if (!parent ||pci_pcie_type (parent) !=PCI_EXP_TYPE_UPSTREAM ) +return false; + parent =pci_upstream_bridge (parent); +return parent == bridge; + } + +return false; +} + +static bool pcie_has_usb4_host_interface (struct pci_dev *pdev) +{ +struct fwnode_handle *fwnode; + +/* +* For USB4, the tunneled PCIe Root or Downstream Ports are marked +* with the "usb4-host-interface" ACPI property, so we look for +* that first. This should cover most cases. +*/ + fwnode =fwnode_find_reference (dev_fwnode (&pdev->dev), +"usb4-host-interface" ,0 ); +if (!IS_ERR (fwnode)) { +fwnode_handle_put (fwnode); +return true; + } + +/* +* Any integrated Thunderbolt 3/4 PCIe Root Ports from Intel +* before Alder Lake do not have the "usb4-host-interface" +* property so we use their PCI IDs instead. All these are +* tunneled. This list is not expected to grow. +*/ +if (pdev->vendor ==PCI_VENDOR_ID_INTEL ) { +switch (pdev->device) { +/* Ice Lake Thunderbolt 3 PCIe Root Ports */ +case 0x8a1d : +case 0x8a1f : +case 0x8a21 : +case 0x8a23 : +/* Tiger Lake-LP Thunderbolt 4 PCIe Root Ports */ +case 0x9a23 : +case 0x9a25 : +case 0x9a27 : +case 0x9a29 : +/* Tiger Lake-H Thunderbolt 4 PCIe Root Ports */ +case 0x9a2b : +case 0x9a2d : +case 0x9a2f : +case 0x9a31 : +return true; + } + } + +return false; +} + +bool arch_pci_dev_is_removable (struct pci_dev *pdev) +{ +struct pci_dev *parent, *root; + +/* pdev without a parent or Root Port is never tunneled */ + parent =pci_upstream_bridge (pdev); +if (!parent) +return false; + root =pcie_find_root_port (pdev); +if (!root) +return false; + +/* Internal PCIe devices are not tunneled */ +if (!root->external_facing) +return false; + +/* Anything directly behind a "usb4-host-interface" is tunneled */ +if (pcie_has_usb4_host_interface (parent)) +return true; + +/* +* Check if this is a discrete Thunderbolt/USB4 controller that is +* directly behind the non-USB4 PCIe Root Port marked as +* "ExternalFacingPort". Those are not behind a PCIe tunnel. +*/ +if (pcie_switch_directly_under (root, pdev)) +return false; + +/* PCIe devices after the discrete chip are tunneled */ +return true; +} +#ifdef CONFIG_PCI_MMCONFIG static int check_segment (u16 seg,struct device *dev,char *estr) {
drivers/pci/probe.c +23 -7
@@ -1633,23 +1633,33 @@ static void set_pcie_thunderbolt(struct pci_dev *dev)static void set_pcie_untrusted (struct pci_dev *dev) { -struct pci_dev *parent; +struct pci_dev *parent =pci_upstream_bridge (dev); +if (!parent) +return ;/* -* If the upstream bridge is untrusted we treat this device +* If the upstream bridge is untrusted we treat this device as * untrusted as well. */ - parent =pci_upstream_bridge (dev); -if (parent && (parent->untrusted || parent->external_facing)) +if (parent->untrusted) { + dev->untrusted = true; +return ; + } + +if (arch_pci_dev_is_removable (dev)) { +pci_dbg (dev,"marking as untrusted\n" ); dev->untrusted = true; + } }static void pci_set_removable (struct pci_dev *dev) {struct pci_dev *parent =pci_upstream_bridge (dev); +if (!parent) +return ;/* -* We (only) consider everything downstream from an external_facing +* We (only) consider everything tunneled below an external_facing * device to be removable by the user. We're mainly concerned with * consumer platforms with user accessible thunderbolt ports that are * vulnerable to DMA attacks, and we expect those ports to be marked by
@@ -1659,9 +1669,15 @@ static void pci_set_removable(struct pci_dev *dev)* accessible to user / may not be removed by end user, and thus not * exposed as "removable" to userspace. */ -if (parent && - (parent->external_facing ||dev_is_removable (&parent->dev))) +if (dev_is_removable (&parent->dev)) { +dev_set_removable (&dev->dev,DEVICE_REMOVABLE ); +return ; + } + +if (arch_pci_dev_is_removable (dev)) { +pci_dbg (dev,"marking as removable\n" );dev_set_removable (&dev->dev,DEVICE_REMOVABLE ); + } }/**
include/linux/pci.h +6 -0
@@ -2609,6 +2609,12 @@ pci_host_bridge_acpi_msi_domain(struct pci_bus *bus) { return NULL; }static inline bool pci_pr3_present (struct pci_dev *pdev) {return false; }#endif +#if defined(CONFIG_X86 ) && defined(CONFIG_ACPI ) +bool arch_pci_dev_is_removable (struct pci_dev *pdev); +#else +static inline bool arch_pci_dev_is_removable (struct pci_dev *pdev) {return false; } +#endif +#ifdef CONFIG_EEH static inline struct eeh_dev *pci_dev_to_eeh_dev (struct pci_dev *pdev) {
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 395/466 PCI: starfive: Enable controller runtime PM before probing host bridge
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mayank Rana <[email protected]>
[ Upstream commit 6168efbebace0db443185d4c6701ca8170a8788d ]
A PCI controller device, e.g., StarFive, is parent to PCI host bridge device. We must enable runtime PM of the controller before enabling runtime PM of the host bridge, which will happen in pci_host_probe(), to avoid this warning:
pcie-starfive 940000000.pcie: Enabling runtime PM for inactive device with active children
Fix this issue by enabling StarFive controller device's runtime PM before calling pci_host_probe() in plda_pcie_host_init().
--- drivers/pci/controller/plda/pcie-starfive.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
drivers/pci/controller/plda/pcie-starfive.c +7 -3
@@ -404,6 +404,9 @@ static int starfive_pcie_probe(struct platform_device *pdev)if (ret)return ret; +pm_runtime_enable (&pdev->dev); +pm_runtime_get_sync (&pdev->dev); + plda->host_ops = &sf_host_ops; plda->num_events =PLDA_MAX_EVENT_NUM ;/* mask doorbell event */
@@ -413,11 +416,12 @@ static int starfive_pcie_probe(struct platform_device *pdev) plda->events_bitmap <<=PLDA_NUM_DMA_EVENTS ; ret =plda_pcie_host_init (&pcie->plda, &starfive_pcie_ops, &stf_pcie_event); -if (ret) +if (ret) { +pm_runtime_put_sync (&pdev->dev); +pm_runtime_disable (&pdev->dev);return ret; + } -pm_runtime_enable (&pdev->dev); -pm_runtime_get_sync (&pdev->dev);platform_set_drvdata (pdev, pcie);return 0 ;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 396/466 PCI: Add reset_subordinate to reset hierarchy below bridge
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Keith Busch <[email protected]>
[ Upstream commit 2fa046449a82a7d0f6d9721dd83e348816038444 ]
The "bus" and "cxl_bus" reset methods reset a device by asserting Secondary Bus Reset on the bridge leading to the device. These only work if the device is the only device below the bridge.
Add a sysfs 'reset_subordinate' attribute on bridges that can assert Secondary Bus Reset regardless of how many devices are below the bridge.
This resets all the devices below a bridge in a single command, including the locking and config space save/restore that reset methods normally do.
This may be the only way to reset devices that don't support other reset methods (ACPI, FLR, PM reset, etc).
--- Documentation/ABI/testing/sysfs-bus-pci | 11 +++++++++++ drivers/pci/pci-sysfs.c | 26 +++++++++++++++++++++++++ drivers/pci/pci.c | 2 +- drivers/pci/pci.h | 1 + 4 files changed, 39 insertions(+), 1 deletion(-)
Documentation/ABI/testing/sysfs-bus-pci +11 -0
@@ -163,6 +163,17 @@ Description: will be present in sysfs. Writing 1 to this file will perform reset. +What: /sys/bus/pci/devices/.../reset_subordinate +Date: October 2024 +Contact: [email protected] +Description: + This is visible only for bridge devices. If you want to reset + all devices attached through the subordinate bus of a specific + bridge device, writing 1 to this will try to do it. This will + affect all devices attached to the system through this bridge + similiar to writing 1 to their individual "reset" file, so use + with caution. + What: /sys/bus/pci/devices/.../vpd Date: February 2008 Contact: Ben Hutchings <[email protected]>
drivers/pci/pci-sysfs.c +26 -0
@@ -521,6 +521,31 @@ static ssize_t bus_rescan_store(struct device *dev,static struct device_attribute dev_attr_bus_rescan =__ATTR (rescan,0200 ,NULL , bus_rescan_store); +static ssize_t reset_subordinate_store (struct device *dev, +struct device_attribute *attr, +const char *buf,size_t count) +{ +struct pci_dev *pdev =to_pci_dev (dev); +struct pci_bus *bus = pdev->subordinate; +unsigned long val; + +if (!capable (CAP_SYS_ADMIN )) +return -EPERM ; + +if (kstrtoul (buf,0 , &val) <0 ) +return -EINVAL ; + +if (val) { +int ret =__pci_reset_bus (bus); + +if (ret) +return ret; + } + +return count; +} +static DEVICE_ATTR_WO (reset_subordinate); +#if defined(CONFIG_PM ) && defined(CONFIG_ACPI ) static ssize_t d3cold_allowed_store(struct device *dev, struct device_attribute *attr,
@@ -625,6 +650,7 @@ static struct attribute *pci_dev_attrs[] = {static struct attribute *pci_bridge_attrs[] = { &dev_attr_subordinate_bus_number.attr, &dev_attr_secondary_bus_number.attr, + &dev_attr_reset_subordinate.attr,NULL , };
drivers/pci/pci.c +1 -1
@@ -5885,7 +5885,7 @@ EXPORT_SYMBOL_GPL(pci_probe_reset_bus);* * Same as above except return -EAGAIN if the bus cannot be locked */ -static int __pci_reset_bus (struct pci_bus *bus) +int __pci_reset_bus (struct pci_bus *bus) {int rc;
drivers/pci/pci.h +1 -0
@@ -104,6 +104,7 @@ bool pci_reset_supported(struct pci_dev *dev);void pci_init_reset_methods (struct pci_dev *dev);int pci_bridge_secondary_bus_reset (struct pci_dev *dev);int pci_bus_error_reset (struct pci_dev *dev); +int __pci_reset_bus (struct pci_bus *bus);struct pci_cap_saved_data {u16 cap_nr;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 397/466 PCI: Add ACS quirk for Wangxun FF5xxx NICs
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mengyuan Lou <[email protected]>
[ Upstream commit aa46a3736afcb7b0793766d22479b8b99fc1b322 ]
Wangxun FF5xxx NICs are similar to SFxxx, RP1000 and RP2000 NICs. They may be multi-function devices, but they do not advertise an ACS capability.
But the hardware does isolate FF5xxx functions as though it had an ACS capability and PCI_ACS_RR and PCI_ACS_CR were set in the ACS Control register, i.e., all peer-to-peer traffic is directed upstream instead of being routed internally.
Add ACS quirk for FF5xxx NICs in pci_quirk_wangxun_nic_acs() so the functions can be in independent IOMMU groups.
--- drivers/pci/quirks.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)
drivers/pci/quirks.c +9 -6
@@ -4996,18 +4996,21 @@ static int pci_quirk_brcm_acs(struct pci_dev *dev, u16 acs_flags) }/* -* Wangxun 10G/1G NICs have no ACS capability, and on multi-function -* devices, peer-to-peer transactions are not be used between the functions. -* So add an ACS quirk for below devices to isolate functions. +* Wangxun 40G/25G/10G/1G NICs have no ACS capability, but on +* multi-function devices, the hardware isolates the functions by +* directing all peer-to-peer traffic upstream as though PCI_ACS_RR and +* PCI_ACS_CR were set. * SFxxx 1G NICs(em). * RP1000/RP2000 10G NICs(sp). +* FF5xxx 40G/25G/10G NICs(aml). */ static int pci_quirk_wangxun_nic_acs (struct pci_dev *dev,u16 acs_flags) {switch (dev->device) { - case 0x0100 ... 0x010F: -case 0x1001 : -case 0x2001 : + case 0x0100 ... 0x010F: /* EM */ +case 0x1001 :case 0x2001 :/* SP */ +case 0x5010 :case 0x5025 :case 0x5040 :/* AML */ +case 0x5110 :case 0x5125 :case 0x5140 :/* AML */ return pci_acs_ctrl_enabled (acs_flags,PCI_ACS_SV |PCI_ACS_RR |PCI_ACS_CR |PCI_ACS_UF ); }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 398/466 remoteproc: qcom: pas: enable SAR2130P audio DSP support
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Baryshkov <[email protected]>
[ Upstream commit 009e288c989b3fe548a45c82da407d7bd00418a9 ]
Enable support for the Audio DSP on the Qualcomm SAR2130P platform, reusing the SM8350 resources.
--- drivers/remoteproc/qcom_q6v5_pas.c | 1 + 1 file changed, 1 insertion(+)
drivers/remoteproc/qcom_q6v5_pas.c +1 -0
@@ -1433,6 +1433,7 @@ static const struct of_device_id adsp_of_match[] = { { .compatible = "qcom,sa8775p-cdsp1-pas", .data = &sa8775p_cdsp1_resource}, { .compatible = "qcom,sa8775p-gpdsp0-pas", .data = &sa8775p_gpdsp0_resource}, { .compatible = "qcom,sa8775p-gpdsp1-pas", .data = &sa8775p_gpdsp1_resource}, + { .compatible = "qcom,sar2130p-adsp-pas", .data = &sm8350_adsp_resource}, { .compatible = "qcom,sc7180-adsp-pas", .data = &sm8250_adsp_resource}, { .compatible = "qcom,sc7180-mpss-pas", .data = &mpss_resource_init}, { .compatible = "qcom,sc7280-adsp-pas", .data = &sm8350_adsp_resource},
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 399/466 i3c: Use i3cdev->desc->info instead of calling i3c_device_get_info() to avoid deadlock
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Defa Li <[email protected]>
[ Upstream commit 6cf7b65f7029914dc0cd7db86fac9ee5159008c6 ]
A deadlock may happen since the i3c_master_register() acquires &i3cbus->lock twice. See the log below.
Use i3cdev->desc->info instead of calling i3c_device_info() to avoid acquiring the lock twice.
v2:
- Modified the title and commit message
============================================
WARNING: possible recursive locking detected
6.11.0-mainline
--------------------------------------------
init/1 is trying to acquire lock:f1ffff80a6a40dc0 (&i3cbus->lock){++++}-{3:3}, at: i3c_bus_normaluse_lock
but task is already holding lock:f1ffff80a6a40dc0 (&i3cbus->lock){++++}-{3:3}, at: i3c_master_register
other info that might help us debug this:
Possible unsafe locking scenario:
CPU0
---- lock(&i3cbus->lock);
lock(&i3cbus->lock);
*** DEADLOCK ***
May be due to missing lock nesting notation
2 locks held by init/1:
#0: fcffff809b6798f8 (&dev->mutex){....}-{3:3}, at: __driver_attach #1: f1ffff80a6a40dc0 (&i3cbus->lock){++++}-{3:3}, at: i3c_master_register
stack backtrace: CPU: 6 UID: 0 PID: 1 Comm: init Call trace: dump_backtrace+0xfc/0x17c show_stack+0x18/0x28 dump_stack_lvl+0x40/0xc0 dump_stack+0x18/0x24 print_deadlock_bug+0x388/0x390 __lock_acquire+0x18bc/0x32ec lock_acquire+0x134/0x2b0 down_read+0x50/0x19c i3c_bus_normaluse_lock+0x14/0x24 i3c_device_get_info+0x24/0x58 i3c_device_uevent+0x34/0xa4 dev_uevent+0x310/0x384 kobject_uevent_env+0x244/0x414 kobject_uevent+0x14/0x20 device_add+0x278/0x460 device_register+0x20/0x34 i3c_master_register_new_i3c_devs+0x78/0x154 i3c_master_register+0x6a0/0x6d4 mtk_i3c_master_probe+0x3b8/0x4d8 platform_probe+0xa0/0xe0 really_probe+0x114/0x454 __driver_probe_device+0xa0/0x15c driver_probe_device+0x3c/0x1ac __driver_attach+0xc4/0x1f0 bus_for_each_dev+0x104/0x160 driver_attach+0x24/0x34 bus_add_driver+0x14c/0x294 driver_register+0x68/0x104 __platform_driver_register+0x20/0x30 init_module+0x20/0xfe4 do_one_initcall+0x184/0x464 do_init_module+0x58/0x1ec load_module+0xefc/0x10c8 __arm64_sys_finit_module+0x238/0x33c invoke_syscall+0x58/0x10c el0_svc_common+0xa8/0xdc do_el0_svc+0x1c/0x28 el0_svc+0x50/0xac el0t_64_sync_handler+0x70/0xbc el0t_64_sync+0x1a8/0x1ac
--- drivers/i3c/master.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/i3c/master.c +2 -1
@@ -282,7 +282,8 @@ static int i3c_device_uevent(const struct device *dev, struct kobj_uevent_env *estruct i3c_device_info devinfo;u16 manuf, part, ext; -i3c_device_get_info (i3cdev, &devinfo); +if (i3cdev->desc) + devinfo = i3cdev->desc->info; manuf =I3C_PID_MANUF_ID (devinfo.pid); part =I3C_PID_PART_ID (devinfo.pid); ext =I3C_PID_EXTRA_INFO (devinfo.pid);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 400/466 f2fs: print message if fscorrupted was found in f2fs_new_node_page()
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chao Yu <[email protected]>
[ Upstream commit 81520c684ca67aea6a589461a3caebb9b11dcc90 ]
If fs corruption occurs in f2fs_new_node_page(), let's print more information about corrupted metadata into kernel log.
Meanwhile, it updates to record ERROR_INCONSISTENT_NAT instead of ERROR_INVALID_BLKADDR if blkaddr in nat entry is not NULL_ADDR which means nat bitmap and nat entry is inconsistent.
--- fs/f2fs/node.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
fs/f2fs/node.c +6 -1
@@ -1341,7 +1341,12 @@ struct page *f2fs_new_node_page(struct dnode_of_data *dn, unsigned int ofs) err = -EFSCORRUPTED ;dec_valid_node_count (sbi, dn->inode, !ofs);set_sbi_flag (sbi,SBI_NEED_FSCK ); -f2fs_handle_error (sbi,ERROR_INVALID_BLKADDR ); +f2fs_warn_ratelimited (sbi, +"f2fs_new_node_page: inconsistent nat entry, " +"ino:%u, nid:%u, blkaddr:%u, ver:%u, flag:%u" , + new_ni.ino, new_ni.nid, new_ni.blk_addr, + new_ni.version, new_ni.flag); +f2fs_handle_error (sbi,ERROR_INCONSISTENT_NAT ); goto fail; }#endif
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 401/466 f2fs: fix to shrink read extent node in batches
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chao Yu <[email protected]>
[ Upstream commit 3fc5d5a182f6a1f8bd4dc775feb54c369dd2c343 ]
We use rwlock to protect core structure data of extent tree during its shrink, however, if there is a huge number of extent nodes in extent tree, during shrink of extent tree, it may hold rwlock for a very long time, which may trigger kernel hang issue.
This patch fixes to shrink read extent node in batches, so that, critical region of the rwlock can be shrunk to avoid its extreme long time hold.
--- fs/f2fs/extent_cache.c | 69 +++++++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 28 deletions(-)
fs/f2fs/extent_cache.c +41 -28
@@ -346,21 +346,22 @@ static struct extent_tree *__grab_extent_tree(struct inode *inode, }static unsigned int __free_extent_tree (struct f2fs_sb_info *sbi, -struct extent_tree *et) +struct extent_tree *et,unsigned int nr_shrink) {struct rb_node *node, *next;struct extent_node *en; -unsigned int count =atomic_read (&et->node_cnt); +unsigned int count; node =rb_first_cached (&et->root); -while (node) { + +for (count =0 ; node && count < nr_shrink; count++) { next =rb_next (node); en = rb_entry(node, struct extent_node, rb_node);__release_extent_node (sbi, et, en); node = next; } -return count -atomic_read (&et->node_cnt); +return count; } static void __drop_largest_extent(struct extent_tree *et,
@@ -579,6 +580,30 @@ static struct extent_node *__insert_extent_tree(struct f2fs_sb_info *sbi,return en; } +static unsigned int __destroy_extent_node (struct inode *inode, +enum extent_type type) +{ +struct f2fs_sb_info *sbi =F2FS_I_SB (inode); +struct extent_tree *et =F2FS_I (inode)->extent_tree[type]; +unsigned int nr_shrink = type ==EX_READ ? +READ_EXTENT_CACHE_SHRINK_NUMBER : +AGE_EXTENT_CACHE_SHRINK_NUMBER ; +unsigned int node_cnt =0 ; + +if (!et || !atomic_read (&et->node_cnt)) +return 0 ; + +while (atomic_read (&et->node_cnt)) { +write_lock (&et->lock); + node_cnt +=__free_extent_tree (sbi, et, nr_shrink); +write_unlock (&et->lock); + } + +f2fs_bug_on (sbi,atomic_read (&et->node_cnt)); + +return node_cnt; +} +static void __update_extent_tree_range (struct inode *inode,struct extent_info *tei,enum extent_type type) {
@@ -717,9 +742,6 @@ static void __update_extent_tree_range(struct inode *inode, } } -if (is_inode_flag_set (inode,FI_NO_EXTENT )) -__free_extent_tree (sbi, et); -if (et->largest_updated) { et->largest_updated = false; updated = true;
@@ -737,6 +759,9 @@ static void __update_extent_tree_range(struct inode *inode, out_read_extent_cache:write_unlock (&et->lock); +if (is_inode_flag_set (inode,FI_NO_EXTENT )) +__destroy_extent_node (inode,EX_READ ); +if (updated)f2fs_mark_inode_dirty_sync (inode, true); }
@@ -899,10 +924,14 @@ static unsigned int __shrink_extent_tree(struct f2fs_sb_info *sbi, int nr_shrinklist_for_each_entry_safe (et, next, &eti->zombie_list, list) {if (atomic_read (&et->node_cnt)) {write_lock (&et->lock); - node_cnt +=__free_extent_tree (sbi, et); + node_cnt +=__free_extent_tree (sbi, et, + nr_shrink - node_cnt - tree_cnt);write_unlock (&et->lock); } -f2fs_bug_on (sbi,atomic_read (&et->node_cnt)); + +if (atomic_read (&et->node_cnt)) + goto unlock_out; +list_del_init (&et->list);radix_tree_delete (&eti->extent_tree_root, et->ino);kmem_cache_free (extent_tree_slab, et);
@@ -1041,23 +1070,6 @@ unsigned int f2fs_shrink_age_extent_tree(struct f2fs_sb_info *sbi, int nr_shrinkreturn __shrink_extent_tree (sbi, nr_shrink,EX_BLOCK_AGE ); } -static unsigned int __destroy_extent_node (struct inode *inode, -enum extent_type type) -{ -struct f2fs_sb_info *sbi =F2FS_I_SB (inode); -struct extent_tree *et =F2FS_I (inode)->extent_tree[type]; -unsigned int node_cnt =0 ; - -if (!et || !atomic_read (&et->node_cnt)) -return 0 ; - -write_lock (&et->lock); - node_cnt =__free_extent_tree (sbi, et); -write_unlock (&et->lock); - -return node_cnt; -} -void f2fs_destroy_extent_node (struct inode *inode) {__destroy_extent_node (inode,EX_READ );
@@ -1066,7 +1078,6 @@ void f2fs_destroy_extent_node(struct inode *inode)static void __drop_extent_tree (struct inode *inode,enum extent_type type) { -struct f2fs_sb_info *sbi =F2FS_I_SB (inode);struct extent_tree *et =F2FS_I (inode)->extent_tree[type];bool updated = false;
@@ -1074,7 +1085,6 @@ static void __drop_extent_tree(struct inode *inode, enum extent_type type)return ;write_lock (&et->lock); -__free_extent_tree (sbi, et);if (type ==EX_READ ) {set_inode_flag (inode,FI_NO_EXTENT );if (et->largest.len) {
@@ -1083,6 +1093,9 @@ static void __drop_extent_tree(struct inode *inode, enum extent_type type) } }write_unlock (&et->lock); + +__destroy_extent_node (inode, type); +if (updated)f2fs_mark_inode_dirty_sync (inode, true); }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 402/466 f2fs: add a sysfs node to limit max read extent count per-inode
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chao Yu <[email protected]>
[ Upstream commit 009a8241a8e5a14ea2dd0b8db42dbf283527dd44 ]
Quoted:
"at this time, there are still 1086911 extent nodes in this zombie extent tree that need to be cleaned up.
crash_arm64_sprd_v8.0.3++> extent_tree.node_cnt ffffff80896cc500
node_cnt = {
counter = 1086911 },
"
As reported by Xiuhong, there will be a huge number of extent nodes in extent tree, it may potentially cause:
- slab memory fragments
- extreme long time shrink on extent tree
- low mapping efficiency
Let's add a sysfs node to limit max read extent count for each inode, by default, value of this threshold is 10240, it can be updated according to user's requirement.
--- Documentation/ABI/testing/sysfs-fs-f2fs | 6 ++++++ fs/f2fs/extent_cache.c | 5 ++++- fs/f2fs/f2fs.h | 4 ++++ fs/f2fs/sysfs.c | 10 ++++++++++ 4 files changed, 24 insertions(+), 1 deletion(-)
Documentation/ABI/testing/sysfs-fs-f2fs +6 -0
@@ -822,3 +822,9 @@ Description: It controls the valid block ratio threshold not to trigger excessiv for zoned deivces. The initial value of it is 95(%). F2FS will stop the background GC thread from intiating GC for sections having valid blocks exceeding the ratio. + +What: /sys/fs/f2fs/<disk>/max_read_extent_count +Date: November 2024 +Contact: "Chao Yu" <[email protected]> +Description: It controls max read extent count for per-inode, the value of threshold + is 10240 by default.
fs/f2fs/extent_cache.c +4 -1
@@ -674,7 +674,9 @@ static void __update_extent_tree_range(struct inode *inode, }if (end < org_end && (type !=EX_READ || - org_end - end >=F2FS_MIN_EXTENT_LEN )) { + (org_end - end >=F2FS_MIN_EXTENT_LEN && +atomic_read (&et->node_cnt) < + sbi->max_read_extent_count))) {if (parts) { __set_extent_info(&ei, end, org_end - end,
@@ -1169,6 +1171,7 @@ void f2fs_init_extent_cache_info(struct f2fs_sb_info *sbi) sbi->hot_data_age_threshold =DEF_HOT_DATA_AGE_THRESHOLD ; sbi->warm_data_age_threshold =DEF_WARM_DATA_AGE_THRESHOLD ; sbi->last_age_weight =LAST_AGE_WEIGHT ; + sbi->max_read_extent_count =DEF_MAX_READ_EXTENT_COUNT ; }int __init f2fs_create_extent_cache (void )
fs/f2fs/f2fs.h +4 -0
@@ -634,6 +634,9 @@ enum {#define DEF_HOT_DATA_AGE_THRESHOLD 262144#define DEF_WARM_DATA_AGE_THRESHOLD 2621440 +/* default max read extent count per inode */ +#define DEF_MAX_READ_EXTENT_COUNT 10240 +/* extent cache type */ enum extent_type {EX_READ ,
@@ -1619,6 +1622,7 @@ struct f2fs_sb_info {/* for extent tree cache */ struct extent_tree_info extent_tree[NR_EXTENT_CACHES ];atomic64_t allocated_data_blocks;/* for block age extent_cache */ +unsigned int max_read_extent_count;/* max read extent count per inode */ /* The threshold used for hot and warm data seperation*/ unsigned int hot_data_age_threshold;
fs/f2fs/sysfs.c +10 -0
@@ -789,6 +789,13 @@ static ssize_t __sbi_store(struct f2fs_attr *a,return count; } +if (!strcmp (a->attr.name,"max_read_extent_count" )) { +if (t >UINT_MAX ) +return -EINVAL ; + *ui = (unsigned int )t; +return count; + } +if (!strcmp (a->attr.name,"ipu_policy" )) {if (t >=BIT (F2FS_IPU_MAX ))return -EINVAL ;
@@ -1054,6 +1061,8 @@ F2FS_SBI_GENERAL_RW_ATTR(revoked_atomic_block);F2FS_SBI_GENERAL_RW_ATTR (hot_data_age_threshold);F2FS_SBI_GENERAL_RW_ATTR (warm_data_age_threshold);F2FS_SBI_GENERAL_RW_ATTR (last_age_weight); +/* read extent cache */ +F2FS_SBI_GENERAL_RW_ATTR (max_read_extent_count);#ifdef CONFIG_BLK_DEV_ZONED F2FS_SBI_GENERAL_RO_ATTR (unusable_blocks_per_sec);F2FS_SBI_GENERAL_RW_ATTR (blkzone_alloc_policy);
@@ -1244,6 +1253,7 @@ static struct attribute *f2fs_attrs[] = {ATTR_LIST (hot_data_age_threshold),ATTR_LIST (warm_data_age_threshold),ATTR_LIST (last_age_weight), +ATTR_LIST (max_read_extent_count),NULL , };ATTRIBUTE_GROUPS (f2fs);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 403/466 ACPI: x86: Add skip i2c clients quirk for Acer Iconia One 8 A1-840
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
[ Upstream commit 82f250ed1a1dcde0ad2a1513f85af7f9514635e8 ]
The Acer Iconia One 8 A1-840 (not to be confused with the A1-840FHD which is a different model) ships with Android 4.4 as factory OS and has the usual broken DSDT issues for x86 Android tablets.
Add quirks to skip ACPI I2C client enumeration and disable ACPI battery/AC and ACPI GPIO event handlers.
Also add the "INT33F5" HID for the TI PMIC used on this tablet to the list of HIDs for which not to skip i2c_client instantiation, since we do want an ACPI instantiated i2c_client for the PMIC.
--- drivers/acpi/x86/utils.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
drivers/acpi/x86/utils.c +13 -0
@@ -308,6 +308,18 @@ static const struct dmi_system_id acpi_quirk_skip_dmi_ids[] = {ACPI_QUIRK_SKIP_ACPI_AC_AND_BATTERY | ACPI_QUIRK_SKIP_GPIO_EVENT_HANDLERS), }, + { +/* Acer Iconia One 8 A1-840 (non FHD version) */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Insyde" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"BayTrail" ), +/* Above strings are too generic also match BIOS date */ + DMI_MATCH(DMI_BIOS_DATE, "04/01/2014"), + }, + .driver_data = (void *)(ACPI_QUIRK_SKIP_I2C_CLIENTS | +ACPI_QUIRK_SKIP_ACPI_AC_AND_BATTERY | + ACPI_QUIRK_SKIP_GPIO_EVENT_HANDLERS), + }, { .matches = { DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
@@ -425,6 +437,7 @@ static const struct acpi_device_id i2c_acpi_known_good_ids[] = { { "10EC5640", 0 }, /* RealTek ALC5640 audio codec */ { "10EC5651", 0 }, /* RealTek ALC5651 audio codec */ { "INT33F4", 0 }, /* X-Powers AXP288 PMIC */ + { "INT33F5", 0 }, /* TI Dollar Cove PMIC */ { "INT33FD", 0 }, /* Intel Crystal Cove PMIC */ { "INT34D3", 0 }, /* Intel Whiskey Cove PMIC */ { "NPCE69A", 0 }, /* Asus Transformer keyboard dock */
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 404/466 ACPI: x86: Clean up Asus entries in acpi_quirk_skip_dmi_ids[]
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans de Goede <[email protected]>
[ Upstream commit bd8aa15848f5f21951cd0b0d01510b3ad1f777d4 ]
The Asus entries in the acpi_quirk_skip_dmi_ids[] table are the only entries without a comment which model they apply to. Add these comments.
The Asus TF103C entry also is in the wrong place for what is supposed to be an alphabetically sorted list. Move it up so that the list is properly sorted and add a comment that the list is alphabetically sorted.
--- drivers/acpi/x86/utils.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-)
drivers/acpi/x86/utils.c +10 -7
@@ -296,6 +296,7 @@ static const struct dmi_system_id acpi_quirk_skip_dmi_ids[] = {/* * 2. Devices which also have the skip i2c/serdev quirks and which * need the x86-android-tablets module to properly work. +* Sorted alphabetically. */ #if IS_ENABLED (CONFIG_X86_ANDROID_TABLETS ) {
@@ -321,6 +322,7 @@ static const struct dmi_system_id acpi_quirk_skip_dmi_ids[] = { ACPI_QUIRK_SKIP_GPIO_EVENT_HANDLERS), }, { +/* Asus ME176C tablet */ .matches = {DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"ASUSTeK COMPUTER INC." ), DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "ME176C"),
@@ -331,23 +333,24 @@ static const struct dmi_system_id acpi_quirk_skip_dmi_ids[] = { ACPI_QUIRK_SKIP_GPIO_EVENT_HANDLERS), }, { -/* Lenovo Yoga Book X90F/L */ +/* Asus TF103C transformer 2-in-1 */ .matches = { -DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"Intel Corporation" ), -DMI_EXACT_MATCH (DMI_PRODUCT_NAME ,"CHERRYVIEW D1 PLATFORM" ), - DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "YETI-11"), +DMI_MATCH (DMI_SYS_VENDOR ,"ASUSTeK COMPUTER INC." ), + DMI_MATCH(DMI_PRODUCT_NAME, "TF103C"), }, .driver_data = (void *)(ACPI_QUIRK_SKIP_I2C_CLIENTS | -ACPI_QUIRK_UART1_SKIP |ACPI_QUIRK_SKIP_ACPI_AC_AND_BATTERY | ACPI_QUIRK_SKIP_GPIO_EVENT_HANDLERS), }, { +/* Lenovo Yoga Book X90F/L */ .matches = { -DMI_MATCH (DMI_SYS_VENDOR ,"ASUSTeK COMPUTER INC." ), - DMI_MATCH(DMI_PRODUCT_NAME, "TF103C"), +DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"Intel Corporation" ), +DMI_EXACT_MATCH (DMI_PRODUCT_NAME ,"CHERRYVIEW D1 PLATFORM" ), + DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "YETI-11"), }, .driver_data = (void *)(ACPI_QUIRK_SKIP_I2C_CLIENTS | +ACPI_QUIRK_UART1_SKIP |ACPI_QUIRK_SKIP_ACPI_AC_AND_BATTERY | ACPI_QUIRK_SKIP_GPIO_EVENT_HANDLERS), },
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 405/466 LoongArch: Fix sleeping in atomic context for PREEMPT_RT
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Huacai Chen <[email protected]>
[ Upstream commit 88fd2b70120d52c1010257d36776876941375490 ]
Commit bab1c299f3945ffe79 ("LoongArch: Fix sleeping in atomic context in setup_tlb_handler()") changes the gfp flag from GFP_KERNEL to GFP_ATOMIC for alloc_pages_node(). However, for PREEMPT_RT kernels we can still get a "sleeping in atomic context" error:
[ 0.372259] BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48
[ 0.372266] in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 0, name: swapper/1
[ 0.372268] preempt_count: 1, expected: 0
[ 0.372270] RCU nest depth: 1, expected: 1
[ 0.372272] 3 locks held by swapper/1/0:
[ 0.372274] #0: 900000000c9f5e60 (&pcp->lock){+.+.}-{3:3}, at: get_page_from_freelist+0x524/0x1c60
[ 0.372294] #1: 90000000087013b8 (rcu_read_lock){....}-{1:3}, at: rt_spin_trylock+0x50/0x140
[ 0.372305] #2: 900000047fffd388 (&zone->lock){+.+.}-{3:3}, at: __rmqueue_pcplist+0x30c/0xea0
[ 0.372314] irq event stamp: 0
[ 0.372316] hardirqs last enabled at (0): [<0000000000000000>] 0x0
[ 0.372322] hardirqs last disabled at (0): [<9000000005947320>] copy_process+0x9c0/0x26e0
[ 0.372329] softirqs last enabled at (0): [<9000000005947320>] copy_process+0x9c0/0x26e0
[ 0.372335] softirqs last disabled at (0): [<0000000000000000>] 0x0
[ 0.372341] CPU: 1 UID: 0 PID: 0 Comm: swapper/1 Not tainted 6.12.0-rc7+ #1891
[ 0.372346] Hardware name: Loongson Loongson-3A5000-7A1000-1w-CRB/Loongson-LS3A5000-7A1000-1w-CRB, BIOS vUDK2018-LoongArch-V2.0.0-prebeta9 10/21/2022
[ 0.372349] Stack : 0000000000000089 9000000005a0db9c 90000000071519c8 9000000100388000
[ 0.372486] 900000010038b890 0000000000000000 900000010038b898 9000000007e53788
[ 0.372492] 900000000815bcc8 900000000815bcc0 900000010038b700 0000000000000001
[ 0.372498] 0000000000000001 4b031894b9d6b725 00000000055ec000 9000000100338fc0
[ 0.372503] 00000000000000c4 0000000000000001 000000000000002d 0000000000000003
[ 0.372509] 0000000000000030 0000000000000003 00000000055ec000 0000000000000003
[ 0.372515] 900000000806d000 9000000007e53788 00000000000000b0 0000000000000004
[ 0.372521] 0000000000000000 0000000000000000 900000000c9f5f10 0000000000000000
[ 0.372526] 90000000076f12d8 9000000007e53788 9000000005924778 0000000000000000
[ 0.372532] 00000000000000b0 0000000000000004 0000000000000000 0000000000070000
[ 0.372537] ...
[ 0.372540] Call Trace:
[ 0.372542] [<9000000005924778>] show_stack+0x38/0x180
[ 0.372548] [<90000000071519c4>] dump_stack_lvl+0x94/0xe4
[ 0.372555] [<900000000599b880>] __might_resched+0x1a0/0x260
[ 0.372561] [<90000000071675cc>] rt_spin_lock+0x4c/0x140
[ 0.372565] [<9000000005cbb768>] __rmqueue_pcplist+0x308/0xea0
[ 0.372570] [<9000000005cbed84>] get_page_from_freelist+0x564/0x1c60
[ 0.372575] [<9000000005cc0d98>] __alloc_pages_noprof+0x218/0x1820
[ 0.372580] [<900000000593b36c>] tlb_init+0x1ac/0x298
[ 0.372585] [<9000000005924b74>] per_cpu_trap_init+0x114/0x140
[ 0.372589] [<9000000005921964>] cpu_probe+0x4e4/0xa60
[ 0.372592] [<9000000005934874>] start_secondary+0x34/0xc0
[ 0.372599] [<900000000715615c>] smpboot_entry+0x64/0x6cThis is because in PREEMPT_RT kernels normal spinlocks are replaced by rt spinlocks and rt_spin_lock() will cause sleeping. Fix it by disabling NUMA optimization completely for PREEMPT_RT kernels.
--- arch/loongarch/mm/tlb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/loongarch/mm/tlb.c +1 -1
@@ -289,7 +289,7 @@ static void setup_tlb_handler(int cpu)/* Avoid lockdep warning */ rcutree_report_cpu_starting (cpu); -#ifdef CONFIG_NUMA +#if defined(CONFIG_NUMA ) && !defined(CONFIG_PREEMPT_RT ) vec_sz =sizeof (exception_handlers);if (pcpu_handlers[cpu])
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 406/466 fs/ntfs3: Fix warning in ni_fiemap
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Konstantin Komarov <[email protected]>
[ Upstream commit e2705dd3d16d1000f1fd8193d82447065de8c899 ]
Use local runs_tree instead of cached. This way excludes rw_semaphore lock.
--- fs/ntfs3/attrib.c | 9 ++-- fs/ntfs3/frecord.c | 103 +++++++-------------------------------------- fs/ntfs3/ntfs_fs.h | 3 +- 3 files changed, 21 insertions(+), 94 deletions(-)
fs/ntfs3/attrib.c +4 -5
@@ -977,7 +977,7 @@ int attr_data_get_block(struct ntfs_inode *ni, CLST vcn, CLST clen, CLST *lcn,/* Check for compressed frame. */ err =attr_is_frame_compressed (ni, attr_b, vcn >>NTFS_LZNT_CUNIT , - &hint); + &hint, run);if (err) goto out;
@@ -1521,16 +1521,16 @@ int attr_wof_frame_info(struct ntfs_inode *ni, struct ATTRIB *attr,* attr_is_frame_compressed - Used to detect compressed frame. * * attr - base (primary) attribute segment. +* run - run to use, usually == &ni->file.run. * Only base segments contains valid 'attr->nres.c_unit' */ int attr_is_frame_compressed (struct ntfs_inode *ni,struct ATTRIB *attr, -CLST frame,CLST *clst_data) +CLST frame,CLST *clst_data,struct runs_tree *run) {int err;u32 clst_frame;CLST clen, lcn, vcn, alen, slen, vcn_next;size_t idx; -struct runs_tree *run; *clst_data =0 ;
@@ -1542,7 +1542,6 @@ int attr_is_frame_compressed(struct ntfs_inode *ni, struct ATTRIB *attr, clst_frame =1u << attr->nres.c_unit; vcn = frame * clst_frame; - run = &ni->file.run;if (!run_lookup_entry (run, vcn, &lcn, &clen, &idx)) { err = attr_load_runs_vcn(ni, attr->type, attr_name(attr),
@@ -1678,7 +1677,7 @@ int attr_allocate_frame(struct ntfs_inode *ni, CLST frame, size_t compr_size,if (err) goto out; - err =attr_is_frame_compressed (ni, attr_b, frame, &clst_data); + err =attr_is_frame_compressed (ni, attr_b, frame, &clst_data, run);if (err) goto out;
fs/ntfs3/frecord.c +15 -88
193 lines not on this page · raw message
fs/ntfs3/ntfs_fs.h +2 -1
@@ -446,7 +446,8 @@ int attr_wof_frame_info(struct ntfs_inode *ni, struct ATTRIB *attr, struct runs_tree *run, u64 frame, u64 frames, u8 frame_bits, u32 *ondisk_size, u64 *vbo_data);int attr_is_frame_compressed (struct ntfs_inode *ni,struct ATTRIB *attr, -CLST frame,CLST *clst_data); +CLST frame,CLST *clst_data, +struct runs_tree *run);int attr_allocate_frame (struct ntfs_inode *ni,CLST frame,size_t compr_size,u64 new_valid);int attr_collapse_range (struct ntfs_inode *ni,u64 vbo,u64 bytes);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 407/466 fs/ntfs3: Fix case when unmarked clusters intersect with zone
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Konstantin Komarov <[email protected]>
[ Upstream commit 5fc982fe7eca9d0cf7b25832450ebd4f7c8e1c36 ]
--- fs/ntfs3/run.c | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-)
fs/ntfs3/run.c +30 -10
@@ -1055,8 +1055,8 @@ int run_unpack_ex(struct runs_tree *run, struct ntfs_sb_info *sbi, CLST ino, {int ret, err;CLST next_vcn, lcn, len; -size_t index; -bool ok; +size_t index, done; +bool ok, zone;struct wnd_bitmap *wnd; ret =run_unpack (run, sbi, ino, svcn, evcn, vcn, run_buf, run_buf_size);
@@ -1087,8 +1087,9 @@ int run_unpack_ex(struct runs_tree *run, struct ntfs_sb_info *sbi, CLST ino,continue ;down_read_nested (&wnd->rw_lock,BITMAP_MUTEX_CLUSTERS ); + zone =max (wnd->zone_bit, lcn) <min (wnd->zone_end, lcn + len);/* Check for free blocks. */ - ok =wnd_is_used (wnd, lcn, len); + ok = !zone &&wnd_is_used (wnd, lcn, len);up_read (&wnd->rw_lock);if (ok)continue ;
@@ -1096,14 +1097,33 @@ int run_unpack_ex(struct runs_tree *run, struct ntfs_sb_info *sbi, CLST ino,/* Looks like volume is corrupted. */ ntfs_set_state (sbi,NTFS_DIRTY_ERROR ); -if (down_write_trylock (&wnd->rw_lock)) { -/* Mark all zero bits as used in range [lcn, lcn+len). */ -size_t done; - err =wnd_set_used_safe (wnd, lcn, len, &done); -up_write (&wnd->rw_lock); -if (err) -return err; +if (!down_write_trylock (&wnd->rw_lock)) +continue ; + +if (zone) { +/* +* Range [lcn, lcn + len) intersects with zone. +* To avoid complex with zone just turn it off. +*/ +wnd_zone_set (wnd,0 ,0 ); + } + +/* Mark all zero bits as used in range [lcn, lcn+len). */ + err =wnd_set_used_safe (wnd, lcn, len, &done); +if (zone) { +/* Restore zone. Lock mft run. */ +struct rw_semaphore *lock; + lock =is_mounted (sbi) ? &sbi->mft.ni->file.run_lock : +NULL ; +if (lock) +down_read (lock); +ntfs_refresh_zone (sbi); +if (lock) +up_read (lock); } +up_write (&wnd->rw_lock); +if (err) +return err; }return ret;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 408/466 regulator: qcom-rpmh: Update ranges for FTSMPS525
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Melody Olvera <[email protected]>
[ Upstream commit eeecf953d697cb7f0d916f9908a2b9f451bb2667 ]
All FTSMPS525 regulators support LV and MV ranges; however, the boot loader firmware will determine which range to use as the device boots.
Nonetheless, the driver cannot determine which range was selected, so hardcoding the ranges as either LV or MV will not cover all cases as it's possible for the firmware to select a range not supported by the driver's current hardcoded values.
To this end, combine the ranges for the FTSMPS525s into one struct and point all regulators to the updated combined struct. This should work on all boards regardless of which range is selected by the firmware and more accurately caputres the capability of this regulator on a hardware level.
--- drivers/regulator/qcom-rpmh-regulator.c | 83 +++++++++++-------------- 1 file changed, 36 insertions(+), 47 deletions(-)
drivers/regulator/qcom-rpmh-regulator.c +36 -47
@@ -843,26 +843,15 @@ static const struct rpmh_vreg_hw_data pmic5_ftsmps520 = { .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, }; -static const struct rpmh_vreg_hw_data pmic5_ftsmps525_lv = { +static const struct rpmh_vreg_hw_data pmic5_ftsmps525 = { .regulator_type =VRM , .ops = &rpmh_regulator_vrm_ops, .voltage_ranges = (struct linear_range []) {REGULATOR_LINEAR_RANGE (300000 ,0 ,267 ,4000 ), +REGULATOR_LINEAR_RANGE (1376000 ,268 ,438 ,8000 ), }, - .n_linear_ranges =1 , - .n_voltages =268 , - .pmic_mode_map = pmic_mode_map_pmic5_smps, - .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, -}; - -static const struct rpmh_vreg_hw_data pmic5_ftsmps525_mv = { - .regulator_type =VRM , - .ops = &rpmh_regulator_vrm_ops, - .voltage_ranges = (struct linear_range []) { -REGULATOR_LINEAR_RANGE (600000 ,0 ,267 ,8000 ), - }, - .n_linear_ranges =1 , - .n_voltages =268 , + .n_linear_ranges =2 , + .n_voltages =439 , .pmic_mode_map = pmic_mode_map_pmic5_smps, .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, };
@@ -1190,12 +1179,12 @@ static const struct rpmh_vreg_init_data pm8550_vreg_data[] = { };static const struct rpmh_vreg_init_data pm8550vs_vreg_data[] = { -RPMH_VREG ("smps1" ,"smp%s1" , &pmic5_ftsmps525_lv,"vdd-s1" ), -RPMH_VREG ("smps2" ,"smp%s2" , &pmic5_ftsmps525_lv,"vdd-s2" ), -RPMH_VREG ("smps3" ,"smp%s3" , &pmic5_ftsmps525_lv,"vdd-s3" ), -RPMH_VREG ("smps4" ,"smp%s4" , &pmic5_ftsmps525_lv,"vdd-s4" ), -RPMH_VREG ("smps5" ,"smp%s5" , &pmic5_ftsmps525_lv,"vdd-s5" ), -RPMH_VREG ("smps6" ,"smp%s6" , &pmic5_ftsmps525_mv,"vdd-s6" ), +RPMH_VREG ("smps1" ,"smp%s1" , &pmic5_ftsmps525,"vdd-s1" ), +RPMH_VREG ("smps2" ,"smp%s2" , &pmic5_ftsmps525,"vdd-s2" ), +RPMH_VREG ("smps3" ,"smp%s3" , &pmic5_ftsmps525,"vdd-s3" ), +RPMH_VREG ("smps4" ,"smp%s4" , &pmic5_ftsmps525,"vdd-s4" ), +RPMH_VREG ("smps5" ,"smp%s5" , &pmic5_ftsmps525,"vdd-s5" ), +RPMH_VREG ("smps6" ,"smp%s6" , &pmic5_ftsmps525,"vdd-s6" ),RPMH_VREG ("ldo1" ,"ldo%s1" , &pmic5_nldo515,"vdd-l1" ),RPMH_VREG ("ldo2" ,"ldo%s2" , &pmic5_nldo515,"vdd-l2" ),RPMH_VREG ("ldo3" ,"ldo%s3" , &pmic5_nldo515,"vdd-l3" ),
@@ -1203,14 +1192,14 @@ static const struct rpmh_vreg_init_data pm8550vs_vreg_data[] = { };static const struct rpmh_vreg_init_data pm8550ve_vreg_data[] = { -RPMH_VREG ("smps1" ,"smp%s1" , &pmic5_ftsmps525_lv,"vdd-s1" ), -RPMH_VREG ("smps2" ,"smp%s2" , &pmic5_ftsmps525_lv,"vdd-s2" ), -RPMH_VREG ("smps3" ,"smp%s3" , &pmic5_ftsmps525_lv,"vdd-s3" ), -RPMH_VREG ("smps4" ,"smp%s4" , &pmic5_ftsmps525_mv,"vdd-s4" ), -RPMH_VREG ("smps5" ,"smp%s5" , &pmic5_ftsmps525_lv,"vdd-s5" ), -RPMH_VREG ("smps6" ,"smp%s6" , &pmic5_ftsmps525_lv,"vdd-s6" ), -RPMH_VREG ("smps7" ,"smp%s7" , &pmic5_ftsmps525_lv,"vdd-s7" ), -RPMH_VREG ("smps8" ,"smp%s8" , &pmic5_ftsmps525_lv,"vdd-s8" ), +RPMH_VREG ("smps1" ,"smp%s1" , &pmic5_ftsmps525,"vdd-s1" ), +RPMH_VREG ("smps2" ,"smp%s2" , &pmic5_ftsmps525,"vdd-s2" ), +RPMH_VREG ("smps3" ,"smp%s3" , &pmic5_ftsmps525,"vdd-s3" ), +RPMH_VREG ("smps4" ,"smp%s4" , &pmic5_ftsmps525,"vdd-s4" ), +RPMH_VREG ("smps5" ,"smp%s5" , &pmic5_ftsmps525,"vdd-s5" ), +RPMH_VREG ("smps6" ,"smp%s6" , &pmic5_ftsmps525,"vdd-s6" ), +RPMH_VREG ("smps7" ,"smp%s7" , &pmic5_ftsmps525,"vdd-s7" ), +RPMH_VREG ("smps8" ,"smp%s8" , &pmic5_ftsmps525,"vdd-s8" ),RPMH_VREG ("ldo1" ,"ldo%s1" , &pmic5_nldo515,"vdd-l1" ),RPMH_VREG ("ldo2" ,"ldo%s2" , &pmic5_nldo515,"vdd-l2" ),RPMH_VREG ("ldo3" ,"ldo%s3" , &pmic5_nldo515,"vdd-l3" ),
@@ -1218,14 +1207,14 @@ static const struct rpmh_vreg_init_data pm8550ve_vreg_data[] = { };static const struct rpmh_vreg_init_data pmc8380_vreg_data[] = { -RPMH_VREG ("smps1" ,"smp%s1" , &pmic5_ftsmps525_lv,"vdd-s1" ), -RPMH_VREG ("smps2" ,"smp%s2" , &pmic5_ftsmps525_lv,"vdd-s2" ), -RPMH_VREG ("smps3" ,"smp%s3" , &pmic5_ftsmps525_lv,"vdd-s3" ), -RPMH_VREG ("smps4" ,"smp%s4" , &pmic5_ftsmps525_mv,"vdd-s4" ), -RPMH_VREG ("smps5" ,"smp%s5" , &pmic5_ftsmps525_lv,"vdd-s5" ), -RPMH_VREG ("smps6" ,"smp%s6" , &pmic5_ftsmps525_lv,"vdd-s6" ), -RPMH_VREG ("smps7" ,"smp%s7" , &pmic5_ftsmps525_lv,"vdd-s7" ), -RPMH_VREG ("smps8" ,"smp%s8" , &pmic5_ftsmps525_lv,"vdd-s8" ), +RPMH_VREG ("smps1" ,"smp%s1" , &pmic5_ftsmps525,"vdd-s1" ), +RPMH_VREG ("smps2" ,"smp%s2" , &pmic5_ftsmps525,"vdd-s2" ), +RPMH_VREG ("smps3" ,"smp%s3" , &pmic5_ftsmps525,"vdd-s3" ), +RPMH_VREG ("smps4" ,"smp%s4" , &pmic5_ftsmps525,"vdd-s4" ), +RPMH_VREG ("smps5" ,"smp%s5" , &pmic5_ftsmps525,"vdd-s5" ), +RPMH_VREG ("smps6" ,"smp%s6" , &pmic5_ftsmps525,"vdd-s6" ), +RPMH_VREG ("smps7" ,"smp%s7" , &pmic5_ftsmps525,"vdd-s7" ), +RPMH_VREG ("smps8" ,"smp%s8" , &pmic5_ftsmps525,"vdd-s8" ),RPMH_VREG ("ldo1" ,"ldo%s1" , &pmic5_nldo515,"vdd-l1" ),RPMH_VREG ("ldo2" ,"ldo%s2" , &pmic5_nldo515,"vdd-l2" ),RPMH_VREG ("ldo3" ,"ldo%s3" , &pmic5_nldo515,"vdd-l3" ),
@@ -1409,16 +1398,16 @@ static const struct rpmh_vreg_init_data pmx65_vreg_data[] = { };static const struct rpmh_vreg_init_data pmx75_vreg_data[] = { -RPMH_VREG ("smps1" ,"smp%s1" , &pmic5_ftsmps525_lv,"vdd-s1" ), -RPMH_VREG ("smps2" ,"smp%s2" , &pmic5_ftsmps525_lv,"vdd-s2" ), -RPMH_VREG ("smps3" ,"smp%s3" , &pmic5_ftsmps525_lv,"vdd-s3" ), -RPMH_VREG ("smps4" ,"smp%s4" , &pmic5_ftsmps525_mv,"vdd-s4" ), -RPMH_VREG ("smps5" ,"smp%s5" , &pmic5_ftsmps525_lv,"vdd-s5" ), -RPMH_VREG ("smps6" ,"smp%s6" , &pmic5_ftsmps525_lv,"vdd-s6" ), -RPMH_VREG ("smps7" ,"smp%s7" , &pmic5_ftsmps525_lv,"vdd-s7" ), -RPMH_VREG ("smps8" ,"smp%s8" , &pmic5_ftsmps525_lv,"vdd-s8" ), -RPMH_VREG ("smps9" ,"smp%s9" , &pmic5_ftsmps525_lv,"vdd-s9" ), -RPMH_VREG ("smps10" ,"smp%s10" , &pmic5_ftsmps525_lv,"vdd-s10" ), +RPMH_VREG ("smps1" ,"smp%s1" , &pmic5_ftsmps525,"vdd-s1" ), +RPMH_VREG ("smps2" ,"smp%s2" , &pmic5_ftsmps525,"vdd-s2" ), +RPMH_VREG ("smps3" ,"smp%s3" , &pmic5_ftsmps525,"vdd-s3" ), +RPMH_VREG ("smps4" ,"smp%s4" , &pmic5_ftsmps525,"vdd-s4" ), +RPMH_VREG ("smps5" ,"smp%s5" , &pmic5_ftsmps525,"vdd-s5" ), +RPMH_VREG ("smps6" ,"smp%s6" , &pmic5_ftsmps525,"vdd-s6" ), +RPMH_VREG ("smps7" ,"smp%s7" , &pmic5_ftsmps525,"vdd-s7" ), +RPMH_VREG ("smps8" ,"smp%s8" , &pmic5_ftsmps525,"vdd-s8" ), +RPMH_VREG ("smps9" ,"smp%s9" , &pmic5_ftsmps525,"vdd-s9" ), +RPMH_VREG ("smps10" ,"smp%s10" , &pmic5_ftsmps525,"vdd-s10" ),RPMH_VREG ("ldo1" ,"ldo%s1" , &pmic5_nldo515,"vdd-l1" ),RPMH_VREG ("ldo2" ,"ldo%s2" , &pmic5_nldo515,"vdd-l2-18" ),RPMH_VREG ("ldo3" ,"ldo%s3" , &pmic5_nldo515,"vdd-l3" ),
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 409/466 usb: chipidea: add CI_HDRC_HAS_SHORT_PKT_LIMIT flag
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xu Yang <[email protected]>
[ Upstream commit ec841b8d73cff37f8960e209017efe1eb2fb21f2 ]
Currently, the imx deivice controller has below limitations:
1. can't generate short packet interrupt if IOC not set in dTD. So if one request span more than one dTDs and only the last dTD set IOC, the usb request will pending there if no more data comes.
2. the controller can't accurately deliver data to differtent usb requests in some cases due to short packet. For example: one usb request span 3 dTDs, then if the controller received a short packet the next packet will go to 2nd dTD of current request rather than the first dTD of next request.
3. can't build a bus packet use multiple dTDs. For example: controller needs to send one packet of 512 bytes use dTD1 (200 bytes) + dTD2 (312 bytes), actually the host side will see 200 bytes short packet.
Based on these limits, add CI_HDRC_HAS_SHORT_PKT_LIMIT flag and use it on imx platforms.
--- drivers/usb/chipidea/ci.h | 1 + drivers/usb/chipidea/ci_hdrc_imx.c | 1 + drivers/usb/chipidea/core.c | 2 ++ include/linux/usb/chipidea.h | 1 + 4 files changed, 5 insertions(+)
drivers/usb/chipidea/ci.h +1 -0
@@ -260,6 +260,7 @@ struct ci_hdrc {bool b_sess_valid_event;bool imx28_write_fix;bool has_portsc_pec_bug; +bool has_short_pkt_limit;bool supports_runtime_pm;bool in_lpm;bool wakeup_int;
drivers/usb/chipidea/ci_hdrc_imx.c +1 -0
@@ -342,6 +342,7 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)struct ci_hdrc_platform_data pdata = { .name =dev_name (&pdev->dev), .capoffset =DEF_CAPOFFSET , + .flags =CI_HDRC_HAS_SHORT_PKT_LIMIT , .notify_event = ci_hdrc_imx_notify_event, };int ret;
drivers/usb/chipidea/core.c +2 -0
@@ -1076,6 +1076,8 @@ static int ci_hdrc_probe(struct platform_device *pdev) CI_HDRC_SUPPORTS_RUNTIME_PM); ci->has_portsc_pec_bug = !!(ci->platdata->flags &CI_HDRC_HAS_PORTSC_PEC_MISSED ); + ci->has_short_pkt_limit = !!(ci->platdata->flags & +CI_HDRC_HAS_SHORT_PKT_LIMIT );platform_set_drvdata (pdev, ci); ret =hw_device_init (ci, base);
include/linux/usb/chipidea.h +1 -0
@@ -65,6 +65,7 @@ struct ci_hdrc_platform_data {#define CI_HDRC_PHY_VBUS_CONTROL BIT(16)#define CI_HDRC_HAS_PORTSC_PEC_MISSED BIT(17)#define CI_HDRC_FORCE_VBUS_ACTIVE_ALWAYS BIT(18) +#define CI_HDRC_HAS_SHORT_PKT_LIMIT BIT(19)enum usb_dr_mode dr_mode;#define CI_HDRC_CONTROLLER_RESET_EVENT 0#define CI_HDRC_CONTROLLER_STOPPED_EVENT 1
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 410/466 usb: chipidea: udc: limit usb request length to max 16KB
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xu Yang <[email protected]>
[ Upstream commit ca8d18aa7b0f22d66a3ca9a90d8f73431b8eca89 ]
To let the device controller work properly on short packet limitations, one usb request should only correspond to one dTD. Then every dTD will set IOC. In theory, each dTD support up to 20KB data transfer if the offset is 0. Due to we cannot predetermine the offset, this will limit the usb request length to max 16KB. This should be fine since most of the user transfer data based on this size policy.
--- drivers/usb/chipidea/ci.h | 1 + drivers/usb/chipidea/udc.c | 6 ++++++ 2 files changed, 7 insertions(+)
drivers/usb/chipidea/ci.h +1 -0
@@ -25,6 +25,7 @@#define TD_PAGE_COUNT 5#define CI_HDRC_PAGE_SIZE 4096ul/* page size for TD's */ #define ENDPT_MAX 32 +#define CI_MAX_REQ_SIZE (4 * CI_HDRC_PAGE_SIZE)#define CI_MAX_BUF_SIZE (TD_PAGE_COUNT * CI_HDRC_PAGE_SIZE)/******************************************************************************
drivers/usb/chipidea/udc.c +6 -0
@@ -960,6 +960,12 @@ static int _ep_queue(struct usb_ep *ep, struct usb_request *req,return -EMSGSIZE ; } +if (ci->has_short_pkt_limit && + hwreq->req.length >CI_MAX_REQ_SIZE ) { +dev_err (hwep->ci->dev,"request length too big (max 16KB)\n" ); +return -EMSGSIZE ; + } +/* first nuke then test link, e.g. previous status has not sent */ if (!list_empty (&hwreq->queue)) {dev_err (hwep->ci->dev,"request already in queue\n" );
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 411/466 usb: chipidea: udc: create bounce buffer for problem sglist entries if possible
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xu Yang <[email protected]>
[ Upstream commit edfcc455c85ccc5855f0c329ca5a2d85cc9fc6c6 ]
The chipidea controller doesn't fully support sglist, such as it can not transfer data spanned more dTDs to form a bus packet, so it can only work on very limited cases.
The limitations as below:
1. the end address of the first sg buffer must be 4KB aligned.
2. the start and end address of the middle sg buffer must be 4KB aligned.
3. the start address of the first sg buffer must be 4KB aligned.
However, not all the use cases violate these limitations. To make the controller compatible with most of the cases, this will try to bounce the problem sglist entries which can be found by sglist_get_invalid_entry(). Then a bounced line buffer (the size will roundup to page size) will be allocated to replace the remaining problem sg entries. The data will be copied between problem sg entries and bounce buffer according to the transfer direction. The bounce buffer will be freed when the request completed.
--- drivers/usb/chipidea/udc.c | 148 +++++++++++++++++++++++++++++++++++++ drivers/usb/chipidea/udc.h | 2 + 2 files changed, 150 insertions(+)
drivers/usb/chipidea/udc.c +148 -0
@@ -10,6 +10,7 @@#include <linux/delay.h> #include <linux/device.h> #include <linux/dmapool.h> +#include <linux/dma-direct.h> #include <linux/err.h> #include <linux/irqreturn.h> #include <linux/kernel.h>
@@ -540,6 +541,126 @@ static int prepare_td_for_sg(struct ci_hw_ep *hwep, struct ci_hw_req *hwreq)return ret; } +/* +* Verify if the scatterlist is valid by iterating each sg entry. +* Return invalid sg entry index which is less than num_sgs. +*/ +static int sglist_get_invalid_entry (struct device *dma_dev,u8 dir, +struct usb_request *req) +{ +int i; +struct scatterlist *s = req->sg; + +if (req->num_sgs ==1 ) +return 1 ; + + dir = dir ?DMA_TO_DEVICE :DMA_FROM_DEVICE ; + +for (i =0 ; i < req->num_sgs; i++, s =sg_next (s)) { +/* Only small sg (generally last sg) may be bounced. If +* that happens. we can't ensure the addr is page-aligned +* after dma map. +*/ +if (dma_kmalloc_needs_bounce (dma_dev, s->length, dir)) +break ; + +/* Make sure each sg start address (except first sg) is +* page-aligned and end address (except last sg) is also +* page-aligned. +*/ +if (i ==0 ) { +if (!IS_ALIGNED (s->offset + s->length, +CI_HDRC_PAGE_SIZE )) +break ; + }else { +if (s->offset) +break ; +if (!sg_is_last (s) && !IS_ALIGNED (s->length, +CI_HDRC_PAGE_SIZE )) +break ; + } + } + +return i; +} + +static int sglist_do_bounce (struct ci_hw_req *hwreq,int index, +bool copy,unsigned int *bounced) +{ +void *buf; +int i, ret, nents, num_sgs; +unsigned int rest, rounded; +struct scatterlist *sg, *src, *dst; + + nents = index +1 ; + ret =sg_alloc_table (&hwreq->sgt, nents,GFP_KERNEL ); +if (ret) +return ret; + + sg = src = hwreq->req.sg; + num_sgs = hwreq->req.num_sgs; + rest = hwreq->req.length; + dst = hwreq->sgt.sgl; + +for (i =0 ; i < index; i++) { +memcpy (dst, src,sizeof (*src)); + rest -= src->length; + src =sg_next (src); + dst =sg_next (dst); + } + +/* create one bounce buffer */ + rounded =round_up (rest,CI_HDRC_PAGE_SIZE ); + buf =kmalloc (rounded,GFP_KERNEL ); +if (!buf) { +sg_free_table (&hwreq->sgt); +return -ENOMEM ; + } + +sg_set_buf (dst, buf, rounded); + + hwreq->req.sg = hwreq->sgt.sgl; + hwreq->req.num_sgs = nents; + hwreq->sgt.sgl = sg; + hwreq->sgt.nents = num_sgs; + +if (copy) +sg_copy_to_buffer (src, num_sgs - index, buf, rest); + + *bounced = rest; + +return 0 ; +} + +static void sglist_do_debounce (struct ci_hw_req *hwreq,bool copy) +{ +void *buf; +int i, nents, num_sgs; +struct scatterlist *sg, *src, *dst; + + sg = hwreq->req.sg; + num_sgs = hwreq->req.num_sgs; + src =sg_last (sg, num_sgs); + buf =sg_virt (src); + +if (copy) { + dst = hwreq->sgt.sgl; +for (i =0 ; i < num_sgs -1 ; i++) + dst =sg_next (dst); + + nents = hwreq->sgt.nents - num_sgs +1 ; +sg_copy_from_buffer (dst, nents, buf,sg_dma_len (src)); + } + + hwreq->req.sg = hwreq->sgt.sgl; + hwreq->req.num_sgs = hwreq->sgt.nents; + hwreq->sgt.sgl = sg; + hwreq->sgt.nents = num_sgs; + +kfree (buf); +sg_free_table (&hwreq->sgt); +} +/** * _hardware_enqueue: configures a request at hardware level * @hwep: endpoint
@@ -552,6 +673,8 @@ static int _hardware_enqueue(struct ci_hw_ep *hwep, struct ci_hw_req *hwreq)struct ci_hdrc *ci = hwep->ci;int ret =0 ;struct td_node *firstnode, *lastnode; +unsigned int bounced_size; +struct scatterlist *sg;/* don't queue twice */ if (hwreq->req.status == -EALREADY )
@@ -559,11 +682,29 @@ static int _hardware_enqueue(struct ci_hw_ep *hwep, struct ci_hw_req *hwreq) hwreq->req.status = -EALREADY ; +if (hwreq->req.num_sgs && hwreq->req.length && + ci->has_short_pkt_limit) { + ret =sglist_get_invalid_entry (ci->dev->parent, hwep->dir, + &hwreq->req); +if (ret < hwreq->req.num_sgs) { + ret =sglist_do_bounce (hwreq, ret, hwep->dir ==TX , + &bounced_size); +if (ret) +return ret; + } + } + ret =usb_gadget_map_request_by_dev (ci->dev->parent, &hwreq->req, hwep->dir);if (ret)return ret; +if (hwreq->sgt.sgl) { +/* We've mapped a bigger buffer, now recover the actual size */ + sg =sg_last (hwreq->req.sg, hwreq->req.num_sgs); +sg_dma_len (sg) =min (sg_dma_len (sg), bounced_size); + } +if (hwreq->req.num_mapped_sgs) ret =prepare_td_for_sg (hwep, hwreq);else
@@ -733,6 +874,10 @@ static int _hardware_dequeue(struct ci_hw_ep *hwep, struct ci_hw_req *hwreq)usb_gadget_unmap_request_by_dev (hwep->ci->dev->parent, &hwreq->req, hwep->dir); +/* sglist bounced */ +if (hwreq->sgt.sgl) +sglist_do_debounce (hwreq, hwep->dir ==RX ); + hwreq->req.actual += actual;if (hwreq->req.status)
@@ -1580,6 +1725,9 @@ static int ep_dequeue(struct usb_ep *ep, struct usb_request *req)usb_gadget_unmap_request (&hwep->ci->gadget, req, hwep->dir); +if (hwreq->sgt.sgl) +sglist_do_debounce (hwreq, false); + req->status = -ECONNRESET ;if (hwreq->req.complete !=NULL ) {
drivers/usb/chipidea/udc.h +2 -0
@@ -69,11 +69,13 @@ struct td_node {* @req: request structure for gadget drivers * @queue: link to QH list * @tds: link to TD list +* @sgt: hold original sglist when bounce sglist */ struct ci_hw_req {struct usb_request req;struct list_head queue;struct list_head tds; +struct sg_table sgt; };#ifdef CONFIG_USB_CHIPIDEA_UDC
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 412/466 usb: chipidea: udc: handle USB Error Interrupt if IOC not set
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xu Yang <[email protected]>
[ Upstream commit 548f48b66c0c5d4b9795a55f304b7298cde2a025 ]
As per USBSTS register description about UEI:
When completion of a USB transaction results in an error condition, this bit is set by the Host/Device Controller. This bit is set along with the USBINT bit, if the TD on which the error interrupt occurred also had its interrupt on complete (IOC) bit set.
UI is set only when IOC set. Add checking UEI to fix miss call isr_tr_complete_handler() when IOC have not set and transfer error happen.
--- drivers/usb/chipidea/udc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/chipidea/udc.c +1 -1
@@ -2217,7 +2217,7 @@ static irqreturn_t udc_irq(struct ci_hdrc *ci) } } -if (USBi_UI & intr) +if ((USBi_UI | USBi_UEI) & intr)isr_tr_complete_handler (ci);if ((USBi_SLI & intr) && !(ci->suspended)) {
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 413/466 usb: typec: ucsi: Do not call ACPI _DSM method for UCSI read operations
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Saranya Gopal <[email protected]>
[ Upstream commit fa48d7e81624efdf398b990a9049e9cd75a5aead ]
ACPI _DSM methods are needed only for UCSI write operations and for reading CCI during RESET_PPM operation. So, remove _DSM calls from other places. While there, remove the Zenbook quirk also since the default behavior now aligns with the Zenbook quirk. With this change, GET_CONNECTOR_STATUS returns at least 6 seconds faster than before in Arrowlake-S platforms.
--- drivers/usb/typec/ucsi/ucsi_acpi.c | 56 +++--------------------------- 1 file changed, 5 insertions(+), 51 deletions(-)
drivers/usb/typec/ucsi/ucsi_acpi.c +5 -51
@@ -61,9 +61,11 @@ static int ucsi_acpi_read_cci(struct ucsi *ucsi, u32 *cci)struct ucsi_acpi *ua =ucsi_get_drvdata (ucsi);int ret; - ret =ucsi_acpi_dsm (ua,UCSI_DSM_FUNC_READ ); -if (ret) -return ret; +if (UCSI_COMMAND (ua->cmd) ==UCSI_PPM_RESET ) { + ret =ucsi_acpi_dsm (ua,UCSI_DSM_FUNC_READ ); +if (ret) +return ret; + }memcpy (cci, ua->base +UCSI_CCI ,sizeof (*cci));
@@ -73,11 +75,6 @@ static int ucsi_acpi_read_cci(struct ucsi *ucsi, u32 *cci)static int ucsi_acpi_read_message_in (struct ucsi *ucsi,void *val,size_t val_len) {struct ucsi_acpi *ua =ucsi_get_drvdata (ucsi); -int ret; - - ret =ucsi_acpi_dsm (ua,UCSI_DSM_FUNC_READ ); -if (ret) -return ret;memcpy (val, ua->base +UCSI_MESSAGE_IN , val_len);
@@ -102,42 +99,6 @@ static const struct ucsi_operations ucsi_acpi_ops = { .async_control = ucsi_acpi_async_control }; -static int -ucsi_zenbook_read_cci (struct ucsi *ucsi,u32 *cci) -{ -struct ucsi_acpi *ua =ucsi_get_drvdata (ucsi); -int ret; - -if (UCSI_COMMAND (ua->cmd) ==UCSI_PPM_RESET ) { - ret =ucsi_acpi_dsm (ua,UCSI_DSM_FUNC_READ ); -if (ret) -return ret; - } - -memcpy (cci, ua->base +UCSI_CCI ,sizeof (*cci)); - -return 0 ; -} - -static int -ucsi_zenbook_read_message_in (struct ucsi *ucsi,void *val,size_t val_len) -{ -struct ucsi_acpi *ua =ucsi_get_drvdata (ucsi); - -/* UCSI_MESSAGE_IN is never read for PPM_RESET, return stored data */ -memcpy (val, ua->base +UCSI_MESSAGE_IN , val_len); - -return 0 ; -} - -static const struct ucsi_operations ucsi_zenbook_ops = { - .read_version = ucsi_acpi_read_version, - .read_cci = ucsi_zenbook_read_cci, - .read_message_in = ucsi_zenbook_read_message_in, - .sync_control = ucsi_sync_control_common, - .async_control = ucsi_acpi_async_control -}; -static int ucsi_gram_read_message_in (struct ucsi *ucsi,void *val,size_t val_len) { u16 bogus_change = UCSI_CONSTAT_POWER_LEVEL_CHANGE |
@@ -190,13 +151,6 @@ static const struct ucsi_operations ucsi_gram_ops = { };static const struct dmi_system_id ucsi_acpi_quirks[] = { - { - .matches = { -DMI_MATCH (DMI_SYS_VENDOR ,"ASUSTeK COMPUTER INC." ), -DMI_MATCH (DMI_PRODUCT_NAME ,"ZenBook UX325UA_UM325UA" ), - }, - .driver_data = (void *)&ucsi_zenbook_ops, - }, { .matches = {DMI_MATCH (DMI_SYS_VENDOR ,"LG Electronics" ),
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 414/466 iio: adc: ad7192: properly check spi_get_device_match_data()
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nuno Sa <[email protected]>
[ Upstream commit b7f99fa1b64af2f696b13cec581cb4cd7d3982b8 ]
spi_get_device_match_data() can return a NULL pointer. Hence, let's check for it.
--- drivers/iio/adc/ad7192.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/iio/adc/ad7192.c +3 -0
@@ -1394,6 +1394,9 @@ static int ad7192_probe(struct spi_device *spi) st->int_vref_mv = ret == -ENODEV ? avdd_mv : ret /MILLI ; st->chip_info =spi_get_device_match_data (spi); +if (!st->chip_info) +return -ENODEV ; + indio_dev->name = st->chip_info->name; indio_dev->modes =INDIO_DIRECT_MODE ; indio_dev->info = st->chip_info->info;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 415/466 iio: light: ltr501: Add LTER0303 to the supported devices
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andy Shevchenko <[email protected]>
[ Upstream commit c26acb09ccbef47d1fddaf0783c1392d0462122c ]
It has been found that the (non-vendor issued) ACPI ID for Lite-On LTR303 is present in Microsoft catalog. Add it to the list of the supported devices.
--- drivers/iio/light/ltr501.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/iio/light/ltr501.c +2 -0
@@ -1613,6 +1613,8 @@ static const struct acpi_device_id ltr_acpi_match[] = { { "LTER0501", ltr501 }, { "LTER0559", ltr559 }, { "LTER0301", ltr301 }, +/* https://www.catalog.update.microsoft.com/Search.aspx?q=lter0303 */ + { "LTER0303", ltr303 }, { }, };MODULE_DEVICE_TABLE (acpi, ltr_acpi_match);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 416/466 usb: typec: ucsi: glink: be more precise on orientation-aware ports
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Baryshkov <[email protected]>
[ Upstream commit de9df030ccb5d3e31ee0c715d74cd77c619748f8 ]
Instead of checking if any of the USB-C ports have orientation GPIO and thus is orientation-aware, check for the GPIO for the port being registered. There are no boards that are affected by this change at this moment, so the patch is not marked as a fix, but it might affect other boards in future.
--- drivers/usb/typec/ucsi/ucsi_glink.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/usb/typec/ucsi/ucsi_glink.c +5 -5
@@ -172,12 +172,12 @@ static int pmic_glink_ucsi_async_control(struct ucsi *__ucsi, u64 command)static void pmic_glink_ucsi_update_connector (struct ucsi_connector *con) {struct pmic_glink_ucsi *ucsi =ucsi_get_drvdata (con->ucsi); -int i; -for (i =0 ; i <PMIC_GLINK_MAX_PORTS ; i++) { -if (ucsi->port_orientation[i]) - con->typec_cap.orientation_aware = true; - } +if (con->num >PMIC_GLINK_MAX_PORTS || + !ucsi->port_orientation[con->num -1 ]) +return ; + + con->typec_cap.orientation_aware = true; }static void pmic_glink_ucsi_connector_status (struct ucsi_connector *con)
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 417/466 ASoC: amd: yc: fix internal mic on Redmi G 2022
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Far <[email protected]>
[ Upstream commit 67a0463d339059eeeead9cd015afa594659cfdaf ]
This laptop model requires an additional detection quirk to enable the internal microphone
--- sound/soc/amd/yc/acp6x-mach.c | 7 +++++++ 1 file changed, 7 insertions(+)
sound/soc/amd/yc/acp6x-mach.c +7 -0
@@ -416,6 +416,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "Xiaomi Book Pro 14 2022"), } }, + { + .driver_data = &acp6x_card, + .matches = { +DMI_MATCH (DMI_BOARD_VENDOR ,"TIMI" ), + DMI_MATCH(DMI_PRODUCT_NAME, "Redmi G 2022"), + } + }, { .driver_data = &acp6x_card, .matches = {
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 418/466 drm/amdgpu/vcn: reset fw_shared when VCPU buffers corrupted on vcn v4.0.3
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xiang Liu <[email protected]>
[ Upstream commit 928cd772e18ffbd7723cb2361db4a8ccf2222235 ]
It is not necessarily corrupted. When there is RAS fatal error, device memory access is blocked. Hence vcpu bo cannot be saved to system memory as in a regular suspend sequence before going for reset. In other full device reset cases, that gets saved and restored during resume.
v2: Remove redundant code like vcn_v4_0 did
v2: Refine commit message
v3: Drop the volatile
v3: Refine commit message
--- drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c | 30 ++++++++++++++++++------- 1 file changed, 22 insertions(+), 8 deletions(-)
drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c +22 -8
@@ -116,6 +116,20 @@ static int vcn_v4_0_3_early_init(void *handle)return amdgpu_vcn_early_init (adev); } +static int vcn_v4_0_3_fw_shared_init (struct amdgpu_device *adev,int inst_idx) +{ +struct amdgpu_vcn4_fw_shared *fw_shared; + + fw_shared = adev->vcn.inst[inst_idx].fw_shared.cpu_addr; + fw_shared->present_flag_0 =cpu_to_le32 (AMDGPU_FW_SHARED_FLAG_0_UNIFIED_QUEUE ); + fw_shared->sq.is_enabled =1 ; + +if (amdgpu_vcnfw_log) +amdgpu_vcn_fwlog_init (&adev->vcn.inst[inst_idx]); + +return 0 ; +} +/** * vcn_v4_0_3_sw_init - sw init for VCN block *
@@ -148,8 +162,6 @@ static int vcn_v4_0_3_sw_init(void *handle)return r;for (i =0 ; i < adev->vcn.num_vcn_inst; i++) { -volatile struct amdgpu_vcn4_fw_shared *fw_shared; - vcn_inst =GET_INST (VCN , i); ring = &adev->vcn.inst[i].ring_enc[0 ];
@@ -172,12 +184,7 @@ static int vcn_v4_0_3_sw_init(void *handle)if (r)return r; - fw_shared = adev->vcn.inst[i].fw_shared.cpu_addr; - fw_shared->present_flag_0 =cpu_to_le32 (AMDGPU_FW_SHARED_FLAG_0_UNIFIED_QUEUE ); - fw_shared->sq.is_enabled = true; - -if (amdgpu_vcnfw_log) -amdgpu_vcn_fwlog_init (&adev->vcn.inst[i]); +vcn_v4_0_3_fw_shared_init (adev, i); }if (amdgpu_sriov_vf (adev)) {
@@ -273,6 +280,8 @@ static int vcn_v4_0_3_hw_init(void *handle) } }else {for (i =0 ; i < adev->vcn.num_vcn_inst; ++i) { +struct amdgpu_vcn4_fw_shared *fw_shared; + vcn_inst =GET_INST (VCN , i); ring = &adev->vcn.inst[i].ring_enc[0 ];
@@ -296,6 +305,11 @@ static int vcn_v4_0_3_hw_init(void *handle) regVCN_RB1_DB_CTRL); } +/* Re-init fw_shared when RAS fatal error occurred */ + fw_shared = adev->vcn.inst[i].fw_shared.cpu_addr; +if (!fw_shared->sq.is_enabled) +vcn_v4_0_3_fw_shared_init (adev, i); + r =amdgpu_ring_test_helper (ring);if (r)return r;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 419/466 MIPS: Loongson64: DTS: Really fix PCIe port nodes for ls7a
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xi Ruoyao <[email protected]>
[ Upstream commit 4fbd66d8254cedfd1218393f39d83b6c07a01917 ]
Fix the dtc warnings:
arch/mips/boot/dts/loongson/ls7a-pch.dtsi:68.16-416.5: Warning (interrupt_provider): /bus@10000000/pci@1a000000: '#interrupt-cells' found, but node is not an interrupt provider
arch/mips/boot/dts/loongson/ls7a-pch.dtsi:68.16-416.5: Warning (interrupt_provider): /bus@10000000/pci@1a000000: '#interrupt-cells' found, but node is not an interrupt provider
arch/mips/boot/dts/loongson/loongson64g_4core_ls7a.dtb: Warning (interrupt_map): Failed prerequisite 'interrupt_provider'And a runtime warning introduced in commit 045b14ca5c36 ("of: WARN on deprecated #address-cells/#size-cells handling"):
WARNING: CPU: 0 PID: 1 at drivers/of/base.c:106 of_bus_n_addr_cells+0x9c/0xe0
Missing '#address-cells' in /bus@10000000/pci@1a000000/pci_bridge@9,0The fix is similar to commit d89a415ff8d5 ("MIPS: Loongson64: DTS: Fix PCIe port nodes for ls7a"), which has fixed the issue for ls2k (despite its subject mentions ls7a).
--- arch/mips/boot/dts/loongson/ls7a-pch.dtsi | 73 +++++++++++++++++++---- 1 file changed, 60 insertions(+), 13 deletions(-)
arch/mips/boot/dts/loongson/ls7a-pch.dtsi +60 -13
@@ -70,7 +70,6 @@ device_type = "pci"; #address-cells = <3>; #size-cells = <2>; - #interrupt-cells = <2>; msi-parent = <&msi>; reg = <0 0x1a000000 0 0x02000000>,
@@ -234,7 +233,7 @@ }; }; - pci_bridge@9,0 { + pcie@9,0 { compatible = "pci0014,7a19.1", "pci0014,7a19", "pciclass060400",
@@ -244,12 +243,16 @@ interrupts = <32 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&pic>; + #address-cells = <3>; + #size-cells = <2>; + device_type = "pci"; #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 0>; interrupt-map = <0 0 0 0 &pic 32 IRQ_TYPE_LEVEL_HIGH>; + ranges; }; - pci_bridge@a,0 { + pcie@a,0 { compatible = "pci0014,7a09.1", "pci0014,7a09", "pciclass060400",
@@ -259,12 +262,16 @@ interrupts = <33 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&pic>; + #address-cells = <3>; + #size-cells = <2>; + device_type = "pci"; #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 0>; interrupt-map = <0 0 0 0 &pic 33 IRQ_TYPE_LEVEL_HIGH>; + ranges; }; - pci_bridge@b,0 { + pcie@b,0 { compatible = "pci0014,7a09.1", "pci0014,7a09", "pciclass060400",
@@ -274,12 +281,16 @@ interrupts = <34 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&pic>; + #address-cells = <3>; + #size-cells = <2>; + device_type = "pci"; #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 0>; interrupt-map = <0 0 0 0 &pic 34 IRQ_TYPE_LEVEL_HIGH>; + ranges; }; - pci_bridge@c,0 { + pcie@c,0 { compatible = "pci0014,7a09.1", "pci0014,7a09", "pciclass060400",
@@ -289,12 +300,16 @@ interrupts = <35 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&pic>; + #address-cells = <3>; + #size-cells = <2>; + device_type = "pci"; #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 0>; interrupt-map = <0 0 0 0 &pic 35 IRQ_TYPE_LEVEL_HIGH>; + ranges; }; - pci_bridge@d,0 { + pcie@d,0 { compatible = "pci0014,7a19.1", "pci0014,7a19", "pciclass060400",
@@ -304,12 +319,16 @@ interrupts = <36 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&pic>; + #address-cells = <3>; + #size-cells = <2>; + device_type = "pci"; #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 0>; interrupt-map = <0 0 0 0 &pic 36 IRQ_TYPE_LEVEL_HIGH>; + ranges; }; - pci_bridge@e,0 { + pcie@e,0 { compatible = "pci0014,7a09.1", "pci0014,7a09", "pciclass060400",
@@ -319,12 +338,16 @@ interrupts = <37 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&pic>; + #address-cells = <3>; + #size-cells = <2>; + device_type = "pci"; #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 0>; interrupt-map = <0 0 0 0 &pic 37 IRQ_TYPE_LEVEL_HIGH>; + ranges; }; - pci_bridge@f,0 { + pcie@f,0 { compatible = "pci0014,7a29.1", "pci0014,7a29", "pciclass060400",
@@ -334,12 +357,16 @@ interrupts = <40 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&pic>; + #address-cells = <3>; + #size-cells = <2>; + device_type = "pci"; #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 0>; interrupt-map = <0 0 0 0 &pic 40 IRQ_TYPE_LEVEL_HIGH>; + ranges; }; - pci_bridge@10,0 { + pcie@10,0 { compatible = "pci0014,7a19.1", "pci0014,7a19", "pciclass060400",
@@ -349,12 +376,16 @@ interrupts = <41 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&pic>; + #address-cells = <3>; + #size-cells = <2>; + device_type = "pci"; #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 0>; interrupt-map = <0 0 0 0 &pic 41 IRQ_TYPE_LEVEL_HIGH>; + ranges; }; - pci_bridge@11,0 { + pcie@11,0 { compatible = "pci0014,7a29.1", "pci0014,7a29", "pciclass060400",
@@ -364,12 +395,16 @@ interrupts = <42 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&pic>; + #address-cells = <3>; + #size-cells = <2>; + device_type = "pci"; #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 0>; interrupt-map = <0 0 0 0 &pic 42 IRQ_TYPE_LEVEL_HIGH>; + ranges; }; - pci_bridge@12,0 { + pcie@12,0 { compatible = "pci0014,7a19.1", "pci0014,7a19", "pciclass060400",
@@ -379,12 +414,16 @@ interrupts = <43 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&pic>; + #address-cells = <3>; + #size-cells = <2>; + device_type = "pci"; #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 0>; interrupt-map = <0 0 0 0 &pic 43 IRQ_TYPE_LEVEL_HIGH>; + ranges; }; - pci_bridge@13,0 { + pcie@13,0 { compatible = "pci0014,7a29.1", "pci0014,7a29", "pciclass060400",
@@ -394,12 +433,16 @@ interrupts = <38 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&pic>; + #address-cells = <3>; + #size-cells = <2>; + device_type = "pci"; #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 0>; interrupt-map = <0 0 0 0 &pic 38 IRQ_TYPE_LEVEL_HIGH>; + ranges; }; - pci_bridge@14,0 { + pcie@14,0 { compatible = "pci0014,7a19.1", "pci0014,7a19", "pciclass060400",
@@ -409,9 +452,13 @@ interrupts = <39 IRQ_TYPE_LEVEL_HIGH>; interrupt-parent = <&pic>; + #address-cells = <3>; + #size-cells = <2>; + device_type = "pci"; #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 0>; interrupt-map = <0 0 0 0 &pic 39 IRQ_TYPE_LEVEL_HIGH>; + ranges; }; };
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 420/466 ASoC: amd: yc: Add quirk for microphone on Lenovo Thinkpad T14s Gen 6 21M1CTO1WW
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Uwe Kleine-König <[email protected]>
[ Upstream commit cbc86dd0a4fe9f8c41075328c2e740b68419d639 ]
Add a quirk for Tova's Lenovo Thinkpad T14s with product name 21M1.
--- sound/soc/amd/yc/acp6x-mach.c | 7 +++++++ 1 file changed, 7 insertions(+)
sound/soc/amd/yc/acp6x-mach.c +7 -0
@@ -220,6 +220,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "21J6"), } }, + { + .driver_data = &acp6x_card, + .matches = { +DMI_MATCH (DMI_BOARD_VENDOR ,"LENOVO" ), + DMI_MATCH(DMI_PRODUCT_NAME, "21M1"), + } + }, { .driver_data = &acp6x_card, .matches = {
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 421/466 powerpc/prom_init: Fixup missing powermac #size-cells
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michael Ellerman <[email protected]>
[ Upstream commit cf89c9434af122f28a3552e6f9cc5158c33ce50a ]
On some powermacs escc nodes are missing #size-cells properties, which is deprecated and now triggers a warning at boot since commit 045b14ca5c36 ("of: WARN on deprecated #address-cells/#size-cells handling").
For example:
Missing '#size-cells' in /pci@f2000000/mac-io@c/escc@13000
WARNING: CPU: 0 PID: 0 at drivers/of/base.c:133 of_bus_n_size_cells+0x98/0x108
Hardware name: PowerMac3,1 7400 0xc0209 PowerMac
...
Call Trace:
of_bus_n_size_cells+0x98/0x108 (unreliable)
of_bus_default_count_cells+0x40/0x60
__of_get_address+0xc8/0x21c
__of_address_to_resource+0x5c/0x228
pmz_init_port+0x5c/0x2ec
pmz_probe.isra.0+0x144/0x1e4
pmz_console_init+0x10/0x48
console_init+0xcc/0x138
start_kernel+0x5c4/0x694As powermacs boot via prom_init it's possible to add the missing properties to the device tree during boot, avoiding the warning. Note that escc-legacy nodes are also missing #size-cells properties, but they are skipped by the macio driver, so leave them alone.
Depends-on: 045b14ca5c36 ("of: WARN on deprecated #address-cells/#size-cells handling")
--- arch/powerpc/kernel/prom_init.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-)
arch/powerpc/kernel/prom_init.c +27 -2
@@ -2932,7 +2932,7 @@ static void __init fixup_device_tree_chrp(void)#endif #if defined(CONFIG_PPC64 ) && defined(CONFIG_PPC_PMAC ) -static void __init fixup_device_tree_pmac (void ) +static void __init fixup_device_tree_pmac64 (void ) {phandle u3, i2c, mpic;u32 u3_rev;
@@ -2972,7 +2972,31 @@ static void __init fixup_device_tree_pmac(void) &parent, sizeof(parent)); }#else -#define fixup_device_tree_pmac () +#define fixup_device_tree_pmac64 () +#endif + +#ifdef CONFIG_PPC_PMAC +static void __init fixup_device_tree_pmac (void ) +{ +__be32 val =1 ; +char type[8 ]; +phandle node; + +// Some pmacs are missing #size-cells on escc nodes +for (node =0 ;prom_next_node (&node); ) { + type[0 ] ='\0' ; +prom_getprop (node,"device_type" , type,sizeof (type)); +if (prom_strcmp (type,"escc" )) +continue ; + +if (prom_getproplen (node,"#size-cells" ) !=PROM_ERROR ) +continue ; + +prom_setprop (node,NULL ,"#size-cells" , &val,sizeof (val)); + } +} +#else +static inline void fixup_device_tree_pmac (void ) { }#endif #ifdef CONFIG_PPC_EFIKA
@@ -3197,6 +3221,7 @@ static void __init fixup_device_tree(void)fixup_device_tree_maple_memory_controller ();fixup_device_tree_chrp ();fixup_device_tree_pmac (); +fixup_device_tree_pmac64 ();fixup_device_tree_efika ();fixup_device_tree_pasemi (); }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 422/466 misc: eeprom: eeprom_93cx6: Add quirk for extra read clock cycle
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Parker Newman <[email protected]>
[ Upstream commit 7738a7ab9d12c5371ed97114ee2132d4512e9fd5 ]
Add a quirk similar to eeprom_93xx46 to add an extra clock cycle before reading data from the EEPROM.
The 93Cx6 family of EEPROMs output a "dummy 0 bit" between the writing of the op-code/address from the host to the EEPROM and the reading of the actual data from the EEPROM.
More info can be found on page 6 of the AT93C46 datasheet (linked below). Similar notes are found in other 93xx6 datasheets.
In summary the read operation for a 93Cx6 EEPROM is:
Write to EEPROM: 110[A5-A0] (9 bits)
Read from EEPROM: 0[D15-D0] (17 bits)
Where:
110 is the start bit and READ OpCode [A5-A0] is the address to read from 0 is a "dummy bit" preceding the actual data [D15-D0] is the actual data.
Looking at the READ timing diagrams in the 93Cx6 datasheets the dummy bit should be clocked out on the last address bit clock cycle meaning it should be discarded naturally.
However, depending on the hardware configuration sometimes this dummy bit is not discarded. This is the case with Exar PCI UARTs which require an extra clock cycle between sending the address and reading the data.
Datasheet: https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-5193-SEEPROM-AT93C46D-Datasheet.pdf
--- drivers/misc/eeprom/eeprom_93cx6.c | 10 ++++++++++ include/linux/eeprom_93cx6.h | 11 +++++++++++ 2 files changed, 21 insertions(+)
drivers/misc/eeprom/eeprom_93cx6.c +10 -0
@@ -186,6 +186,11 @@ void eeprom_93cx6_read(struct eeprom_93cx6 *eeprom, const u8 word,eeprom_93cx6_write_bits (eeprom, command,PCI_EEPROM_WIDTH_OPCODE + eeprom->width); +if (has_quirk_extra_read_cycle (eeprom)) { +eeprom_93cx6_pulse_high (eeprom); +eeprom_93cx6_pulse_low (eeprom); + } +/* * Read the requested 16 bits. */
@@ -252,6 +257,11 @@ void eeprom_93cx6_readb(struct eeprom_93cx6 *eeprom, const u8 byte,eeprom_93cx6_write_bits (eeprom, command,PCI_EEPROM_WIDTH_OPCODE + eeprom->width +1 ); +if (has_quirk_extra_read_cycle (eeprom)) { +eeprom_93cx6_pulse_high (eeprom); +eeprom_93cx6_pulse_low (eeprom); + } +/* * Read the requested 8 bits. */
include/linux/eeprom_93cx6.h +11 -0
@@ -11,6 +11,8 @@Supported chipsets: 93c46, 93c56 and 93c66. */ +#include <linux/bits.h> +/* * EEPROM operation defines. */
@@ -34,6 +36,7 @@* @register_write(struct eeprom_93cx6 *eeprom): handler to * write to the eeprom register by using all reg_* fields. * @width: eeprom width, should be one of the PCI_EEPROM_WIDTH_* defines +* @quirks: eeprom or controller quirks * @drive_data: Set if we're driving the data line. * @reg_data_in: register field to indicate data input * @reg_data_out: register field to indicate data output
@@ -50,6 +53,9 @@ struct eeprom_93cx6 {void (*register_write)(struct eeprom_93cx6 *eeprom);int width; +unsigned int quirks; +/* Some EEPROMs require an extra clock cycle before reading */ +#define PCI_EEPROM_QUIRK_EXTRA_READ_CYCLE BIT(0)char drive_data;char reg_data_in;
@@ -71,3 +77,8 @@ extern void eeprom_93cx6_wren(struct eeprom_93cx6 *eeprom, bool enable);extern void eeprom_93cx6_write (struct eeprom_93cx6 *eeprom,u8 addr,u16 data); + +static inline bool has_quirk_extra_read_cycle (struct eeprom_93cx6 *eeprom) +{ +return eeprom->quirks &PCI_EEPROM_QUIRK_EXTRA_READ_CYCLE ; +}
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 423/466 rtc: cmos: avoid taking rtc_lock for extended period of time
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Torokhov <[email protected]>
[ Upstream commit 0a6efab33eab4e973db26d9f90c3e97a7a82e399 ]
On my device reading entirety of /sys/devices/pnp0/00:03/cmos_nvram0/nvmem takes about 9 msec during which time interrupts are off on the CPU that does the read and the thread that performs the read can not be migrated or preempted by another higher priority thread (RT or not).
Allow readers and writers be preempted by taking and releasing rtc_lock spinlock for each individual byte read or written rather than once per read/write request.
--- drivers/rtc/rtc-cmos.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-)
drivers/rtc/rtc-cmos.c +15 -16
@@ -645,18 +645,17 @@ static int cmos_nvram_read(void *priv, unsigned int off, void *val,unsigned char *buf = val; off +=NVRAM_OFFSET ; -spin_lock_irq (&rtc_lock); -for (; count; count--, off++) { +for (; count; count--, off++, buf++) { +guard (spinlock_irq)(&rtc_lock);if (off <128 ) - *buf++ =CMOS_READ (off); + *buf =CMOS_READ (off);else if (can_bank2) - *buf++ =cmos_read_bank2 (off); + *buf =cmos_read_bank2 (off);else -break ; +return -EIO ; } -spin_unlock_irq (&rtc_lock); -return count ? -EIO :0 ; +return 0 ; } static int cmos_nvram_write(void *priv, unsigned int off, void *val,
@@ -671,23 +670,23 @@ static int cmos_nvram_write(void *priv, unsigned int off, void *val,* NVRAM to update, updating checksums is also part of its job. */ off +=NVRAM_OFFSET ; -spin_lock_irq (&rtc_lock); -for (; count; count--, off++) { +for (; count; count--, off++, buf++) {/* don't trash RTC registers */ if (off == cmos->day_alrm || off == cmos->mon_alrm || off == cmos->century) - buf++; -else if (off <128 ) -CMOS_WRITE (*buf++, off); +continue ; + +guard (spinlock_irq)(&rtc_lock); +if (off <128 ) +CMOS_WRITE (*buf, off);else if (can_bank2) -cmos_write_bank2 (*buf++, off); +cmos_write_bank2 (*buf, off);else -break ; +return -EIO ; } -spin_unlock_irq (&rtc_lock); -return count ? -EIO :0 ; +return 0 ; }/*----------------------------------------------------------------*/
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 424/466 serial: 8250_dw: Add Sophgo SG2044 quirk
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Inochi Amaoto <[email protected]>
[ Upstream commit cad4dda82c7eedcfc22597267e710ccbcf39d572 ]
SG2044 relys on an internal divisor when calculating bitrate, which means a wrong clock for the most common bitrates. So add a quirk for this uart device to skip the set rate call and only relys on the internal UART divisor.
--- drivers/tty/serial/8250/8250_dw.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/tty/serial/8250/8250_dw.c +3 -2
@@ -750,7 +750,7 @@ static const struct dw8250_platform_data dw8250_renesas_rzn1_data = { .quirks = DW_UART_QUIRK_CPR_VALUE | DW_UART_QUIRK_IS_DMA_FC, }; -static const struct dw8250_platform_data dw8250_starfive_jh7100_data = { +static const struct dw8250_platform_data dw8250_skip_set_rate_data = { .usr_reg =DW_UART_USR , .quirks =DW_UART_QUIRK_SKIP_SET_RATE , };
@@ -760,7 +760,8 @@ static const struct of_device_id dw8250_of_match[] = { { .compatible = "cavium,octeon-3860-uart", .data = &dw8250_octeon_3860_data }, { .compatible = "marvell,armada-38x-uart", .data = &dw8250_armada_38x_data }, { .compatible = "renesas,rzn1-uart", .data = &dw8250_renesas_rzn1_data }, - { .compatible = "starfive,jh7100-uart", .data = &dw8250_starfive_jh7100_data }, + { .compatible = "sophgo,sg2044-uart", .data = &dw8250_skip_set_rate_data }, + { .compatible = "starfive,jh7100-uart", .data = &dw8250_skip_set_rate_data }, {/* Sentinel */ } };MODULE_DEVICE_TABLE (of, dw8250_of_match);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 425/466 Revert "nvme: make keep-alive synchronous operation"
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nilay Shroff <[email protected]>
[ Upstream commit 84488282166de6b6760ada8030e87aaa08bce3aa ]
This reverts commit d06923670b5a5f609603d4a9fee4dec02d38de9c.
It was realized that the fix implemented to contain the race condition among the keep alive task and the fabric shutdown code path in the commit d06923670b5ia ("nvme: make keep-alive synchronous operation") is not optimal. The reason being keep-alive runs under the workqueue and making it synchronous would waste a workqueue context.
Furthermore, we later found that the above race condition is a regression caused due to the changes implemented in commit a54a93d0e359 ("nvme: move stopping keep-alive into nvme_uninit_ctrl()"). So we decided to revert the commit d06923670b5a ("nvme: make keep-alive synchronous operation") and then fix the regression.
--- drivers/nvme/host/core.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-)
drivers/nvme/host/core.c +10 -7
@@ -1303,9 +1303,10 @@ static void nvme_queue_keep_alive_work(struct nvme_ctrl *ctrl)queue_delayed_work (nvme_wq, &ctrl->ka_work, delay); } -static void nvme_keep_alive_finish (struct request *rq, -blk_status_t status,struct nvme_ctrl *ctrl) +static enum rq_end_io_ret nvme_keep_alive_end_io (struct request *rq, +blk_status_t status) { +struct nvme_ctrl *ctrl = rq->end_io_data;unsigned long rtt = jiffies - (rq->deadline - rq->timeout);unsigned long delay =nvme_keep_alive_work_period (ctrl);enum nvme_ctrl_state state =nvme_ctrl_state (ctrl);
@@ -1322,17 +1323,20 @@ static void nvme_keep_alive_finish(struct request *rq, delay =0 ; } +blk_mq_free_request (rq); +if (status) {dev_err (ctrl->device,"failed nvme_keep_alive_end_io error=%d\n" , status); -return ; +return RQ_END_IO_NONE ; } ctrl->ka_last_check_time = jiffies; ctrl->comp_seen = false;if (state ==NVME_CTRL_LIVE || state ==NVME_CTRL_CONNECTING )queue_delayed_work (nvme_wq, &ctrl->ka_work, delay); +return RQ_END_IO_NONE ; }static void nvme_keep_alive_work (struct work_struct *work)
@@ -1341,7 +1345,6 @@ static void nvme_keep_alive_work(struct work_struct *work) struct nvme_ctrl, ka_work);bool comp_seen = ctrl->comp_seen;struct request *rq; -blk_status_t status; ctrl->ka_last_check_time = jiffies;
@@ -1364,9 +1367,9 @@ static void nvme_keep_alive_work(struct work_struct *work)nvme_init_request (rq, &ctrl->ka_cmd); rq->timeout = ctrl->kato *HZ ; - status =blk_execute_rq (rq, false); -nvme_keep_alive_finish (rq, status, ctrl); -blk_mq_free_request (rq); + rq->end_io = nvme_keep_alive_end_io; + rq->end_io_data = ctrl; +blk_execute_rq_nowait (rq, false); }static void nvme_start_keep_alive (struct nvme_ctrl *ctrl)
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 426/466 irqchip/gicv3-its: Add workaround for hip09 ITS erratum 162100801
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zhou Wang <[email protected]>
[ Upstream commit f82e62d470cc990ebd9d691f931dd418e4e9cea9 ]
When enabling GICv4.1 in hip09, VMAPP fails to clear some caches during the unmap operation, which can causes vSGIs to be lost.
To fix the issue, invalidate the related vPE cache through GICR_INVALLR after VMOVP.
--- Documentation/arch/arm64/silicon-errata.rst | 2 + arch/arm64/Kconfig | 11 +++++ drivers/irqchip/irq-gic-v3-its.c | 50 ++++++++++++++++----- 3 files changed, 52 insertions(+), 11 deletions(-)
Documentation/arch/arm64/silicon-errata.rst +2 -0
@@ -258,6 +258,8 @@ stable kernels. | Hisilicon | Hip{08,09,10,10C| #162001900 | N/A | | | ,11} SMMU PMCG | | | +----------------+-----------------+-----------------+-----------------------------+ +| Hisilicon | Hip09 | #162100801 | HISILICON_ERRATUM_162100801 | ++----------------+-----------------+-----------------+-----------------------------+ +----------------+-----------------+-----------------+-----------------------------+ | Qualcomm Tech. | Kryo/Falkor v1 | E1003 | QCOM_FALKOR_ERRATUM_1003 | +----------------+-----------------+-----------------+-----------------------------+
arch/arm64/Kconfig +11 -0
@@ -1232,6 +1232,17 @@ config HISILICON_ERRATUM_161600802 If unsure, say Y. +config HISILICON_ERRATUM_162100801 + bool "Hip09 162100801 erratum support" + default y + help + When enabling GICv4.1 in hip09, VMAPP will fail to clear some caches + during unmapping operation, which will cause some vSGIs lost. + To fix the issue, invalidate related vPE cache through GICR_INVALLR + after VMOVP. + + If unsure, say Y. + config QCOM_FALKOR_ERRATUM_1003 bool "Falkor E1003: Incorrect translation due to ASID change" default y
drivers/irqchip/irq-gic-v3-its.c +39 -11
103 lines not on this page · raw message
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 427/466 smb: client: dont try following DFS links in cifs_tree_connect()
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Paulo Alcantara <[email protected]>
[ Upstream commit 36008fe6e3dc588e5e9ceae6e82c7f69399eb5d8 ]
We can't properly support chasing DFS links in cifs_tree_connect() because
(1) We don't support creating new sessions while we're reconnecting, which would be required for DFS interlinks.
(2) ->is_path_accessible() can't be called from cifs_tree_connect() as it would deadlock with smb2_reconnect(). This is required for checking if new DFS target is a nested DFS link.
By unconditionally trying to get an DFS referral from new DFS target isn't correct because if the new DFS target (interlink) is an DFS standalone namespace, then we would end up getting -ELOOP and then potentially leaving tcon disconnected.
--- fs/smb/client/dfs.c | 188 ++++---------------------------------------- 1 file changed, 17 insertions(+), 171 deletions(-)
fs/smb/client/dfs.c +17 -171
@@ -321,49 +321,6 @@ int dfs_mount_share(struct cifs_mount_ctx *mnt_ctx)return rc; } -/* Update dfs referral path of superblock */ -static int update_server_fullpath (struct TCP_Server_Info *server,struct cifs_sb_info *cifs_sb, -const char *target) -{ -int rc =0 ; -size_t len =strlen (target); -char *refpath, *npath; - -if (unlikely (len <2 || *target !='\\' )) -return -EINVAL ; - -if (target[1 ] =='\\' ) { - len +=1 ; - refpath =kmalloc (len,GFP_KERNEL ); -if (!refpath) -return -ENOMEM ; - -scnprintf (refpath, len,"%s" , target); - }else { - len +=sizeof ("\\" ); - refpath =kmalloc (len,GFP_KERNEL ); -if (!refpath) -return -ENOMEM ; - -scnprintf (refpath, len,"\\%s" , target); - } - - npath =dfs_cache_canonical_path (refpath, cifs_sb->local_nls,cifs_remap (cifs_sb)); -kfree (refpath); - -if (IS_ERR (npath)) { - rc =PTR_ERR (npath); - }else { -mutex_lock (&server->refpath_lock); -spin_lock (&server->srv_lock); -kfree (server->leaf_fullpath); - server->leaf_fullpath = npath; -spin_unlock (&server->srv_lock); -mutex_unlock (&server->refpath_lock); - } -return rc; -} -static int target_share_matches_server (struct TCP_Server_Info *server,char *share,bool *target_match) {
@@ -388,77 +345,22 @@ static int target_share_matches_server(struct TCP_Server_Info *server, char *shareturn rc; } -static void __tree_connect_ipc (const unsigned int xid,char *tree, -struct cifs_sb_info *cifs_sb, -struct cifs_ses *ses) -{ -struct TCP_Server_Info *server = ses->server; -struct cifs_tcon *tcon = ses->tcon_ipc; -int rc; - -spin_lock (&ses->ses_lock); -spin_lock (&ses->chan_lock); -if (cifs_chan_needs_reconnect (ses, server) || - ses->ses_status !=SES_GOOD ) { -spin_unlock (&ses->chan_lock); -spin_unlock (&ses->ses_lock); -cifs_server_dbg (FYI ,"%s: skipping ipc reconnect due to disconnected ses\n" , - __func__); -return ; - } -spin_unlock (&ses->chan_lock); -spin_unlock (&ses->ses_lock); - -cifs_server_lock (server); -scnprintf (tree,MAX_TREE_SIZE ,"\\\\%s\\IPC$" , server->hostname); -cifs_server_unlock (server); - - rc = server->ops->tree_connect (xid, ses, tree, tcon, - cifs_sb->local_nls); -cifs_server_dbg (FYI ,"%s: tree_reconnect %s: %d\n" , __func__, tree, rc); -spin_lock (&tcon->tc_lock); -if (rc) { - tcon->status =TID_NEED_TCON ; - }else { - tcon->status =TID_GOOD ; - tcon->need_reconnect = false; - } -spin_unlock (&tcon->tc_lock); -} - -static void tree_connect_ipc (const unsigned int xid,char *tree, -struct cifs_sb_info *cifs_sb, -struct cifs_tcon *tcon) -{ -struct cifs_ses *ses = tcon->ses; - -__tree_connect_ipc (xid, tree, cifs_sb, ses); -__tree_connect_ipc (xid, tree, cifs_sb,CIFS_DFS_ROOT_SES (ses)); -} - -static int __tree_connect_dfs_target (const unsigned int xid,struct cifs_tcon *tcon, -struct cifs_sb_info *cifs_sb,char *tree,bool islink, -struct dfs_cache_tgt_list *tl) +static int tree_connect_dfs_target (const unsigned int xid, +struct cifs_tcon *tcon, +struct cifs_sb_info *cifs_sb, +char *tree,bool islink, +struct dfs_cache_tgt_list *tl) { -int rc; +const struct smb_version_operations *ops = tcon->ses->server->ops;struct TCP_Server_Info *server = tcon->ses->server; -const struct smb_version_operations *ops = server->ops; -struct cifs_ses *root_ses =CIFS_DFS_ROOT_SES (tcon->ses); -char *share =NULL , *prefix =NULL ;struct dfs_cache_tgt_iterator *tit; +char *share =NULL , *prefix =NULL ;bool target_match; - - tit =dfs_cache_get_tgt_iterator (tl); -if (!tit) { - rc = -ENOENT ; - goto out; - } +int rc = -ENOENT ;/* Try to tree connect to all dfs targets */ -for (; tit; tit =dfs_cache_get_next_tgt (tl, tit)) { -const char *target =dfs_cache_get_tgt_name (tit); -DFS_CACHE_TGT_LIST (ntl); - +for (tit =dfs_cache_get_tgt_iterator (tl); + tit; tit =dfs_cache_get_next_tgt (tl, tit)) {kfree (share);kfree (prefix); share = prefix =NULL ;
@@ -479,69 +381,16 @@ static int __tree_connect_dfs_target(const unsigned int xid, struct cifs_tcon *t }dfs_cache_noreq_update_tgthint (server->leaf_fullpath +1 , tit); -tree_connect_ipc (xid, tree, cifs_sb, tcon); -scnprintf (tree,MAX_TREE_SIZE ,"\\%s" , share); -if (!islink) { - rc = ops->tree_connect (xid, tcon->ses, tree, tcon, cifs_sb->local_nls); -break ; - } - -/* -* If no dfs referrals were returned from link target, then just do a TREE_CONNECT -* to it. Otherwise, cache the dfs referral and then mark current tcp ses for -* reconnect so either the demultiplex thread or the echo worker will reconnect to -* newly resolved target. -*/ -if (dfs_cache_find (xid, root_ses, cifs_sb->local_nls,cifs_remap (cifs_sb), target, -NULL , &ntl)) { - rc = ops->tree_connect (xid, tcon->ses, tree, tcon, cifs_sb->local_nls); -if (rc) -continue ; - + rc = ops->tree_connect (xid, tcon->ses, tree, + tcon, tcon->ses->local_nls); +if (islink && !rc && cifs_sb) rc =cifs_update_super_prepath (cifs_sb, prefix); - }else { -/* Target is another dfs share */ - rc =update_server_fullpath (server, cifs_sb, target); -dfs_cache_free_tgts (tl); - -if (!rc) { - rc = -EREMOTE ; -list_replace_init (&ntl.tl_list, &tl->tl_list); - }else -dfs_cache_free_tgts (&ntl); - }break ; } -out:kfree (share);kfree (prefix); - -return rc; -} - -static int tree_connect_dfs_target (const unsigned int xid,struct cifs_tcon *tcon, -struct cifs_sb_info *cifs_sb,char *tree,bool islink, -struct dfs_cache_tgt_list *tl) -{ -int rc; -int num_links =0 ; -struct TCP_Server_Info *server = tcon->ses->server; -char *old_fullpath = server->leaf_fullpath; - -do { - rc =__tree_connect_dfs_target (xid, tcon, cifs_sb, tree, islink, tl); -if (!rc || rc != -EREMOTE ) -break ; - }while (rc = -ELOOP , ++num_links <MAX_NESTED_LINKS ); -/* -* If we couldn't tree connect to any targets from last referral path, then -* retry it from newly resolved dfs referral. -*/ -if (rc && server->leaf_fullpath != old_fullpath) -cifs_signal_cifsd_for_reconnect (server, true); -dfs_cache_free_tgts (tl);return rc; }
@@ -596,14 +445,11 @@ int cifs_tree_connect(const unsigned int xid, struct cifs_tcon *tcon, const struif (!IS_ERR (sb)) cifs_sb =CIFS_SB (sb); -/* -* Tree connect to last share in @tcon->tree_name whether dfs super or -* cached dfs referral was not found. -*/ -if (!cifs_sb || !server->leaf_fullpath || +/* Tree connect to last share in @tcon->tree_name if no DFS referral */ +if (!server->leaf_fullpath ||dfs_cache_noreq_find (server->leaf_fullpath +1 , &ref, &tl)) { - rc = ops->tree_connect (xid, tcon->ses, tcon->tree_name, tcon, - cifs_sb ? cifs_sb->local_nls : nlsc); + rc = ops->tree_connect (xid, tcon->ses, tcon->tree_name, + tcon, tcon->ses->local_nls); goto out; }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 428/466 setlocalversion: work around "git describe" performance
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rasmus Villemoes <[email protected]>
[ Upstream commit 523f3dbc187a9618d4fd80c2b438e4d490705dcd ]
Contrary to expectations, passing a single candidate tag to "git describe" is slower than not passing any --match options.
$ time git describe --debug ... traversed 10619 commits ... v6.12-rc5-63-g0fc810ae3ae1
real 0m0.169s
$ time git describe --match=v6.12-rc5 --debug ... traversed 1310024 commits v6.12-rc5-63-g0fc810ae3ae1
real 0m1.281s
In fact, the --debug output shows that git traverses all or most of history. For some repositories and/or git versions, those 1.3s are actually 10-15 seconds.
This has been acknowledged as a performance bug in git [1], and a fix is on its way [2]. However, no solution is yet in git.git, and even when one lands, it will take quite a while before it finds its way to a release and for $random_kernel_developer to pick that up.
So rewrite the logic to use plumbing commands. For each of the candidate values of $tag, we ask: (1) is $tag even an annotated tag? (2) Is it eligible to describe HEAD, i.e. an ancestor of HEAD? (3) If so, how many commits are in $tag..HEAD?
I have tested that this produces the same output as the current script for ~700 random commits between v6.9..v6.10. For those 700 commits, and in my git repo, the 'make -s kernelrelease' command is on average ~4 times faster with this patch applied (geometric mean of ratios).
For the commit mentioned in Josh's original report [3], the time-consuming part of setlocalversion goes from
$ time git describe --match=v6.12-rc5 c1e939a21eb1 v6.12-rc5-44-gc1e939a21eb1
real 0m1.210s
to
$ time git rev-list --count --left-right v6.12-rc5..c1e939a21eb1 0 44
real 0m0.037s
[1] https://lore.kernel.org/git/[email protected]/
[2] https://lore.kernel.org/git/[email protected]/
[3] https://lore.kernel.org/lkml/309549cafdcfe50c4fceac3263220cc3d8b109b2.1730337435.git.jpoimboe@kernel.org/
--- scripts/setlocalversion | 54 +++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 16 deletions(-)
scripts/setlocalversion +38 -16
@@ -30,6 +30,27 @@ if test $# -gt 0 -o ! -d "$srctree"; then usage fi +try_tag() { + tag="$1" + + # Is $tag an annotated tag? + [ "$(git cat-file -t "$tag" 2> /dev/null)" = tag ] || return 1 + + # Is it an ancestor of HEAD, and if so, how many commits are in $tag..HEAD? + # shellcheck disable=SC2046 # word splitting is the point here + set -- $(git rev-list --count --left-right "$tag"...HEAD 2> /dev/null) + + # $1 is 0 if and only if $tag is an ancestor of HEAD. Use + # string comparison, because $1 is empty if the 'git rev-list' + # command somehow failed. + [ "$1" = 0 ] || return 1 + + # $2 is the number of commits in the range $tag..HEAD, possibly 0. + count="$2" + + return 0 +} + scm_version() { local short=false
@@ -61,33 +82,33 @@ scm_version() # stable kernel: 6.1.7 -> v6.1.7 version_tag=v$(echo "${KERNELVERSION}" | sed -E 's/^([0-9]+\.[0-9]+)\.0(.*)$/\1\2/') + # try_tag initializes count if the tag is usable. + count= + # If a localversion* file exists, and the corresponding # annotated tag exists and is an ancestor of HEAD, use # it. This is the case in linux-next. - tag=${file_localversion#-} - desc= - if [ -n "${tag}" ]; then - desc=$(git describe --match=$tag 2>/dev/null) + if [ -n "${file_localversion#-}" ] ; then + try_tag "${file_localversion#-}" fi # Otherwise, if a localversion* file exists, and the tag # obtained by appending it to the tag derived from # KERNELVERSION exists and is an ancestor of HEAD, use # it. This is e.g. the case in linux-rt. - if [ -z "${desc}" ] && [ -n "${file_localversion}" ]; then - tag="${version_tag}${file_localversion}" - desc=$(git describe --match=$tag 2>/dev/null) + if [ -z "${count}" ] && [ -n "${file_localversion}" ]; then + try_tag "${version_tag}${file_localversion}" fi # Otherwise, default to the annotated tag derived from KERNELVERSION. - if [ -z "${desc}" ]; then - tag="${version_tag}" - desc=$(git describe --match=$tag 2>/dev/null) + if [ -z "${count}" ]; then + try_tag "${version_tag}" fi - # If we are at the tagged commit, we ignore it because the version is - # well-defined. - if [ "${tag}" != "${desc}" ]; then + # If we are at the tagged commit, we ignore it because the + # version is well-defined. If none of the attempted tags exist + # or were usable, $count is still empty. + if [ -z "${count}" ] || [ "${count}" -gt 0 ]; then # If only the short version is requested, don't bother # running further git commands
@@ -95,14 +116,15 @@ scm_version() echo "+" return fi + # If we are past the tagged commit, we pretty print it. # (like 6.1.0-14595-g292a089d78d3) - if [ -n "${desc}" ]; then - echo "${desc}" | awk -F- '{printf("-%05d", $(NF-1))}' + if [ -n "${count}" ]; then + printf "%s%05d" "-" "${count}" fi # Add -g and exactly 12 hex chars. - printf '%s%s' -g "$(echo $head | cut -c1-12)" + printf '%s%.12s' -g "$head" fi if ${no_dirty}; then
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 429/466 io_uring/tctx: work around xa_store() allocation error issue
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jens Axboe <[email protected]>
[ Upstream commit 7eb75ce7527129d7f1fee6951566af409a37a1c4 ]
syzbot triggered the following WARN_ON:
WARNING: CPU: 0 PID: 16 at io_uring/tctx.c:51 __io_uring_free+0xfa/0x140 io_uring/tctx.c:51
which is the
WARN_ON_ONCE(!xa_empty(&tctx->xa));
sanity check in __io_uring_free() when a io_uring_task is going through its final put. The syzbot test case includes injecting memory allocation failures, and it very much looks like xa_store() can fail one of its memory allocations and end up with ->head being non-NULL even though no entries exist in the xarray.
Until this issue gets sorted out, work around it by attempting to iterate entries in our xarray, and WARN_ON_ONCE() if one is found.
--- io_uring/tctx.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)
io_uring/tctx.c +12 -1
@@ -47,8 +47,19 @@ static struct io_wq *io_init_wq_offload(struct io_ring_ctx *ctx,void __io_uring_free (struct task_struct *tsk) {struct io_uring_task *tctx = tsk->io_uring; +struct io_tctx_node *node; +unsigned long index; -WARN_ON_ONCE (!xa_empty (&tctx->xa)); +/* +* Fault injection forcing allocation errors in the xa_store() path +* can lead to xa_empty() returning false, even though no actual +* node is stored in the xarray. Until that gets sorted out, attempt +* an iteration here and warn if any entries are found. +*/ +xa_for_each (&tctx->xa, index, node) { +WARN_ON_ONCE (1 ); +break ; + }WARN_ON_ONCE (tctx->io_wq);WARN_ON_ONCE (tctx->cached_refs);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 430/466 scsi: ufs: pltfrm: Dellocate HBA during ufshcd_pltfrm_remove()
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Manivannan Sadhasivam <[email protected]>
[ Upstream commit 897df60c16d54ad515a3d0887edab5c63da06d1f ]
This will ensure that the scsi host is cleaned up properly using scsi_host_dev_release(). Otherwise, it may lead to memory leaks.
--- drivers/ufs/host/ufshcd-pltfrm.c | 1 + 1 file changed, 1 insertion(+)
drivers/ufs/host/ufshcd-pltfrm.c +1 -0
@@ -534,6 +534,7 @@ void ufshcd_pltfrm_remove(struct platform_device *pdev)pm_runtime_get_sync (&pdev->dev);ufshcd_remove (hba); +ufshcd_dealloc_host (hba);pm_runtime_disable (&pdev->dev);pm_runtime_put_noidle (&pdev->dev); }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 431/466 drm/xe/devcoredump: Use drm_puts and already cached local variables
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: John Harrison <[email protected]>
[ Upstream commit 9d86d080cfb3ab935c842ac5525a90430a14c998 ]
There are a bunch of calls to drm_printf with static strings. Switch them to drm_puts instead.
There are also a bunch of 'coredump->snapshot.XXX' references when 'coredump->snapshot' has alread been cached locally as 'ss'. So use 'ss->XXX' instead.
Stable-dep-of: 5dce85fecb87 ("drm/xe: Move the coredump registration to the worker thread")
--- drivers/gpu/drm/xe/xe_devcoredump.c | 40 ++++++++++++++--------------- 1 file changed, 20 insertions(+), 20 deletions(-)
drivers/gpu/drm/xe/xe_devcoredump.c +20 -20
@@ -85,9 +85,9 @@ static ssize_t __xe_devcoredump_read(char *buffer, size_t count, p =drm_coredump_printer (&iter); -drm_printf (&p,"**** Xe Device Coredump ****\n" ); -drm_printf (&p,"kernel: " UTS_RELEASE "\n" ); -drm_printf (&p,"module: " KBUILD_MODNAME "\n" ); +drm_puts (&p,"**** Xe Device Coredump ****\n" ); +drm_puts (&p,"kernel: " UTS_RELEASE "\n" ); +drm_puts (&p,"module: " KBUILD_MODNAME "\n" ); ts =ktime_to_timespec64 (ss->snapshot_time);drm_printf (&p,"Snapshot time: %lld.%09ld\n" , ts.tv_sec, ts.tv_nsec);
@@ -96,20 +96,20 @@ static ssize_t __xe_devcoredump_read(char *buffer, size_t count,drm_printf (&p,"Process: %s\n" , ss->process_name);xe_device_snapshot_print (xe, &p); -drm_printf (&p,"\n**** GuC CT ****\n" ); -xe_guc_ct_snapshot_print (coredump->snapshot.ct, &p); -xe_guc_exec_queue_snapshot_print (coredump->snapshot.ge, &p); +drm_puts (&p,"\n**** GuC CT ****\n" ); +xe_guc_ct_snapshot_print (ss->ct, &p); +xe_guc_exec_queue_snapshot_print (ss->ge, &p); -drm_printf (&p,"\n**** Job ****\n" ); -xe_sched_job_snapshot_print (coredump->snapshot.job, &p); +drm_puts (&p,"\n**** Job ****\n" ); +xe_sched_job_snapshot_print (ss->job, &p); -drm_printf (&p,"\n**** HW Engines ****\n" ); +drm_puts (&p,"\n**** HW Engines ****\n" );for (i =0 ; i <XE_NUM_HW_ENGINES ; i++) -if (coredump->snapshot.hwe[i]) -xe_hw_engine_snapshot_print (coredump->snapshot.hwe[i], - &p); -drm_printf (&p,"\n**** VM state ****\n" ); -xe_vm_snapshot_print (coredump->snapshot.vm, &p); +if (ss->hwe[i]) +xe_hw_engine_snapshot_print (ss->hwe[i], &p); + +drm_puts (&p,"\n**** VM state ****\n" ); +xe_vm_snapshot_print (ss->vm, &p);return count - iter.remain; }
@@ -247,18 +247,18 @@ static void devcoredump_snapshot(struct xe_devcoredump *coredump,if (xe_force_wake_get (gt_to_fw (q->gt),XE_FORCEWAKE_ALL ))xe_gt_info (ss->gt,"failed to get forcewake for coredump capture\n" ); - coredump->snapshot.ct =xe_guc_ct_snapshot_capture (&guc->ct, true); - coredump->snapshot.ge =xe_guc_exec_queue_snapshot_capture (q); - coredump->snapshot.job =xe_sched_job_snapshot_capture (job); - coredump->snapshot.vm =xe_vm_snapshot_capture (q->vm); + ss->ct =xe_guc_ct_snapshot_capture (&guc->ct, true); + ss->ge =xe_guc_exec_queue_snapshot_capture (q); + ss->job =xe_sched_job_snapshot_capture (job); + ss->vm =xe_vm_snapshot_capture (q->vm);for_each_hw_engine (hwe, q->gt, id) {if (hwe->class != q->hwe->class || !(BIT (hwe->logical_instance) & adj_logical_mask)) { - coredump->snapshot.hwe[id] =NULL ; + ss->hwe[id] =NULL ;continue ; } - coredump->snapshot.hwe[id] =xe_hw_engine_snapshot_capture (hwe); + ss->hwe[id] =xe_hw_engine_snapshot_capture (hwe); }queue_work (system_unbound_wq, &ss->work);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 432/466 drm/xe/devcoredump: Improve section headings and add tile info
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: John Harrison <[email protected]>
[ Upstream commit c28fd6c358db44c87a1408f27ba412c94e25e6c2 ]
The xe_guc_exec_queue_snapshot is not really a GuC internal thing and is definitely not a GuC CT thing. So give it its own section heading. The snapshot itself is really a capture of the submission backend's internal state. Although all it currently prints out is the submission contexts. So label it as 'Contexts'. If more general state is added later then it could be change to 'Submission backend' or some such.
Further, everything from the GuC CT section onwards is GT specific but there was no indication of which GT it was related to (and that is impossible to work out from the other fields that are given). So add a GT section heading. Also include the tile id of the GT, because again significant information.
Lastly, drop a couple of unnecessary line feeds within sections.
v2: Add GT section heading, add tile id to device section.
Stable-dep-of: 5dce85fecb87 ("drm/xe: Move the coredump registration to the worker thread")
--- drivers/gpu/drm/xe/xe_devcoredump.c | 5 +++++ drivers/gpu/drm/xe/xe_devcoredump_types.h | 3 ++- drivers/gpu/drm/xe/xe_device.c | 1 + drivers/gpu/drm/xe/xe_guc_submit.c | 2 +- drivers/gpu/drm/xe/xe_hw_engine.c | 1 - 5 files changed, 9 insertions(+), 3 deletions(-)
drivers/gpu/drm/xe/xe_devcoredump.c +5 -0
@@ -96,8 +96,13 @@ static ssize_t __xe_devcoredump_read(char *buffer, size_t count,drm_printf (&p,"Process: %s\n" , ss->process_name);xe_device_snapshot_print (xe, &p); +drm_printf (&p,"\n**** GT #%d ****\n" , ss->gt->info.id); +drm_printf (&p,"\tTile: %d\n" , ss->gt->tile->id); +drm_puts (&p,"\n**** GuC CT ****\n" );xe_guc_ct_snapshot_print (ss->ct, &p); + +drm_puts (&p,"\n**** Contexts ****\n" );xe_guc_exec_queue_snapshot_print (ss->ge, &p);drm_puts (&p,"\n**** Job ****\n" );
drivers/gpu/drm/xe/xe_devcoredump_types.h +2 -1
@@ -37,7 +37,8 @@ struct xe_devcoredump_snapshot {/* GuC snapshots */ /** @ct: GuC CT snapshot */ struct xe_guc_ct_snapshot *ct; -/** @ge: Guc Engine snapshot */ + +/** @ge: GuC Submission Engine snapshot */ struct xe_guc_submit_exec_queue_snapshot *ge;/** @hwe: HW Engine snapshot array */
drivers/gpu/drm/xe/xe_device.c +1 -0
@@ -919,6 +919,7 @@ void xe_device_snapshot_print(struct xe_device *xe, struct drm_printer *p)for_each_gt (gt, xe, id) {drm_printf (p,"GT id: %u\n" , id); +drm_printf (p,"\tTile: %u\n" , gt->tile->id);drm_printf (p,"\tType: %s\n" , gt->info.type ==XE_GT_TYPE_MAIN ?"main" :"media" ); drm_printf(p, "\tIP ver: %u.%u.%u\n",
drivers/gpu/drm/xe/xe_guc_submit.c +1 -1
@@ -2193,7 +2193,7 @@ xe_guc_exec_queue_snapshot_print(struct xe_guc_submit_exec_queue_snapshot *snapsif (!snapshot)return ; -drm_printf (p,"\nGuC ID: %d\n" , snapshot->guc.id); +drm_printf (p,"GuC ID: %d\n" , snapshot->guc.id);drm_printf (p,"\tName: %s\n" , snapshot->name);drm_printf (p,"\tClass: %d\n" , snapshot->class);drm_printf (p,"\tLogical mask: 0x%x\n" , snapshot->logical_mask);
drivers/gpu/drm/xe/xe_hw_engine.c +0 -1
@@ -1053,7 +1053,6 @@ void xe_hw_engine_snapshot_print(struct xe_hw_engine_snapshot *snapshot,if (snapshot->hwe->class ==XE_ENGINE_CLASS_COMPUTE )drm_printf (p,"\tRCU_MODE: 0x%08x\n" , snapshot->reg.rcu_mode); -drm_puts (p,"\n" ); }/**
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 433/466 drm/xe/devcoredump: Add ASCII85 dump helper function
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: John Harrison <[email protected]>
[ Upstream commit ec1455ce7e35a31289d2dbc1070b980538698921 ]
There is a need to include the GuC log and other large binary objects in core dumps and via dmesg. So add a helper for dumping to a printer function via conversion to ASCII85 encoding.
Another issue with dumping such a large buffer is that it can be slow, especially if dumping to dmesg over a serial port. So add a yield to prevent the 'task has been stuck for 120s' kernel hang check feature from firing.
v2: Add a prefix to the output string. Fix memory allocation bug.
v3: Correct a string size calculation and clean up a define (review feedback from Julia F).
Stable-dep-of: 5dce85fecb87 ("drm/xe: Move the coredump registration to the worker thread")
--- drivers/gpu/drm/xe/xe_devcoredump.c | 87 +++++++++++++++++++++++++++++ drivers/gpu/drm/xe/xe_devcoredump.h | 6 ++ 2 files changed, 93 insertions(+)
drivers/gpu/drm/xe/xe_devcoredump.c +87 -0
@@ -6,6 +6,7 @@#include "xe_devcoredump.h" #include "xe_devcoredump_types.h" +#include <linux/ascii85.h> #include <linux/devcoredump.h> #include <generated/utsrelease.h>
@@ -315,3 +316,89 @@ int xe_devcoredump_init(struct xe_device *xe) }#endif + +/** +* xe_print_blob_ascii85 - print a BLOB to some useful location in ASCII85 +* +* The output is split to multiple lines because some print targets, e.g. dmesg +* cannot handle arbitrarily long lines. Note also that printing to dmesg in +* piece-meal fashion is not possible, each separate call to drm_puts() has a +* line-feed automatically added! Therefore, the entire output line must be +* constructed in a local buffer first, then printed in one atomic output call. +* +* There is also a scheduler yield call to prevent the 'task has been stuck for +* 120s' kernel hang check feature from firing when printing to a slow target +* such as dmesg over a serial port. +* +* TODO: Add compression prior to the ASCII85 encoding to shrink huge buffers down. +* +* @p: the printer object to output to +* @prefix: optional prefix to add to output string +* @blob: the Binary Large OBject to dump out +* @offset: offset in bytes to skip from the front of the BLOB, must be a multiple of sizeof(u32) +* @size: the size in bytes of the BLOB, must be a multiple of sizeof(u32) +*/ +void xe_print_blob_ascii85 (struct drm_printer *p,const char *prefix, +const void *blob,size_t offset,size_t size) +{ +const u32 *blob32 = (const u32 *)blob; +char buff[ASCII85_BUFSZ ], *line_buff; +size_t line_pos =0 ; + +#define DMESG_MAX_LINE_LEN 800 +#define MIN_SPACE (ASCII85_BUFSZ + 2)/* 85 + "\n\0" */ + +if (size &3 ) +drm_printf (p,"Size not word aligned: %zu" , size); +if (offset &3 ) +drm_printf (p,"Offset not word aligned: %zu" , size); + + line_buff =kzalloc (DMESG_MAX_LINE_LEN ,GFP_KERNEL ); +if (IS_ERR_OR_NULL (line_buff)) { +drm_printf (p,"Failed to allocate line buffer: %pe" , line_buff); +return ; + } + + blob32 += offset /sizeof (*blob32); + size /=sizeof (*blob32); + +if (prefix) { +strscpy (line_buff, prefix,DMESG_MAX_LINE_LEN -MIN_SPACE -2 ); + line_pos =strlen (line_buff); + + line_buff[line_pos++] =':' ; + line_buff[line_pos++] =' ' ; + } + +while (size--) { +u32 val = *(blob32++); + +strscpy (line_buff + line_pos,ascii85_encode (val, buff), +DMESG_MAX_LINE_LEN - line_pos); + line_pos +=strlen (line_buff + line_pos); + +if ((line_pos +MIN_SPACE ) >=DMESG_MAX_LINE_LEN ) { + line_buff[line_pos++] ='\n' ; + line_buff[line_pos++] =0 ; + +drm_puts (p, line_buff); + + line_pos =0 ; + +/* Prevent 'stuck thread' time out errors */ +cond_resched (); + } + } + +if (line_pos) { + line_buff[line_pos++] ='\n' ; + line_buff[line_pos++] =0 ; + +drm_puts (p, line_buff); + } + +kfree (line_buff); + +#undef MIN_SPACE +#undef DMESG_MAX_LINE_LEN +}
drivers/gpu/drm/xe/xe_devcoredump.h +6 -0
@@ -6,6 +6,9 @@#ifndef _XE_DEVCOREDUMP_H_#define _XE_DEVCOREDUMP_H_ +#include <linux/types.h> + +struct drm_printer ;struct xe_device ;struct xe_sched_job ;
@@ -23,4 +26,7 @@ static inline int xe_devcoredump_init(struct xe_device *xe) }#endif +void xe_print_blob_ascii85 (struct drm_printer *p,const char *prefix, +const void *blob,size_t offset,size_t size); +#endif
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 434/466 drm/xe/guc: Copy GuC log prior to dumping
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: John Harrison <[email protected]>
[ Upstream commit a59a403419aa03d5e44c8cf014e415490395b17f ]
Add an extra stage to the GuC log print to copy the log buffer into regular host memory first, rather than printing the live GPU buffer object directly. Doing so helps prevent inconsistencies due to the log being updated as it is being dumped. It also allows the use of the ASCII85 helper function for printing the log in a more compact form than a straight hex dump.
v2: Use %zx instead of %lx for size_t prints.
v3: Replace hexdump code with ascii85 call (review feedback from Matthew B). Move chunking code into next patch as that reduces the deltas of both.
v4: Add a prefix to the ASCII85 output to aid tool parsing.
Stable-dep-of: 5dce85fecb87 ("drm/xe: Move the coredump registration to the worker thread")
--- drivers/gpu/drm/xe/xe_guc_log.c | 40 +++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 17 deletions(-)
drivers/gpu/drm/xe/xe_guc_log.c +23 -17
@@ -6,9 +6,12 @@#include "xe_guc_log.h" #include <drm/drm_managed.h> +#include <linux/vmalloc.h> #include "xe_bo.h" +#include "xe_devcoredump.h" #include "xe_gt.h" +#include "xe_gt_printk.h" #include "xe_map.h" #include "xe_module.h"
@@ -49,32 +52,35 @@ static size_t guc_log_size(void)CAPTURE_BUFFER_SIZE ; } +/** +* xe_guc_log_print - dump a copy of the GuC log to some useful location +* @log: GuC log structure +* @p: the printer object to output to +*/ void xe_guc_log_print (struct xe_guc_log *log,struct drm_printer *p) {struct xe_device *xe =log_to_xe (log);size_t size; -int i, j; +void *copy; -xe_assert (xe, log->bo); +if (!log->bo) { +drm_puts (p,"GuC log buffer not allocated" ); +return ; + } size = log->bo->size; -#define DW_PER_READ 128 -xe_assert (xe, !(size % (DW_PER_READ *sizeof (u32)))); -for (i =0 ; i < size /sizeof (u32); i +=DW_PER_READ ) { -u32 read[DW_PER_READ ]; - -xe_map_memcpy_from (xe, read, &log->bo->vmap, i *sizeof (u32), -DW_PER_READ *sizeof (u32)); -#define DW_PER_PRINT 4 -for (j =0 ; j <DW_PER_READ /DW_PER_PRINT ; ++j) { -u32 *print = read + j *DW_PER_PRINT ; - -drm_printf (p,"0x%08x 0x%08x 0x%08x 0x%08x\n" , - *(print +0 ), *(print +1 ), - *(print +2 ), *(print +3 )); - } + copy =vmalloc (size); +if (!copy) { +drm_printf (p,"Failed to allocate %zu" , size); +return ; } + +xe_map_memcpy_from (xe, copy, &log->bo->vmap,0 , size); + +xe_print_blob_ascii85 (p,"Log data" , copy,0 , size); + +vfree (copy); }int xe_guc_log_init (struct xe_guc_log *log)
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 435/466 drm/xe/forcewake: Add a helper xe_force_wake_ref_has_domain()
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Himal Prasad Ghimiray <[email protected]>
[ Upstream commit 9d62b07027f0710b7af03d78780d0a6c2425bc1e ]
The helper xe_force_wake_ref_has_domain() checks if the input domain has been successfully reference-counted and awakened in the reference.
v2
- Fix commit message and kernel-doc (Michal)
- Remove unnecessary paranthesis (Michal)
Stable-dep-of: 5dce85fecb87 ("drm/xe: Move the coredump registration to the worker thread")
--- drivers/gpu/drm/xe/xe_force_wake.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)
drivers/gpu/drm/xe/xe_force_wake.h +16 -0
@@ -46,4 +46,20 @@ xe_force_wake_assert_held(struct xe_force_wake *fw, xe_gt_assert(fw->gt, fw->awake_domains & domain); } +/** +* xe_force_wake_ref_has_domain - verifies if the domains are in fw_ref +* @fw_ref : the force_wake reference +* @domain : forcewake domain to verify +* +* This function confirms whether the @fw_ref includes a reference to the +* specified @domain. +* +* Return: true if domain is refcounted. +*/ +static inline bool +xe_force_wake_ref_has_domain (unsigned int fw_ref,enum xe_force_wake_domains domain) +{ +return fw_ref & domain; +} +#endif
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 436/466 drm/xe/devcoredump: Update handling of xe_force_wake_get return
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Himal Prasad Ghimiray <[email protected]>
[ Upstream commit 9ffd6ec2de08ef4ac5f17f6131d1db57613493f9 ]
xe_force_wake_get() now returns the reference count-incremented domain mask. If it fails for individual domains, the return value will always be 0. However, for XE_FORCEWAKE_ALL, it may return a non-zero value even in the event of failure. Use helper xe_force_wake_ref_has_domain to verify all domains are initialized or not. Update the return handling of xe_force_wake_get() to reflect this behavior, and ensure that the return value is passed as input to xe_force_wake_put().
v3
- return xe_wakeref_t instead of int in xe_force_wake_get()
v5
- return unsigned int for xe_force_wake_get()
v6
- use helper xe_force_wake_ref_has_domain()
v7
- Fix commit message
Stable-dep-of: 5dce85fecb87 ("drm/xe: Move the coredump registration to the worker thread")
--- drivers/gpu/drm/xe/xe_devcoredump.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)
drivers/gpu/drm/xe/xe_devcoredump.c +8 -6
@@ -147,13 +147,15 @@ static void xe_devcoredump_deferred_snap_work(struct work_struct *work) {struct xe_devcoredump_snapshot *ss =container_of (work,typeof (*ss), work);struct xe_devcoredump *coredump =container_of (ss,typeof (*coredump), snapshot); +unsigned int fw_ref;/* keep going if fw fails as we still want to save the memory and SW data */ -if (xe_force_wake_get (gt_to_fw (ss->gt),XE_FORCEWAKE_ALL )) + fw_ref =xe_force_wake_get (gt_to_fw (ss->gt),XE_FORCEWAKE_ALL ); +if (!xe_force_wake_ref_has_domain (fw_ref,XE_FORCEWAKE_ALL ))xe_gt_info (ss->gt,"failed to get forcewake for coredump capture\n" );xe_vm_snapshot_capture_delayed (ss->vm);xe_guc_exec_queue_snapshot_capture_delayed (ss->ge); -xe_force_wake_put (gt_to_fw (ss->gt),XE_FORCEWAKE_ALL ); +xe_force_wake_put (gt_to_fw (ss->gt), fw_ref);/* Calculate devcoredump size */ ss->read.size =__xe_devcoredump_read (NULL ,INT_MAX , coredump);
@@ -226,8 +228,9 @@ static void devcoredump_snapshot(struct xe_devcoredump *coredump,u32 width_mask = (0x1 << q->width) -1 ;const char *process_name ="no process" ; -int i; +unsigned int fw_ref;bool cookie; +int i; ss->snapshot_time =ktime_get_real (); ss->boot_time =ktime_get_boottime ();
@@ -250,8 +253,7 @@ static void devcoredump_snapshot(struct xe_devcoredump *coredump, }/* keep going if fw fails as we still want to save the memory and SW data */ -if (xe_force_wake_get (gt_to_fw (q->gt),XE_FORCEWAKE_ALL )) -xe_gt_info (ss->gt,"failed to get forcewake for coredump capture\n" ); + fw_ref =xe_force_wake_get (gt_to_fw (q->gt),XE_FORCEWAKE_ALL ); ss->ct =xe_guc_ct_snapshot_capture (&guc->ct, true); ss->ge =xe_guc_exec_queue_snapshot_capture (q);
@@ -269,7 +271,7 @@ static void devcoredump_snapshot(struct xe_devcoredump *coredump,queue_work (system_unbound_wq, &ss->work); -xe_force_wake_put (gt_to_fw (q->gt),XE_FORCEWAKE_ALL ); +xe_force_wake_put (gt_to_fw (q->gt), fw_ref);dma_fence_end_signalling (cookie); }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 437/466 drm/amd/display: Update Interface to Check UCLK DPM
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Austin Zheng <[email protected]>
[ Upstream commit b8d046985c2dc41a0e264a391da4606099f8d44f ]
[Why]
Videos using YUV420 format may result in high power being used. Disabling MPO may result in lower power usage.
Update interface that can be used to check power profile of a dc_state.
[How]
Allow pstate switching in VBlank as last entry in strategy candidates. Add helper functions that can be used to determine power level:
-get power profile after a dc_state has undergone full validation
Stable-dep-of: 6a7fd76b949e ("drm/amd/display: Add option to retrieve detile buffer size")
--- drivers/gpu/drm/amd/display/dc/core/dc.c | 9 ++++++++- .../dml21/src/dml2_pmo/dml2_pmo_dcn4_fams2.c | 1 + drivers/gpu/drm/amd/display/dc/inc/core_types.h | 4 ++++ .../dc/resource/dcn315/dcn315_resource.c | 6 ++++++ .../dc/resource/dcn401/dcn401_resource.c | 17 +++++++++++++++++ 5 files changed, 36 insertions(+), 1 deletion(-)
drivers/gpu/drm/amd/display/dc/core/dc.c +8 -1
@@ -6001,8 +6001,15 @@ void dc_set_edp_power(const struct dc *dc, struct dc_link *edp_link,struct dc_power_profile dc_get_power_profile_for_dc_state (const struct dc_state *context) {struct dc_power_profile profile = {0 }; +struct dc *dc =NULL ; - profile.power_level += !context->bw_ctx.bw.dcn.clk.p_state_change_support; +if (!context || !context->clk_mgr || !context->clk_mgr->ctx || !context->clk_mgr->ctx->dc) +return profile; + + dc = context->clk_mgr->ctx->dc; + +if (dc->res_pool->funcs->get_power_profile) + profile.power_level = dc->res_pool->funcs->get_power_profile (context);return profile; }
drivers/gpu/drm/amd/display/dc/dml2/dml21/src/dml2_pmo/dml2_pmo_dcn4_fams2.c +1 -0
@@ -1799,6 +1799,7 @@ bool pmo_dcn4_fams2_init_for_pstate_support(struct dml2_pmo_init_for_pstate_supp }if (s->pmo_dcn4.num_pstate_candidates >0 ) { + s->pmo_dcn4.pstate_strategy_candidates[s->pmo_dcn4.num_pstate_candidates-1 ].allow_state_increase = true; s->pmo_dcn4.cur_pstate_candidate =-1 ;return true; }else {
drivers/gpu/drm/amd/display/dc/inc/core_types.h +4 -0
@@ -215,6 +215,10 @@ struct resource_funcs {void (*get_panel_config_defaults)(struct dc_panel_config *panel_config);void (*build_pipe_pix_clk_params)(struct pipe_ctx *pipe_ctx); +/* +* Get indicator of power from a context that went through full validation +*/ +int (*get_power_profile)(const struct dc_state *context); };struct audio_support {
drivers/gpu/drm/amd/display/dc/resource/dcn315/dcn315_resource.c +6 -0
@@ -1812,6 +1812,11 @@ static void dcn315_get_panel_config_defaults(struct dc_panel_config *panel_confi *panel_config = panel_config_defaults; } +static int dcn315_get_power_profile (const struct dc_state *context) +{ +return !context->bw_ctx.bw.dcn.clk.p_state_change_support; +} +static struct dc_cap_funcs cap_funcs = { .get_dcc_compression_cap = dcn20_get_dcc_compression_cap };
@@ -1840,6 +1845,7 @@ static struct resource_funcs dcn315_res_pool_funcs = { .update_bw_bounding_box = dcn315_update_bw_bounding_box, .patch_unknown_plane_state = dcn20_patch_unknown_plane_state, .get_panel_config_defaults = dcn315_get_panel_config_defaults, + .get_power_profile = dcn315_get_power_profile, }; static bool dcn315_resource_construct(
drivers/gpu/drm/amd/display/dc/resource/dcn401/dcn401_resource.c +17 -0
@@ -1688,6 +1688,22 @@ static void dcn401_build_pipe_pix_clk_params(struct pipe_ctx *pipe_ctx) } } +static int dcn401_get_power_profile (const struct dc_state *context) +{ +int uclk_mhz = context->bw_ctx.bw.dcn.clk.dramclk_khz /1000 ; +int dpm_level =0 ; + +for (int i =0 ; i < context->clk_mgr->bw_params->clk_table.num_entries_per_clk.num_memclk_levels; i++) { +if (context->clk_mgr->bw_params->clk_table.entries[i].memclk_mhz ==0 || + uclk_mhz < context->clk_mgr->bw_params->clk_table.entries[i].memclk_mhz) +break ; +if (uclk_mhz > context->clk_mgr->bw_params->clk_table.entries[i].memclk_mhz) + dpm_level++; + } + +return dpm_level; +} +static struct resource_funcs dcn401_res_pool_funcs = { .destroy = dcn401_destroy_resource_pool, .link_enc_create = dcn401_link_encoder_create,
@@ -1714,6 +1730,7 @@ static struct resource_funcs dcn401_res_pool_funcs = { .prepare_mcache_programming = dcn401_prepare_mcache_programming, .build_pipe_pix_clk_params = dcn401_build_pipe_pix_clk_params, .calculate_mall_ways_from_bytes = dcn32_calculate_mall_ways_from_bytes, + .get_power_profile = dcn401_get_power_profile, };static uint32_t read_pipe_fuses (struct dc_context *ctx)
Signature · 1 line
2.43.0
Re: [PATCH 6.12 437/466] drm/amd/display: Update Interface to Check UCLK DPM
Quoted 13 lines · Greg Kroah-Hartman
6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Austin Zheng <[email protected]>
[ Upstream commit
b8d046985c2dc41a0e264a391da4606099f8d44f][Why]
Videos using YUV420 format may result in high power being used. Disabling MPO may result in lower power usage.
Update interface that can be used to check power profile of adc_state.
Quoted 4 lines
[How]
Allow pstate switching in VBlank as last entry in strategy candidates. Add helper functions that can be used to determine power level:
-get power profile after adc_statehas undergone full validation
FWIW this was reverted in the Linus' tree:
commit 0e93b76cf92f229409e8da85c2a143868835fec3
Author: Austin Zheng <[email protected]> Date: Mon Sep 23 10:07:32 2024 -0400
drm/amd/display: Revert commit Update Interface to Check UCLK DPM
This reverts commit b8d046985c2dc41a0e264a391da4606099f8d44f.
Reverting as regression discovered on certain systems and golden values need to updated.
Possibly, there are other fixes queued for 6.12, so the revert is not needed anymore?
Quoted 7 lines
Reviewed-by Aric Cyr <[email protected]>Signed-off-by Austin Zheng <[email protected]>Signed-off-by Aurabindo Pillai <[email protected]>Tested-by Daniel Wheeler <[email protected]>Signed-off-by Alex Deucher <[email protected]>Stable-dep-of:
6a7fd76b949e("drm/amd/display: Add option to retrieve detile buffer size")Signed-off-by Sasha Levin <[email protected]>
thanks,
Signature · 2 lines
js suse labs
Greg Kroah-Hartman
maintainerRe: [PATCH 6.12 437/466] drm/amd/display: Update Interface to Check UCLK DPM
Quoted 29 lines · Jiri Slaby
Quoted 13 lines · Greg Kroah-Hartman
6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Austin Zheng <[email protected]>
[ Upstream commit
b8d046985c2dc41a0e264a391da4606099f8d44f][Why]
Videos using YUV420 format may result in high power being used. Disabling MPO may result in lower power usage.
Update interface that can be used to check power profile of adc_state.Quoted 4 lines
[How]
Allow pstate switching in VBlank as last entry in strategy candidates. Add helper functions that can be used to determine power level:
-get power profile after adc_statehas undergone full validationFWIW this was reverted in the Linus' tree:
commit
0e93b76cf92f229409e8da85c2a143868835fec3Author: Austin Zheng <[email protected]> Date: Mon Sep 23 10:07:32 2024 -0400drm/amd/display: Revert commit Update Interface to Check UCLK DPM
This reverts commit
b8d046985c2dc41a0e264a391da4606099f8d44f.
Quoted 7 lines
Reverting as regression discovered on certain systems and golden values need to updated.
Possibly, there are other fixes queued for 6.12, so the revert is not needed anymore?
No, you are right, I need this one. For some reason I thought I had applied it but it failed to apply cleanly and so it was dropped. I'll go fix it up by hand now...
thanks,
greg k-h
Greg Kroah-Hartman
maintainerRe: [PATCH 6.12 437/466] drm/amd/display: Update Interface to Check UCLK DPM
Quoted 35 lines · Greg Kroah-Hartman
Quoted 34 lines · Jiri Slaby
Quoted 13 lines · Greg Kroah-Hartman
6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Austin Zheng <[email protected]>
[ Upstream commit
b8d046985c2dc41a0e264a391da4606099f8d44f][Why]
Videos using YUV420 format may result in high power being used. Disabling MPO may result in lower power usage.
Update interface that can be used to check power profile of adc_state.Quoted 4 lines
[How]
Allow pstate switching in VBlank as last entry in strategy candidates. Add helper functions that can be used to determine power level:
-get power profile after adc_statehas undergone full validationFWIW this was reverted in the Linus' tree:
commit
0e93b76cf92f229409e8da85c2a143868835fec3Author: Austin Zheng <[email protected]> Date: Mon Sep 23 10:07:32 2024 -0400drm/amd/display: Revert commit Update Interface to Check UCLK DPM
This reverts commit
b8d046985c2dc41a0e264a391da4606099f8d44f.Reverting as regression discovered on certain systems and golden values need to updated.
Quoted 6 lines
Quoted 2 lines
Possibly, there are other fixes queued for 6.12, so the revert is not needed anymore?
No, you are right, I need this one. For some reason I thought I had applied it but it failed to apply cleanly and so it was dropped. I'll go fix it up by hand now...
Nevermind, I just dropped this commit entirely, that was easier overall.
thanks for the review!
greg k-h
Greg Kroah-Hartman
maintainerPATCH 438/466 drm/amd/display: Add option to retrieve detile buffer size
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sung Lee <[email protected]>
[ Upstream commit 6a7fd76b949efe40fb6d6677f480e624e0cb6e40 ]
[WHY]
For better power profiling knowing the detile buffer size at a given point in time
would be useful.
[HOW]
Add interface to retrieve detile buffer from dc state.
--- drivers/gpu/drm/amd/display/dc/core/dc.c | 18 ++++++++++++++++++ drivers/gpu/drm/amd/display/dc/dc.h | 2 ++ .../gpu/drm/amd/display/dc/inc/core_types.h | 1 + .../display/dc/resource/dcn31/dcn31_resource.c | 7 +++++++ .../display/dc/resource/dcn31/dcn31_resource.h | 3 +++ .../dc/resource/dcn314/dcn314_resource.c | 1 + .../dc/resource/dcn315/dcn315_resource.c | 1 + .../dc/resource/dcn316/dcn316_resource.c | 1 + .../display/dc/resource/dcn35/dcn35_resource.c | 1 + .../dc/resource/dcn351/dcn351_resource.c | 1 + 10 files changed, 36 insertions(+)
drivers/gpu/drm/amd/display/dc/core/dc.c +18 -0
@@ -6013,3 +6013,21 @@ struct dc_power_profile dc_get_power_profile_for_dc_state(const struct dc_statereturn profile; } + +/* +********************************************************************************** +* dc_get_det_buffer_size_from_state() - extracts detile buffer size from dc state +* +* Called when DM wants to log detile buffer size from dc_state +* +********************************************************************************** +*/ +unsigned int dc_get_det_buffer_size_from_state (const struct dc_state *context) +{ +struct dc *dc = context->clk_mgr->ctx->dc; + +if (dc->res_pool->funcs->get_det_buffer_size) +return dc->res_pool->funcs->get_det_buffer_size (context); +else +return 0 ; +}
drivers/gpu/drm/amd/display/dc/dc.h +2 -0
@@ -2544,6 +2544,8 @@ struct dc_power_profile {struct dc_power_profile dc_get_power_profile_for_dc_state (const struct dc_state *context); +unsigned int dc_get_det_buffer_size_from_state (const struct dc_state *context); +/* DSC Interfaces */ #include "dc_dsc.h"
drivers/gpu/drm/amd/display/dc/inc/core_types.h +1 -0
@@ -219,6 +219,7 @@ struct resource_funcs {* Get indicator of power from a context that went through full validation */ int (*get_power_profile)(const struct dc_state *context); +unsigned int (*get_det_buffer_size)(const struct dc_state *context); };struct audio_support {
drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.c +7 -0
@@ -1721,6 +1721,12 @@ int dcn31_populate_dml_pipes_from_context(return pipe_cnt; } +unsigned int dcn31_get_det_buffer_size ( +const struct dc_state *context) +{ +return context->bw_ctx.dml.ip.det_buffer_size_kbytes; +} + void dcn31_calculate_wm_and_dlg( struct dc *dc, struct dc_state *context, display_e2e_pipe_params_st *pipes,
@@ -1843,6 +1849,7 @@ static struct resource_funcs dcn31_res_pool_funcs = { .update_bw_bounding_box = dcn31_update_bw_bounding_box, .patch_unknown_plane_state = dcn20_patch_unknown_plane_state, .get_panel_config_defaults = dcn31_get_panel_config_defaults, + .get_det_buffer_size = dcn31_get_det_buffer_size, }; static struct clock_source *dcn30_clock_source_create(
drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.h +3 -0
@@ -63,6 +63,9 @@ struct resource_pool *dcn31_create_resource_pool(const struct dc_init_data *init_data, struct dc *dc); +unsigned int dcn31_get_det_buffer_size ( +const struct dc_state *context); +/*temp: B0 specific before switch to dcn313 headers*/ #ifndef regPHYPLLF_PIXCLK_RESYNC_CNTL#define regPHYPLLF_PIXCLK_RESYNC_CNTL 0x007e
drivers/gpu/drm/amd/display/dc/resource/dcn314/dcn314_resource.c +1 -0
@@ -1778,6 +1778,7 @@ static struct resource_funcs dcn314_res_pool_funcs = { .patch_unknown_plane_state = dcn20_patch_unknown_plane_state, .get_panel_config_defaults = dcn314_get_panel_config_defaults, .get_preferred_eng_id_dpia = dcn314_get_preferred_eng_id_dpia, + .get_det_buffer_size = dcn31_get_det_buffer_size, }; static struct clock_source *dcn30_clock_source_create(
drivers/gpu/drm/amd/display/dc/resource/dcn315/dcn315_resource.c +1 -0
@@ -1846,6 +1846,7 @@ static struct resource_funcs dcn315_res_pool_funcs = { .patch_unknown_plane_state = dcn20_patch_unknown_plane_state, .get_panel_config_defaults = dcn315_get_panel_config_defaults, .get_power_profile = dcn315_get_power_profile, + .get_det_buffer_size = dcn31_get_det_buffer_size, }; static bool dcn315_resource_construct(
drivers/gpu/drm/amd/display/dc/resource/dcn316/dcn316_resource.c +1 -0
@@ -1720,6 +1720,7 @@ static struct resource_funcs dcn316_res_pool_funcs = { .update_bw_bounding_box = dcn316_update_bw_bounding_box, .patch_unknown_plane_state = dcn20_patch_unknown_plane_state, .get_panel_config_defaults = dcn316_get_panel_config_defaults, + .get_det_buffer_size = dcn31_get_det_buffer_size, }; static bool dcn316_resource_construct(
drivers/gpu/drm/amd/display/dc/resource/dcn35/dcn35_resource.c +1 -0
@@ -1779,6 +1779,7 @@ static struct resource_funcs dcn35_res_pool_funcs = { .patch_unknown_plane_state = dcn20_patch_unknown_plane_state, .get_panel_config_defaults = dcn35_get_panel_config_defaults, .get_preferred_eng_id_dpia = dcn35_get_preferred_eng_id_dpia, + .get_det_buffer_size = dcn31_get_det_buffer_size, }; static bool dcn35_resource_construct(
drivers/gpu/drm/amd/display/dc/resource/dcn351/dcn351_resource.c +1 -0
@@ -1758,6 +1758,7 @@ static struct resource_funcs dcn351_res_pool_funcs = { .patch_unknown_plane_state = dcn20_patch_unknown_plane_state, .get_panel_config_defaults = dcn35_get_panel_config_defaults, .get_preferred_eng_id_dpia = dcn351_get_preferred_eng_id_dpia, + .get_det_buffer_size = dcn31_get_det_buffer_size, }; static bool dcn351_resource_construct(
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 439/466 sched: fix warning in sched_setaffinity
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josh Don <[email protected]>
[ Upstream commit 70ee7947a29029736a1a06c73a48ff37674a851b ]
Commit 8f9ea86fdf99b added some logic to sched_setaffinity that included a WARN when a per-task affinity assignment races with a cpuset update.
Specifically, we can have a race where a cpuset update results in the task affinity no longer being a subset of the cpuset. That's fine; we have a fallback to instead use the cpuset mask. However, we have a WARN set up that will trigger if the cpuset mask has no overlap at all with the requested task affinity. This shouldn't be a warning condition; its trivial to create this condition.
Reproduced the warning by the following setup:
- $PID inside a cpuset cgroup
- another thread repeatedly switching the cpuset cpus from 1-2 to just 1
- another thread repeatedly setting the $PID affinity (via taskset) to 2
--- kernel/sched/syscalls.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/sched/syscalls.c +1 -1
@@ -1238,7 +1238,7 @@ int __sched_setaffinity(struct task_struct *p, struct affinity_context *ctx)bool empty = !cpumask_and (new_mask, new_mask, ctx->user_mask); -if (WARN_ON_ONCE (empty)) +if (empty)cpumask_copy (new_mask, cpus_allowed); }__set_cpus_allowed_ptr (p, ctx);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 440/466 sched/core: Remove the unnecessary need_resched() check in nohz_csd_func()
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: K Prateek Nayak <[email protected]>
[ Upstream commit ea9cffc0a154124821531991d5afdd7e8b20d7aa ]
The need_resched() check currently in nohz_csd_func() can be tracked to have been added in scheduler_ipi() back in 2011 via commit ca38062e57e9 ("sched: Use resched IPI to kick off the nohz idle balance")
Since then, it has travelled quite a bit but it seems like an idle_cpu() check currently is sufficient to detect the need to bail out from an idle load balancing. To justify this removal, consider all the following case where an idle load balancing could race with a task wakeup:
o Since commit f3dd3f674555b ("sched: Remove the limitation of WF_ON_CPU on wakelist if wakee cpu is idle") a target perceived to be idle (target_rq->nr_running == 0) will return true for ttwu_queue_cond(target) which will offload the task wakeup to the idle target via an IPI.
In all such cases target_rq->ttwu_pending will be set to 1 before queuing the wake function.
If an idle load balance races here, following scenarios are possible:
- The CPU is not in TIF_POLLING_NRFLAG mode in which case an actual IPI is sent to the CPU to wake it out of idle. If the nohz_csd_func() queues before sched_ttwu_pending(), the idle load balance will bail out since idle_cpu(target) returns 0 since target_rq->ttwu_pending is 1. If the nohz_csd_func() is queued after sched_ttwu_pending() it should see rq->nr_running to be non-zero and bail out of idle load balancing.
- The CPU is in TIF_POLLING_NRFLAG mode and instead of an actual IPI, the sender will simply set TIF_NEED_RESCHED for the target to put it out of idle and flush_smp_call_function_queue() in do_idle() will execute the call function. Depending on the ordering of the queuing of nohz_csd_func() and sched_ttwu_pending(), the idle_cpu() check in nohz_csd_func() should either see target_rq->ttwu_pending = 1 or target_rq->nr_running to be non-zero if there is a genuine task wakeup racing with the idle load balance kick.
o The waker CPU perceives the target CPU to be busy (targer_rq->nr_running != 0) but the CPU is in fact going idle and due to a series of unfortunate events, the system reaches a case where the waker CPU decides to perform the wakeup by itself in ttwu_queue() on the target CPU but target is concurrently selected for idle load balance (XXX: Can this happen? I'm not sure, but we'll consider the mother of all coincidences to estimate the worst case scenario).
ttwu_do_activate() calls enqueue_task() which would increment "rq->nr_running" post which it calls wakeup_preempt() which is responsible for setting TIF_NEED_RESCHED (via a resched IPI or by setting TIF_NEED_RESCHED on a TIF_POLLING_NRFLAG idle CPU) The key thing to note in this case is that rq->nr_running is already non-zero in case of a wakeup before TIF_NEED_RESCHED is set which would lead to idle_cpu() check returning false.
In all cases, it seems that need_resched() check is unnecessary when checking for idle_cpu() first since an impending wakeup racing with idle load balancer will either set the "rq->ttwu_pending" or indicate a newly woken task via "rq->nr_running".
Chasing the reason why this check might have existed in the first place, I came across Peter's suggestion on the fist iteration of Suresh's patch from 2011 [1] where the condition to raise the SCHED_SOFTIRQ was:
sched_ttwu_do_pending(list); if (unlikely((rq->idle == current) && rq->nohz_balance_kick && !need_resched())) raise_softirq_irqoff(SCHED_SOFTIRQ);
Since the condition to raise the SCHED_SOFIRQ was preceded by sched_ttwu_do_pending() (which is equivalent of sched_ttwu_pending()) in the current upstream kernel, the need_resched() check was necessary to catch a newly queued task. Peter suggested modifying it to:
if (idle_cpu() && rq->nohz_balance_kick && !need_resched()) raise_softirq_irqoff(SCHED_SOFTIRQ);
where idle_cpu() seems to have replaced "rq->idle == current" check.
Even back then, the idle_cpu() check would have been sufficient to catch a new task being enqueued. Since commit b2a02fc43a1f ("smp: Optimize send_call_function_single_ipi()") overloads the interpretation of TIF_NEED_RESCHED for TIF_POLLING_NRFLAG idling, remove the need_resched() check in nohz_csd_func() to raise SCHED_SOFTIRQ based on Peter's suggestion.
--- kernel/sched/core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/sched/core.c +1 -1
@@ -1242,7 +1242,7 @@ static void nohz_csd_func(void *info)WARN_ON (!(flags &NOHZ_KICK_MASK )); rq->idle_balance =idle_cpu (cpu); -if (rq->idle_balance && !need_resched ()) { +if (rq->idle_balance) { rq->nohz_idle_balance = flags;raise_softirq_irqoff (SCHED_SOFTIRQ ); }
Signature · 1 line
2.43.0
Re: [PATCH 6.12 440/466] sched/core: Remove the unnecessary need_resched() check in nohz_csd_func()
Hello Greg, Sasha,
Quoted 85 lines · Greg Kroah-Hartman
6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: K Prateek Nayak <[email protected]>
[ Upstream commit
ea9cffc0a154124821531991d5afdd7e8b20d7aa]The
need_resched()check currently innohz_csd_func()can be tracked to have been added inscheduler_ipi()back in 2011 via commitca38062e57e9("sched: Use resched IPI to kick off the nohz idle balance")Since then, it has travelled quite a bit but it seems like an
idle_cpu()check currently is sufficient to detect the need to bail out from an idle load balancing. To justify this removal, consider all the following case where an idle load balancing could race with a task wakeup:o Since commit
f3dd3f674555b("sched: Remove the limitation ofWF_ON_CPUon wakelist if wakee cpu is idle") a target perceived to be idle (target_rq->nr_running== 0) will return true forttwu_queue_cond(target)which will offload the task wakeup to the idle target via an IPI.In all such cases
target_rq->ttwu_pendingwill be set to 1 before queuing the wake function.If an idle load balance races here, following scenarios are possible:
- The CPU is not in
TIF_POLLING_NRFLAGmode in which case an actual IPI is sent to the CPU to wake it out of idle. If thenohz_csd_func()queues beforesched_ttwu_pending(), the idle load balance will bail out sinceidle_cpu(target)returns 0 sincetarget_rq->ttwu_pendingis 1. If thenohz_csd_func()is queued aftersched_ttwu_pending()it should seerq->nr_runningto be non-zero and bail out of idle load balancing.- The CPU is in
TIF_POLLING_NRFLAGmode and instead of an actual IPI, the sender will simply setTIF_NEED_RESCHEDfor the target to put it out of idle andflush_smp_call_function_queue()indo_idle()will execute the call function. Depending on the ordering of the queuing ofnohz_csd_func()andsched_ttwu_pending(), theidle_cpu()check innohz_csd_func()should either seetarget_rq->ttwu_pending= 1 ortarget_rq->nr_runningto be non-zero if there is a genuine task wakeup racing with the idle load balance kick.o The waker CPU perceives the target CPU to be busy (
targer_rq->nr_running!= 0) but the CPU is in fact going idle and due to a series of unfortunate events, the system reaches a case where the waker CPU decides to perform the wakeup by itself inttwu_queue()on the target CPU but target is concurrently selected for idle load balance (XXX: Can this happen? I'm not sure, but we'll consider the mother of all coincidences to estimate the worst case scenario).
ttwu_do_activate()callsenqueue_task()which would increment "rq->nr_running" post which it callswakeup_preempt()which is responsible for settingTIF_NEED_RESCHED(via a resched IPI or by settingTIF_NEED_RESCHEDon aTIF_POLLING_NRFLAGidle CPU) The key thing to note in this case is thatrq->nr_runningis already non-zero in case of a wakeup beforeTIF_NEED_RESCHEDis set which would lead toidle_cpu()check returning false.In all cases, it seems that
need_resched()check is unnecessary when checking foridle_cpu()first since an impending wakeup racing with idle load balancer will either set the "rq->ttwu_pending" or indicate a newly woken task via "rq->nr_running".Chasing the reason why this check might have existed in the first place, I came across Peter's suggestion on the fist iteration of Suresh's patch from 2011 [1] where the condition to raise the
SCHED_SOFTIRQwas:sched_ttwu_do_pending(list); if (unlikely((rq->idle == current) && rq->nohz_balance_kick && !need_resched())) raise_softirq_irqoff(SCHED_SOFTIRQ);Since the condition to raise the
SCHED_SOFIRQwas preceded bysched_ttwu_do_pending()(which is equivalent ofsched_ttwu_pending()) in the current upstream kernel, theneed_resched()check was necessary to catch a newly queued task. Peter suggested modifying it to:if (idle_cpu() && rq->nohz_balance_kick && !need_resched()) raise_softirq_irqoff(SCHED_SOFTIRQ);
Quoted 8 lines
where
idle_cpu()seems to have replaced "rq->idle== current" check.Even back then, the
idle_cpu()check would have been sufficient to catch a new task being enqueued. Since commitb2a02fc43a1f("smp: Optimizesend_call_function_single_ipi()") overloads the interpretation ofTIF_NEED_RESCHEDforTIF_POLLING_NRFLAGidling, remove theneed_resched()check innohz_csd_func()to raiseSCHED_SOFTIRQbased on Peter's suggestion.
Since v6.12 added support for PREEMPT_RT, you'll see the following warning being triggered when booting with PREEMPT_RT enabled on 6.12.5-rc1:
------------[ cut here ]------------
WARNING: CPU: 40 PID: 0 at kernel/softirq.c:292 do_softirq_post_smp_call_flush+0x1a/0x40
Modules linked in:
CPU: 40 UID: 0 PID: 0 Comm: swapper/40 Not tainted 6.12.5-rc1-test+ #220
Hardware name: Dell Inc. PowerEdge R6525/024PW1, BIOS 2.7.3 03/30/2022
RIP: 0010:do_softirq_post_smp_call_flush+0x1a/0x40
Code: ...
RSP: 0018:ffffad4c405cfeb8 EFLAGS: 00010002
RAX: 0000000000000080 RBX: 0000000000000282 RCX: 0000000000000007
RDX: 0000000000000000 RSI: 0000000000000083 RDI: 0000000000000000
RBP: 0000000000000000 R08: ffff942efc626080 R09: 0000000000000001
R10: 7fffffffffffffff R11: ffffffffffd2d2da R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
FS: 0000000000000000(0000) GS:ffff942efc600000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000000000 CR3: 000000807da48001 CR4: 0000000000f70ef0
PKRU: 55555554
Call Trace:
<TASK>
? __warn+0x88/0x130
? do_softirq_post_smp_call_flush+0x1a/0x40
? report_bug+0x18e/0x1a0
? handle_bug+0x5b/0xa0
? exc_invalid_op+0x18/0x70
? asm_exc_invalid_op+0x1a/0x20
? do_softirq_post_smp_call_flush+0x1a/0x40
? srso_alias_return_thunk+0x5/0xfbef5
flush_smp_call_function_queue+0x65/0x80
do_idle+0x149/0x260
cpu_startup_entry+0x29/0x30
start_secondary+0x12d/0x160
common_startup_64+0x13e/0x141
</TASK>
---[ end trace 0000000000000000 ]---Could you please also include upstream commit 6675ce20046d ("softirq:
Allow raising SCHED_SOFTIRQ from SMP-call-function on RT kernel") to the 6.12 stable queue to prevent this splat for PREEMPT_RT users.
Full upstream commit SHA1: 6675ce20046d149e1e1ffe7e9577947dee17aad5
The commit can be cleanly cherry-picked on top of v6.12.5-rc1 and I can confirm that it fixes the splat.
Signature · 2 lines
Thanks and Regards, Prateek
Quoted 24 lines
Fixes b2a02fc43a1f ("smp: Optimize send_call_function_single_ipi()")Suggested-by Peter Zijlstra <[email protected]>Signed-off-by K Prateek Nayak <[email protected]>Signed-off-by Peter Zijlstra (Intel) <[email protected]>Signed-off-by Sasha Levin <[email protected]>--- kernel/sched/core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)kernel/sched/core.c +1
-1@@ -1242,7 +1242,7 @@ static void nohz_csd_func(void *info)WARN_ON (!(flags &NOHZ_KICK_MASK )); rq->idle_balance =idle_cpu (cpu); -if (rq->idle_balance && !need_resched ()) { +if (rq->idle_balance) { rq->nohz_idle_balance = flags;raise_softirq_irqoff (SCHED_SOFTIRQ ); }
Greg Kroah-Hartman
maintainerRe: [PATCH 6.12 440/466] sched/core: Remove the unnecessary need_resched() check in nohz_csd_func()
Quoted 136 lines · K Prateek Nayak
Hello Greg, Sasha,
Quoted 85 lines · Greg Kroah-Hartman
6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: K Prateek Nayak <[email protected]>
[ Upstream commit
ea9cffc0a154124821531991d5afdd7e8b20d7aa]The
need_resched()check currently innohz_csd_func()can be tracked to have been added inscheduler_ipi()back in 2011 via commitca38062e57e9("sched: Use resched IPI to kick off the nohz idle balance")Since then, it has travelled quite a bit but it seems like an
idle_cpu()check currently is sufficient to detect the need to bail out from an idle load balancing. To justify this removal, consider all the following case where an idle load balancing could race with a task wakeup:o Since commit
f3dd3f674555b("sched: Remove the limitation ofWF_ON_CPUon wakelist if wakee cpu is idle") a target perceived to be idle (target_rq->nr_running== 0) will return true forttwu_queue_cond(target)which will offload the task wakeup to the idle target via an IPI.In all such cases
target_rq->ttwu_pendingwill be set to 1 before queuing the wake function.If an idle load balance races here, following scenarios are possible:
- The CPU is not in
TIF_POLLING_NRFLAGmode in which case an actual IPI is sent to the CPU to wake it out of idle. If thenohz_csd_func()queues beforesched_ttwu_pending(), the idle load balance will bail out sinceidle_cpu(target)returns 0 sincetarget_rq->ttwu_pendingis 1. If thenohz_csd_func()is queued aftersched_ttwu_pending()it should seerq->nr_runningto be non-zero and bail out of idle load balancing.- The CPU is in
TIF_POLLING_NRFLAGmode and instead of an actual IPI, the sender will simply setTIF_NEED_RESCHEDfor the target to put it out of idle andflush_smp_call_function_queue()indo_idle()will execute the call function. Depending on the ordering of the queuing ofnohz_csd_func()andsched_ttwu_pending(), theidle_cpu()check innohz_csd_func()should either seetarget_rq->ttwu_pending= 1 ortarget_rq->nr_runningto be non-zero if there is a genuine task wakeup racing with the idle load balance kick.o The waker CPU perceives the target CPU to be busy (
targer_rq->nr_running!= 0) but the CPU is in fact going idle and due to a series of unfortunate events, the system reaches a case where the waker CPU decides to perform the wakeup by itself inttwu_queue()on the target CPU but target is concurrently selected for idle load balance (XXX: Can this happen? I'm not sure, but we'll consider the mother of all coincidences to estimate the worst case scenario).
ttwu_do_activate()callsenqueue_task()which would increment "rq->nr_running" post which it callswakeup_preempt()which is responsible for settingTIF_NEED_RESCHED(via a resched IPI or by settingTIF_NEED_RESCHEDon aTIF_POLLING_NRFLAGidle CPU) The key thing to note in this case is thatrq->nr_runningis already non-zero in case of a wakeup beforeTIF_NEED_RESCHEDis set which would lead toidle_cpu()check returning false.In all cases, it seems that
need_resched()check is unnecessary when checking foridle_cpu()first since an impending wakeup racing with idle load balancer will either set the "rq->ttwu_pending" or indicate a newly woken task via "rq->nr_running".Chasing the reason why this check might have existed in the first place, I came across Peter's suggestion on the fist iteration of Suresh's patch from 2011 [1] where the condition to raise the
SCHED_SOFTIRQwas:sched_ttwu_do_pending(list); if (unlikely((rq->idle == current) && rq->nohz_balance_kick && !need_resched())) raise_softirq_irqoff(SCHED_SOFTIRQ);Since the condition to raise the
SCHED_SOFIRQwas preceded bysched_ttwu_do_pending()(which is equivalent ofsched_ttwu_pending()) in the current upstream kernel, theneed_resched()check was necessary to catch a newly queued task. Peter suggested modifying it to:if (idle_cpu() && rq->nohz_balance_kick && !need_resched()) raise_softirq_irqoff(SCHED_SOFTIRQ);Quoted 8 lines
where
idle_cpu()seems to have replaced "rq->idle== current" check.Even back then, the
idle_cpu()check would have been sufficient to catch a new task being enqueued. Since commitb2a02fc43a1f("smp: Optimizesend_call_function_single_ipi()") overloads the interpretation ofTIF_NEED_RESCHEDforTIF_POLLING_NRFLAGidling, remove theneed_resched()check innohz_csd_func()to raiseSCHED_SOFTIRQbased on Peter's suggestion.Since v6.12 added support for
PREEMPT_RT, you'll see the following warning being triggered when booting withPREEMPT_RTenabled on 6.12.5-rc1:------------[ cut here ]------------ WARNING: CPU: 40 PID: 0 at kernel/softirq.c:292 do_softirq_post_smp_call_flush+0x1a/0x40 Modules linked in: CPU: 40 UID: 0 PID: 0 Comm: swapper/40 Not tainted 6.12.5-rc1-test+ #220 Hardware name: Dell Inc. PowerEdge R6525/024PW1, BIOS 2.7.3 03/30/2022 RIP: 0010:do_softirq_post_smp_call_flush+0x1a/0x40 Code: ... RSP: 0018:ffffad4c405cfeb8 EFLAGS: 00010002 RAX: 0000000000000080 RBX: 0000000000000282 RCX: 0000000000000007 RDX: 0000000000000000 RSI: 0000000000000083 RDI: 0000000000000000 RBP: 0000000000000000 R08: ffff942efc626080 R09: 0000000000000001 R10: 7fffffffffffffff R11: ffffffffffd2d2da R12: 0000000000000000 R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000 FS: 0000000000000000(0000) GS:ffff942efc600000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000000000000 CR3: 000000807da48001 CR4: 0000000000f70ef0 PKRU: 55555554 Call Trace: <TASK> ? __warn+0x88/0x130 ? do_softirq_post_smp_call_flush+0x1a/0x40 ? report_bug+0x18e/0x1a0 ? handle_bug+0x5b/0xa0 ? exc_invalid_op+0x18/0x70 ? asm_exc_invalid_op+0x1a/0x20 ? do_softirq_post_smp_call_flush+0x1a/0x40 ? srso_alias_return_thunk+0x5/0xfbef5 flush_smp_call_function_queue+0x65/0x80 do_idle+0x149/0x260 cpu_startup_entry+0x29/0x30 start_secondary+0x12d/0x160 common_startup_64+0x13e/0x141 </TASK> ---[ end trace 0000000000000000 ]---
Quoted 8 lines
Could you please also include upstream commit
6675ce20046d("softirq:
Allow raisingSCHED_SOFTIRQfrom SMP-call-function on RT kernel") to the 6.12 stable queue to prevent this splat forPREEMPT_RTusers.Full upstream commit SHA1:
6675ce20046d149e1e1ffe7e9577947dee17aad5The commit can be cleanly cherry-picked on top of v6.12.5-rc1 and I can confirm that it fixes the splat.
Thanks, I've now queued that up. You all should have put a "Fixes:" tag on it so that I would have noticed it automatically...
thanks,
greg k-h
Greg Kroah-Hartman
maintainerPATCH 441/466 sched/fair: Check idle_cpu() before need_resched() to detect ilb CPU turning busy
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: K Prateek Nayak <[email protected]>
[ Upstream commit ff47a0acfcce309cf9e175149c75614491953c8f ]
Commit b2a02fc43a1f ("smp: Optimize send_call_function_single_ipi()") optimizes IPIs to idle CPUs in TIF_POLLING_NRFLAG mode by setting the TIF_NEED_RESCHED flag in idle task's thread info and relying on flush_smp_call_function_queue() in idle exit path to run the call-function. A softirq raised by the call-function is handled shortly after in do_softirq_post_smp_call_flush() but the TIF_NEED_RESCHED flag remains set and is only cleared later when schedule_idle() calls __schedule().
need_resched() check in _nohz_idle_balance() exists to bail out of load balancing if another task has woken up on the CPU currently in-charge of idle load balancing which is being processed in SCHED_SOFTIRQ context. Since the optimization mentioned above overloads the interpretation of TIF_NEED_RESCHED, check for idle_cpu() before going with the existing need_resched() check which can catch a genuine task wakeup on an idle CPU processing SCHED_SOFTIRQ from do_softirq_post_smp_call_flush(), as well as the case where ksoftirqd needs to be preempted as a result of new task wakeup or slice expiry.
In case of PREEMPT_RT or threadirqs, although the idle load balancing may be inhibited in some cases on the ilb CPU, the fact that ksoftirqd is the only fair task going back to sleep will trigger a newidle balance on the CPU which will alleviate some imbalance if it exists if idle balance fails to do so.
--- kernel/sched/fair.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/sched/fair.c +1 -1
@@ -12580,7 +12580,7 @@ static void _nohz_idle_balance(struct rq *this_rq, unsigned int flags)* work being done for other CPUs. Next load * balancing owner will pick it up. */ -if (need_resched ()) { +if (!idle_cpu (this_cpu) &&need_resched ()) {if (flags &NOHZ_STATS_KICK ) has_blocked_load = true;if (flags &NOHZ_NEXT_KICK )
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 442/466 sched/core: Prevent wakeup of ksoftirqd during idle load balance
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: K Prateek Nayak <[email protected]>
[ Upstream commit e932c4ab38f072ce5894b2851fea8bc5754bb8e5 ]
Scheduler raises a SCHED_SOFTIRQ to trigger a load balancing event on from the IPI handler on the idle CPU. If the SMP function is invoked from an idle CPU via flush_smp_call_function_queue() then the HARD-IRQ flag is not set and raise_softirq_irqoff() needlessly wakes ksoftirqd because soft interrupts are handled before ksoftirqd get on the CPU.
Adding a trace_printk() in nohz_csd_func() at the spot of raising SCHED_SOFTIRQ and enabling trace events for sched_switch, sched_wakeup, and softirq_entry (for SCHED_SOFTIRQ vector alone) helps observing the current behavior:
<idle>-0 [000] dN.1.: nohz_csd_func: Raising SCHED_SOFTIRQ from nohz_csd_func
<idle>-0 [000] dN.4.: sched_wakeup: comm=ksoftirqd/0 pid=16 prio=120 target_cpu=000
<idle>-0 [000] .Ns1.: softirq_entry: vec=7 [action=SCHED]
<idle>-0 [000] .Ns1.: softirq_exit: vec=7 [action=SCHED]
<idle>-0 [000] d..2.: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=16 next_prio=120
ksoftirqd/0-16 [000] d..2.: sched_switch: prev_comm=ksoftirqd/0 prev_pid=16 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
...Use __raise_softirq_irqoff() to raise the softirq. The SMP function call is always invoked on the requested CPU in an interrupt handler. It is guaranteed that soft interrupts are handled at the end.
Following are the observations with the changes when enabling the same set of events:
<idle>-0 [000] dN.1.: nohz_csd_func: Raising SCHED_SOFTIRQ for nohz_idle_balance
<idle>-0 [000] dN.1.: softirq_raise: vec=7 [action=SCHED]
<idle>-0 [000] .Ns1.: softirq_entry: vec=7 [action=SCHED]No unnecessary ksoftirqd wakeups are seen from idle task's context to service the softirq.
--- kernel/sched/core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/sched/core.c +1 -1
@@ -1244,7 +1244,7 @@ static void nohz_csd_func(void *info) rq->idle_balance =idle_cpu (cpu);if (rq->idle_balance) { rq->nohz_idle_balance = flags; -raise_softirq_irqoff (SCHED_SOFTIRQ ); +__raise_softirq_irqoff (SCHED_SOFTIRQ ); } }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 443/466 sched/deadline: Fix warning in migrate_enable for boosted tasks
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wander Lairson Costa <[email protected]>
[ Upstream commit 0664e2c311b9fa43b33e3e81429cd0c2d7f9c638 ]
When running the following command:
while true; do
stress-ng --cyclic 30 --timeout 30s --minimize --quiet
done
a warning is eventually triggered:
WARNING: CPU: 43 PID: 2848 at kernel/sched/deadline.c:794 setup_new_dl_entity+0x13e/0x180 ... Call Trace: <TASK> ? show_trace_log_lvl+0x1c4/0x2df ? enqueue_dl_entity+0x631/0x6e0 ? setup_new_dl_entity+0x13e/0x180 ? __warn+0x7e/0xd0 ? report_bug+0x11a/0x1a0 ? handle_bug+0x3c/0x70 ? exc_invalid_op+0x14/0x70 ? asm_exc_invalid_op+0x16/0x20 enqueue_dl_entity+0x631/0x6e0 enqueue_task_dl+0x7d/0x120 __do_set_cpus_allowed+0xe3/0x280 __set_cpus_allowed_ptr_locked+0x140/0x1d0 __set_cpus_allowed_ptr+0x54/0xa0 migrate_enable+0x7e/0x150 rt_spin_unlock+0x1c/0x90 group_send_sig_info+0xf7/0x1a0 ? kill_pid_info+0x1f/0x1d0 kill_pid_info+0x78/0x1d0 kill_proc_info+0x5b/0x110 __x64_sys_kill+0x93/0xc0 do_syscall_64+0x5c/0xf0 entry_SYSCALL_64_after_hwframe+0x6e/0x76 RIP: 0033:0x7f0dab31f92b
This warning occurs because set_cpus_allowed dequeues and enqueues tasks with the ENQUEUE_RESTORE flag set. If the task is boosted, the warning is triggered. A boosted task already had its parameters set by rt_mutex_setprio, and a new call to setup_new_dl_entity is unnecessary, hence the WARN_ON call.
Check if we are requeueing a boosted task and avoid calling setup_new_dl_entity if that's the case.
--- kernel/sched/deadline.c | 1 + 1 file changed, 1 insertion(+)
kernel/sched/deadline.c +1 -0
@@ -2042,6 +2042,7 @@ enqueue_dl_entity(struct sched_dl_entity *dl_se, int flags) }else if (flags &ENQUEUE_REPLENISH ) {replenish_dl_entity (dl_se); }else if ((flags &ENQUEUE_RESTORE ) && + !is_dl_boosted (dl_se) &&dl_time_before (dl_se->deadline,rq_clock (rq_of_dl_se (dl_se)))) {setup_new_dl_entity (dl_se); }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 444/466 btrfs: drop unused parameter options from open_ctree()
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Sterba <[email protected]>
[ Upstream commit 87cbab86366e75dec52f787e0e0b17b2aea769ca ]
Since the new mount option parser in commit ad21f15b0f79 ("btrfs:
switch to the new mount API") we don't pass the options like that anymore.
Stable-dep-of: 951a3f59d268 ("btrfs: fix mount failure due to remount races")
--- fs/btrfs/disk-io.c | 3 +-- fs/btrfs/disk-io.h | 3 +-- fs/btrfs/super.c | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-)
fs/btrfs/disk-io.c +1 -2
@@ -3202,8 +3202,7 @@ int btrfs_check_features(struct btrfs_fs_info *fs_info, bool is_rw_mount)return 0 ; } -int __cold open_ctree (struct super_block *sb,struct btrfs_fs_devices *fs_devices, -const char *options) +int __cold open_ctree (struct super_block *sb,struct btrfs_fs_devices *fs_devices) {u32 sectorsize;u32 nodesize;
fs/btrfs/disk-io.h +1 -2
@@ -52,8 +52,7 @@ struct extent_buffer *btrfs_find_create_tree_block(int btrfs_start_pre_rw_mount (struct btrfs_fs_info *fs_info);int btrfs_check_super_csum (struct btrfs_fs_info *fs_info,const struct btrfs_super_block *disk_sb); -int __cold open_ctree (struct super_block *sb,struct btrfs_fs_devices *fs_devices, -const char *options); +int __cold open_ctree (struct super_block *sb,struct btrfs_fs_devices *fs_devices);void __cold close_ctree (struct btrfs_fs_info *fs_info);int btrfs_validate_super (const struct btrfs_fs_info *fs_info,const struct btrfs_super_block *sb,int mirror_num);
fs/btrfs/super.c +1 -1
@@ -971,7 +971,7 @@ static int btrfs_fill_super(struct super_block *sb,return err; } - err =open_ctree (sb, fs_devices, (char *)data); + err =open_ctree (sb, fs_devices);if (err) {btrfs_err (fs_info,"open_ctree failed" );return err;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 445/466 btrfs: drop unused parameter data from btrfs_fill_super()
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Sterba <[email protected]>
[ Upstream commit 01c5db782e3ad1aea1d06a1765c710328c145f10 ]
The only caller passes NULL, we can drop the parameter. This is since the new mount option parser done in 3bb17a25bcb09a ("btrfs: add get_tree callback for new mount API").
Stable-dep-of: 951a3f59d268 ("btrfs: fix mount failure due to remount races")
--- fs/btrfs/super.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
fs/btrfs/super.c +2 -3
@@ -946,8 +946,7 @@ static int get_default_subvol_objectid(struct btrfs_fs_info *fs_info, u64 *objec }static int btrfs_fill_super (struct super_block *sb, -struct btrfs_fs_devices *fs_devices, -void *data) +struct btrfs_fs_devices *fs_devices) {struct inode *inode;struct btrfs_fs_info *fs_info =btrfs_sb (sb);
@@ -1893,7 +1892,7 @@ static int btrfs_get_tree_super(struct fs_context *fc)snprintf (sb->s_id,sizeof (sb->s_id),"%pg" , bdev);shrinker_debugfs_rename (sb->s_shrink,"sb-btrfs:%s" , sb->s_id);btrfs_sb (sb)->bdev_holder = &btrfs_fs_type; - ret =btrfs_fill_super (sb, fs_devices,NULL ); + ret =btrfs_fill_super (sb, fs_devices); }if (ret) {
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 446/466 btrfs: fix mount failure due to remount races
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qu Wenruo <[email protected]>
[ Upstream commit 951a3f59d268fe1397aaeb9a96fcb1944890c4cb ]
[BUG]
The following reproducer can cause btrfs mount to fail:
dev="/dev/test/scratch1"
mnt1="/mnt/test"
mnt2="/mnt/scratch"
mkfs.btrfs -f $dev
mount $dev $mnt1
btrfs subvolume create $mnt1/subvol1
btrfs subvolume create $mnt1/subvol2
umount $mnt1
mount $dev $mnt1 -o subvol=subvol1
while mount -o remount,ro $mnt1; do mount -o remount,rw $mnt1; done & bg=$!
while mount $dev $mnt2 -o subvol=subvol2; do umount $mnt2; done
kill $bg
wait
umount -R $mnt1
umount -R $mnt2
The script will fail with the following error:
mount: /mnt/scratch: /dev/mapper/test-scratch1 already mounted on /mnt/test.
dmesg(1) may have more information after failed mount system call.
umount: /mnt/test: target is busy.
umount: /mnt/scratch/: not mounted
And there is no kernel error message.
[CAUSE]
During the btrfs mount, to support mounting different subvolumes with different RO/RW flags, we need to detect that and retry if needed:
Retry with matching RO flags if the initial mount fail with -EBUSY.
The problem is, during that retry we do not hold any super block lock (s_umount), this means there can be a remount process changing the RO flags of the original fs super block.
If so, we can have an EBUSY error during retry. And this time we treat any failure as an error, without any retry and cause the above EBUSY mount failure.
[FIX]
The current retry behavior is racy because we do not have a super block thus no way to hold s_umount to prevent the race with remount.
Solve the root problem by allowing fc->sb_flags to mismatch from the sb->s_flags at btrfs_get_tree_super().
Then at the re-entry point btrfs_get_tree_subvol(), manually check the fc->s_flags against sb->s_flags, if it's a RO->RW mismatch, then reconfigure with s_umount lock hold.
--- fs/btrfs/super.c | 66 ++++++++++++++++++++---------------------------- 1 file changed, 27 insertions(+), 39 deletions(-)
fs/btrfs/super.c +27 -39
@@ -1886,18 +1886,21 @@ static int btrfs_get_tree_super(struct fs_context *fc)if (sb->s_root) {btrfs_close_devices (fs_devices); -if ((fc->sb_flags ^ sb->s_flags) &SB_RDONLY ) - ret = -EBUSY ; +/* +* At this stage we may have RO flag mismatch between +* fc->sb_flags and sb->s_flags. Caller should detect such +* mismatch and reconfigure with sb->s_umount rwsem held if +* needed. +*/ }else {snprintf (sb->s_id,sizeof (sb->s_id),"%pg" , bdev);shrinker_debugfs_rename (sb->s_shrink,"sb-btrfs:%s" , sb->s_id);btrfs_sb (sb)->bdev_holder = &btrfs_fs_type; ret =btrfs_fill_super (sb, fs_devices); - } - -if (ret) { -deactivate_locked_super (sb); -return ret; +if (ret) { +deactivate_locked_super (sb); +return ret; + } }btrfs_clear_oneshot_options (fs_info);
@@ -1983,39 +1986,18 @@ static int btrfs_get_tree_super(struct fs_context *fc)* btrfs or not, setting the whole super block RO. To make per-subvolume mounting * work with different options work we need to keep backward compatibility. */ -static struct vfsmount *btrfs_reconfigure_for_mount (struct fs_context *fc) +static int btrfs_reconfigure_for_mount (struct fs_context *fc,struct vfsmount *mnt) { -struct vfsmount *mnt; -int ret; -const bool ro2rw = !(fc->sb_flags &SB_RDONLY ); - -/* -* We got an EBUSY because our SB_RDONLY flag didn't match the existing -* super block, so invert our setting here and retry the mount so we -* can get our vfsmount. -*/ -if (ro2rw) - fc->sb_flags |=SB_RDONLY ; -else - fc->sb_flags &= ~SB_RDONLY ; - - mnt =fc_mount (fc); -if (IS_ERR (mnt)) -return mnt; +int ret =0 ; -if (!ro2rw) -return mnt; +if (fc->sb_flags &SB_RDONLY ) +return ret; -/* We need to convert to rw, call reconfigure. */ - fc->sb_flags &= ~SB_RDONLY ;down_write (&mnt->mnt_sb->s_umount); - ret =btrfs_reconfigure (fc); +if (!(fc->sb_flags &SB_RDONLY ) && (mnt->mnt_sb->s_flags &SB_RDONLY )) + ret =btrfs_reconfigure (fc);up_write (&mnt->mnt_sb->s_umount); -if (ret) { -mntput (mnt); -return ERR_PTR (ret); - } -return mnt; +return ret; }static int btrfs_get_tree_subvol (struct fs_context *fc)
@@ -2025,6 +2007,7 @@ static int btrfs_get_tree_subvol(struct fs_context *fc)struct fs_context *dup_fc;struct dentry *dentry;struct vfsmount *mnt; +int ret =0 ;/* * Setup a dummy root and fs_info for test/set super. This is because
@@ -2067,11 +2050,16 @@ static int btrfs_get_tree_subvol(struct fs_context *fc) fc->security =NULL ; mnt =fc_mount (dup_fc); -if (PTR_ERR_OR_ZERO (mnt) == -EBUSY ) - mnt =btrfs_reconfigure_for_mount (dup_fc); -put_fs_context (dup_fc); -if (IS_ERR (mnt)) +if (IS_ERR (mnt)) { +put_fs_context (dup_fc);return PTR_ERR (mnt); + } + ret =btrfs_reconfigure_for_mount (dup_fc, mnt); +put_fs_context (dup_fc); +if (ret) { +mntput (mnt); +return ret; + }/* * This free's ->subvol_name, because if it isn't set we have to
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 447/466 btrfs: fix missing snapshot drew unlock when root is dead during swap activation
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Filipe Manana <[email protected]>
[ Upstream commit 9c803c474c6c002d8ade68ebe99026cc39c37f85 ]
When activating a swap file we acquire the root's snapshot drew lock and then check if the root is dead, failing and returning with -EPERM if it's dead but without unlocking the root's snapshot lock. Fix this by adding the missing unlock.
--- fs/btrfs/inode.c | 1 + 1 file changed, 1 insertion(+)
fs/btrfs/inode.c +1 -0
@@ -9857,6 +9857,7 @@ static int btrfs_swap_activate(struct swap_info_struct *sis, struct file *file,if (btrfs_root_dead (root)) {spin_unlock (&root->root_item_lock); +btrfs_drew_write_unlock (&root->snapshot_lock);btrfs_exclop_finish (fs_info); btrfs_warn(fs_info, "cannot activate swapfile because subvolume %llu is being deleted",
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 448/466 clk: en7523: Initialize num before accessing hws in en7523_register_clocks()
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Haoyu Li <[email protected]>
[ Upstream commit 52fd1709e41d3a85b48bcfe2404a024ebaf30c3b ]
With the new __counted_by annotation in clk_hw_onecell_data, the "num" struct member must be set before accessing the "hws" array. Failing to do so will trigger a runtime warning when enabling CONFIG_UBSAN_BOUNDS and CONFIG_FORTIFY_SOURCE.
--- drivers/clk/clk-en7523.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/clk/clk-en7523.c +2 -2
@@ -508,6 +508,8 @@ static void en7523_register_clocks(struct device *dev, struct clk_hw_onecell_datu32 rate;int i; + clk_data->num =EN7523_NUM_CLOCKS ; +for (i =0 ; i <ARRAY_SIZE (en7523_base_clks); i++) {const struct en_clk_desc *desc = &en7523_base_clks[i];u32 reg = desc->div_reg ? desc->div_reg : desc->base_reg;
@@ -529,8 +531,6 @@ static void en7523_register_clocks(struct device *dev, struct clk_hw_onecell_dat hw =en7523_register_pcie_clk (dev, np_base); clk_data->hws[EN7523_CLK_PCIE ] = hw; - - clk_data->num =EN7523_NUM_CLOCKS ; } static int en7523_clk_hw_init(struct platform_device *pdev,
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 449/466 tracing/eprobe: Fix to release eprobe when failed to add dyn_event
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Masami Hiramatsu (Google) <[email protected]>
[ Upstream commit 494b332064c0ce2f7392fa92632bc50191c1b517 ]
Fix eprobe event to unregister event call and release eprobe when it fails to add dynamic event correctly.
--- kernel/trace/trace_eprobe.c | 5 +++++ 1 file changed, 5 insertions(+)
kernel/trace/trace_eprobe.c +5 -0
@@ -963,6 +963,11 @@ static int __trace_eprobe_create(int argc, const char *argv[]) goto error; } ret =dyn_event_add (&ep->devent, &ep->tp.event->call); +if (ret <0 ) { +trace_probe_unregister_event_call (&ep->tp); +mutex_unlock (&event_mutex); + goto error; + }mutex_unlock (&event_mutex);return ret; parse_error:
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 450/466 x86: Fix build regression with CONFIG_KEXEC_JUMP enabled
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Damien Le Moal <[email protected]>
[ Upstream commit aeb68937614f4aeceaaa762bd7f0212ce842b797 ]
Build 6.13-rc12 for x86_64 with gcc 14.2.1 fails with the error:
ld: vmlinux.o: in function `virtual_mapped':
linux/arch/x86/kernel/relocate_kernel_64.S:249:(.text+0x5915b): undefined reference to `saved_context_gdt_desc'
when CONFIG_KEXEC_JUMP is enabled.
This was introduced by commit 07fa619f2a40 ("x86/kexec: Restore GDT on return from ::preserve_context kexec") which introduced a use of saved_context_gdt_desc without a declaration for it.
Fix that by including asm/asm-offsets.h where saved_context_gdt_desc is defined (indirectly in include/generated/asm-offsets.h which asm/asm-offsets.h includes).
--- arch/x86/kernel/relocate_kernel_64.S | 1 + 1 file changed, 1 insertion(+)
arch/x86/kernel/relocate_kernel_64.S +1 -0
@@ -13,6 +13,7 @@ #include <asm/pgtable_types.h> #include <asm/nospec-branch.h> #include <asm/unwind_hints.h> +#include <asm/asm-offsets.h> /* * Must be relocatable PIC code callable as a C function, in particular
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 451/466 Revert "unicode: Dont special case ignorable code points"
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Linus Torvalds <[email protected]>
[ Upstream commit 231825b2e1ff6ba799c5eaf396d3ab2354e37c6b ]
This reverts commit 5c26d2f1d3f5e4be3e196526bead29ecb139cf91.
It turns out that we can't do this, because while the old behavior of ignoring ignorable code points was most definitely wrong, we have case-folding filesystems with on-disk hash values with that wrong behavior.
So now you can't look up those names, because they hash to something different.
Of course, it's also entirely possible that in the meantime people have created *new* files with the new ("more correct") case folding logic, and reverting will just make other things break.
The correct solution is to not do case folding in filesystems, but sadly, people seem to never really understand that. People still see it as a feature, not a bug.
--- fs/unicode/mkutf8data.c | 70 + fs/unicode/utf8data.c_shipped | 6703 +++++++++++++++++---------------- 2 files changed, 3427 insertions(+), 3346 deletions(-)
fs/unicode/mkutf8data.c +70 -0
@@ -2230,6 +2230,75 @@ static void nfdicf_init(void)file_fail (fold_name); } +static void ignore_init (void ) +{ +FILE *file; +unsigned int unichar; +unsigned int first; +unsigned int last; +unsigned int *um; +int count; +int ret; + +if (verbose >0 ) +printf ("Parsing %s\n" , prop_name); + file =fopen (prop_name,"r" ); +if (!file) +open_fail (prop_name, errno); +assert (file); + count =0 ; +while (fgets (line,LINESIZE , file)) { + ret =sscanf (line,"%X..%X ; %s # " , &first, &last, buf0); +if (ret ==3 ) { +if (strcmp (buf0,"Default_Ignorable_Code_Point" )) +continue ; +if (!utf32valid (first) || !utf32valid (last)) +line_fail (prop_name, line); +for (unichar = first; unichar <= last; unichar++) { +free (unicode_data[unichar].utf32nfdi); + um =malloc (sizeof (unsigned int )); + *um =0 ; + unicode_data[unichar].utf32nfdi = um; +free (unicode_data[unichar].utf32nfdicf); + um =malloc (sizeof (unsigned int )); + *um =0 ; + unicode_data[unichar].utf32nfdicf = um; + count++; + } +if (verbose >1 ) +printf (" %X..%X Default_Ignorable_Code_Point\n" , + first, last); +continue ; + } + ret =sscanf (line,"%X ; %s # " , &unichar, buf0); +if (ret ==2 ) { +if (strcmp (buf0,"Default_Ignorable_Code_Point" )) +continue ; +if (!utf32valid (unichar)) +line_fail (prop_name, line); +free (unicode_data[unichar].utf32nfdi); + um =malloc (sizeof (unsigned int )); + *um =0 ; + unicode_data[unichar].utf32nfdi = um; +free (unicode_data[unichar].utf32nfdicf); + um =malloc (sizeof (unsigned int )); + *um =0 ; + unicode_data[unichar].utf32nfdicf = um; +if (verbose >1 ) +printf (" %X Default_Ignorable_Code_Point\n" , + unichar); + count++; +continue ; + } + } +fclose (file); + +if (verbose >0 ) +printf ("Found %d entries\n" , count); +if (count ==0 ) +file_fail (prop_name); +} +static void corrections_init (void ) {FILE *file;
@@ -3342,6 +3411,7 @@ int main(int argc, char *argv[])ccc_init ();nfdi_init ();nfdicf_init (); +ignore_init ();corrections_init ();hangul_decompose ();nfdi_decompose ();
fs/unicode/utf8data.c_shipped +3357 -3346
2,918 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Signature · 1 line
2.43.0
Part of the diff is not shown here. View the raw message.
Greg Kroah-Hartman
maintainerPATCH 452/466 vfio/mlx5: Align the page tracking max message size with the device capability
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yishai Hadas <[email protected]>
[ Upstream commit 9c7c5430bca36e9636eabbba0b3b53251479c7ab ]
Align the page tracking maximum message size with the device's capability instead of relying on PAGE_SIZE.
This adjustment resolves a mismatch on systems where PAGE_SIZE is 64K, but the firmware only supports a maximum message size of 4K.
Now that we rely on the device's capability for max_message_size, we must account for potential future increases in its value.
Key considerations include:
- Supporting message sizes that exceed a single system page (e.g., an 8K message on a 4K system).
- Ensuring the RQ size is adjusted to accommodate at least 4 WQEs/messages, in line with the device specification.
The above has been addressed as part of the patch.
--- drivers/vfio/pci/mlx5/cmd.c | 47 +++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 12 deletions(-)
drivers/vfio/pci/mlx5/cmd.c +35 -12
@@ -1517,7 +1517,8 @@ int mlx5vf_start_page_tracker(struct vfio_device *vdev,struct mlx5_vhca_qp *host_qp;struct mlx5_vhca_qp *fw_qp;struct mlx5_core_dev *mdev; -u32 max_msg_size =PAGE_SIZE ; +u32 log_max_msg_size; +u32 max_msg_size;u64 rq_size =SZ_2M ;u32 max_recv_wr;int err;
@@ -1534,6 +1535,12 @@ int mlx5vf_start_page_tracker(struct vfio_device *vdev, } mdev = mvdev->mdev; + log_max_msg_size =MLX5_CAP_ADV_VIRTUALIZATION (mdev, pg_track_log_max_msg_size); + max_msg_size = (1ULL << log_max_msg_size); +/* The RQ must hold at least 4 WQEs/messages for successful QP creation */ +if (rq_size <4 * max_msg_size) + rq_size =4 * max_msg_size; +memset (tracker,0 ,sizeof (*tracker)); tracker->uar =mlx5_get_uars_page (mdev);if (IS_ERR (tracker->uar)) {
@@ -1623,25 +1630,41 @@ set_report_output(u32 size, int index, struct mlx5_vhca_qp *qp, {u32 entry_size =MLX5_ST_SZ_BYTES (page_track_report_entry);u32 nent = size / entry_size; +u32 nent_in_page; +u32 nent_to_set;struct page *page; +u32 page_offset; +u32 page_index; +u32 buf_offset; +void *kaddr;u64 addr;u64 *buf;int i; -if (WARN_ON (index >= qp->recv_buf.npages || + buf_offset = index * qp->max_msg_size; +if (WARN_ON (buf_offset + size >= qp->recv_buf.npages *PAGE_SIZE || (nent > qp->max_msg_size / entry_size)))return ; - page = qp->recv_buf.page_list[index]; - buf =kmap_local_page (page); -for (i =0 ; i < nent; i++) { - addr =MLX5_GET (page_track_report_entry, buf + i, - dirty_address_low); - addr |= (u64 )MLX5_GET (page_track_report_entry, buf + i, - dirty_address_high) <<32 ; -iova_bitmap_set (dirty, addr, qp->tracked_page_size); - } -kunmap_local (buf); +do { + page_index = buf_offset /PAGE_SIZE ; + page_offset = buf_offset %PAGE_SIZE ; + nent_in_page = (PAGE_SIZE - page_offset) / entry_size; + page = qp->recv_buf.page_list[page_index]; + kaddr =kmap_local_page (page); + buf = kaddr + page_offset; + nent_to_set =min (nent, nent_in_page); +for (i =0 ; i < nent_to_set; i++) { + addr =MLX5_GET (page_track_report_entry, buf + i, + dirty_address_low); + addr |= (u64 )MLX5_GET (page_track_report_entry, buf + i, + dirty_address_high) <<32 ; +iova_bitmap_set (dirty, addr, qp->tracked_page_size); + } +kunmap_local (kaddr); + buf_offset += (nent_to_set * entry_size); + nent -= nent_to_set; + }while (nent); } static void
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 453/466 selftests/ftrace: adjust offset for kprobe syntax error test
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hari Bathini <[email protected]>
[ Upstream commit 777f290ab328de333b85558bb6807a69a59b36ba ]
In 'NOFENTRY_ARGS' test case for syntax check, any offset X of vfs_read+X except function entry offset (0) fits the criterion, even if that offset is not at instruction boundary, as the parser comes before probing. But with "ENDBR64" instruction on x86, offset 4 is treated as function entry. So, X can't be 4 as well. Thus, 8 was used as offset for the test case. On 64-bit powerpc though, any offset <= 16 can be considered function entry depending on build configuration (see arch_kprobe_on_func_entry() for implementation details). So, use vfs_read+20 to accommodate that scenario too.
--- .../selftests/ftrace/test.d/kprobe/kprobe_syntax_errors.tc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/testing/selftests/ftrace/test.d/kprobe/kprobe_syntax_errors.tc +1 -1
@@ -111,7 +111,7 @@ check_error 'p vfs_read $arg* ^$arg*' # DOUBLE_ARGS if !grep -q 'kernel return probes support:' README; then check_error 'r vfs_read ^$arg*' # NOFENTRY_ARGS fi -check_error 'p vfs_read+8 ^$arg*' # NOFENTRY_ARGS +check_error 'p vfs_read+20 ^$arg*' # NOFENTRY_ARGS check_error 'p vfs_read ^hoge' # NO_BTFARG check_error 'p kfree ^$arg10' # NO_BTFARG (exceed the number of parameters) check_error 'r kfree ^$retval' # NO_RETVAL
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 454/466 KVM: x86/mmu: Ensure that kvm_release_pfn_clean() takes exact pfn from kvm_faultin_pfn()
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nikolay Kuratov <[email protected]>
Since 5.16 and prior to 6.13 KVM can't be used with FSDAX guest memory (PMD pages). To reproduce the issue you need to reserve guest memory with memmap= cmdline, create and mount FS in DAX mode (tested both XFS and ext4), see doc link below. ndctl command for test:
ndctl create-namespace -v -e namespace1.0 --map=dev --mode=fsdax -a 2M Then pass memory object to qemu like:
-m 8G -object memory-backend-file,id=ram0,size=8G,\
mem-path=/mnt/pmem/guestmem,share=on,prealloc=on,dump=off,align=2097152 \
-numa node,memdev=ram0,cpus=0-1
QEMU fails to run guest with error: kvm run failed Bad address and there are two warnings in dmesg:
WARN_ON_ONCE(!page_count(page)) in kvm_is_zone_device_page() and WARN_ON_ONCE(folio_ref_count(folio) <= 0) in try_grab_folio() (v6.6.63)
It looks like in the past assumption was made that pfn won't change from faultin_pfn() to release_pfn_clean(), e.g. see
commit 4cd071d13c5c ("KVM: x86/mmu: Move calls to thp_adjust() down a level") But kvm_page_fault structure made pfn part of mutable state, so now release_pfn_clean() can take hugepage-adjusted pfn.
And it works for all cases (/dev/shm, hugetlb, devdax) except fsdax. Apparently in fsdax mode faultin-pfn and adjusted-pfn may refer to different folios, so we're getting get_page/put_page imbalance.
To solve this preserve faultin pfn in separate local variable and pass it in kvm_release_pfn_clean().
Patch tested for all mentioned guest memory backends with tdp_mmu={0,1}.
No bug in upstream as it was solved fundamentally by
commit 8dd861cc07e2 ("KVM: x86/mmu: Put refcounted pages instead of blindly releasing pfns") and related patch series.
--- arch/x86/kvm/mmu/mmu.c | 10 ++++++++-- arch/x86/kvm/mmu/paging_tmpl.h | 5 ++++- 2 files changed, 12 insertions(+), 3 deletions(-)
arch/x86/kvm/mmu/mmu.c +8 -2
@@ -4580,6 +4580,7 @@ static bool is_page_fault_stale(struct kstatic int direct_page_fault (struct kvm_vcpu *vcpu,struct kvm_page_fault *fault) { +kvm_pfn_t orig_pfn;int r;/* Dummy roots are used only for shadowing bad guest roots. */
@@ -4601,6 +4602,8 @@ static int direct_page_fault(struct kvm_if (r !=RET_PF_CONTINUE )return r; + orig_pfn = fault->pfn; + r =RET_PF_RETRY ;write_lock (&vcpu->kvm->mmu_lock);
@@ -4615,7 +4618,7 @@ static int direct_page_fault(struct kvm_ out_unlock:write_unlock (&vcpu->kvm->mmu_lock); -kvm_release_pfn_clean (fault->pfn); +kvm_release_pfn_clean (orig_pfn);return r; }
@@ -4675,6 +4678,7 @@ EXPORT_SYMBOL_GPL(kvm_handle_page_fault)static int kvm_tdp_mmu_page_fault (struct kvm_vcpu *vcpu,struct kvm_page_fault *fault) { +kvm_pfn_t orig_pfn;int r;if (page_fault_handle_page_track (vcpu, fault))
@@ -4692,6 +4696,8 @@ static int kvm_tdp_mmu_page_fault(structif (r !=RET_PF_CONTINUE )return r; + orig_pfn = fault->pfn; + r =RET_PF_RETRY ;read_lock (&vcpu->kvm->mmu_lock);
@@ -4702,7 +4708,7 @@ static int kvm_tdp_mmu_page_fault(struct out_unlock:read_unlock (&vcpu->kvm->mmu_lock); -kvm_release_pfn_clean (fault->pfn); +kvm_release_pfn_clean (orig_pfn); return r; }#endif
arch/x86/kvm/mmu/paging_tmpl.h +4 -1
@@ -778,6 +778,7 @@ static int FNAME(fetch)(struct kvm_vcpustatic int FNAME (page_fault )(struct kvm_vcpu *vcpu,struct kvm_page_fault *fault) {struct guest_walker walker; +kvm_pfn_t orig_pfn;int r;WARN_ON_ONCE (fault->is_tdp);
@@ -836,6 +837,8 @@ static int FNAME(page_fault)(struct kvm_ walker.pte_access &= ~ACC_EXEC_MASK ; } + orig_pfn = fault->pfn; + r =RET_PF_RETRY ;write_lock (&vcpu->kvm->mmu_lock);
@@ -849,7 +852,7 @@ static int FNAME(page_fault)(struct kvm_ out_unlock:write_unlock (&vcpu->kvm->mmu_lock); -kvm_release_pfn_clean (fault->pfn); +kvm_release_pfn_clean (orig_pfn);return r; }
Greg Kroah-Hartman
maintainerPATCH 455/466 jffs2: Prevent rtime decompress memory corruption
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kinsey Moore <[email protected]>
commit fe051552f5078fa02d593847529a3884305a6ffe upstream.
The rtime decompression routine does not fully check bounds during the entirety of the decompression pass and can corrupt memory outside the decompression buffer if the compressed data is corrupted. This adds the required check to prevent this failure mode.
--- fs/jffs2/compr_rtime.c | 3 +++ 1 file changed, 3 insertions(+)
fs/jffs2/compr_rtime.c +3 -0
@@ -95,6 +95,9 @@ static int jffs2_rtime_decompress(unsign positions[value]=outpos;if (repeat) { +if ((outpos + repeat) >= destlen) { +return 1 ; + }if (backoffs + repeat >= outpos) {while (repeat) { cpage_out[outpos++] = cpage_out[backoffs++];
Greg Kroah-Hartman
maintainerPATCH 456/466 jffs2: Fix rtime decompressor
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Richard Weinberger <[email protected]>
commit b29bf7119d6bbfd04aabb8d82b060fe2a33ef890 upstream.
The fix for a memory corruption contained a off-by-one error and caused the compressor to fail in legit cases.
--- fs/jffs2/compr_rtime.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/jffs2/compr_rtime.c +1 -1
@@ -95,7 +95,7 @@ static int jffs2_rtime_decompress(unsign positions[value]=outpos;if (repeat) { -if ((outpos + repeat) >= destlen) { +if ((outpos + repeat) > destlen) {return 1 ; }if (backoffs + repeat >= outpos) {
Greg Kroah-Hartman
maintainerPATCH 457/466 media: ipu6: use the IPU6 DMA mapping APIs to do mapping
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bingbu Cao <[email protected]>
commit 1d4a000289979cc7f2887c8407b1bfe2a0918354 upstream.
dma_ops is removed from the IPU6 auxiliary device, ISYS driver should use the IPU6 DMA mapping APIs directly instead of depending on the device callbacks.
ISYS driver switch from the videobuf2 DMA contig memory allocator to scatter/gather memory allocator.
--- drivers/media/pci/intel/ipu6/Kconfig | 2 drivers/media/pci/intel/ipu6/ipu6-isys-queue.c | 66 ++++++++++++++++++++----- drivers/media/pci/intel/ipu6/ipu6-isys-queue.h | 1 drivers/media/pci/intel/ipu6/ipu6-isys.c | 19 +++---- 4 files changed, 64 insertions(+), 24 deletions(-)
drivers/media/pci/intel/ipu6/Kconfig +1 -1
@@ -8,7 +8,7 @@ config VIDEO_INTEL_IPU6 select IOMMU_IOVA select VIDEO_V4L2_SUBDEV_API select MEDIA_CONTROLLER - select VIDEOBUF2_DMA_CONTIG + select VIDEOBUF2_DMA_SG select V4L2_FWNODE help This is the 6th Gen Intel Image Processing Unit, found in Intel SoCs
drivers/media/pci/intel/ipu6/ipu6-isys-queue.c +53 -13
130 lines not on this page · raw message
drivers/media/pci/intel/ipu6/ipu6-isys-queue.h +1 -0
@@ -38,6 +38,7 @@ struct ipu6_isys_buffer {struct ipu6_isys_video_buffer {struct vb2_v4l2_buffer vb_v4l2;struct ipu6_isys_buffer ib; +dma_addr_t dma_addr; };#define IPU6_ISYS_BUFFER_LIST_FL_INCOMING BIT(0)
drivers/media/pci/intel/ipu6/ipu6-isys.c +9 -10
@@ -34,6 +34,7 @@#include "ipu6-bus.h" #include "ipu6-cpd.h" +#include "ipu6-dma.h" #include "ipu6-isys.h" #include "ipu6-isys-csi2.h" #include "ipu6-mmu.h"
@@ -933,29 +934,27 @@ static const struct dev_pm_ops isys_pm_ostatic void free_fw_msg_bufs (struct ipu6_isys *isys) { -struct device *dev = &isys->adev->auxdev.dev;struct isys_fw_msgs *fwmsg, *safe;list_for_each_entry_safe (fwmsg, safe, &isys->framebuflist, head) -dma_free_attrs (dev,sizeof (struct isys_fw_msgs ), fwmsg, - fwmsg->dma_addr,0 ); +ipu6_dma_free (isys->adev,sizeof (struct isys_fw_msgs ), fwmsg, + fwmsg->dma_addr,0 );list_for_each_entry_safe (fwmsg, safe, &isys->framebuflist_fw, head) -dma_free_attrs (dev,sizeof (struct isys_fw_msgs ), fwmsg, - fwmsg->dma_addr,0 ); +ipu6_dma_free (isys->adev,sizeof (struct isys_fw_msgs ), fwmsg, + fwmsg->dma_addr,0 ); }static int alloc_fw_msg_bufs (struct ipu6_isys *isys,int amount) { -struct device *dev = &isys->adev->auxdev.dev;struct isys_fw_msgs *addr;dma_addr_t dma_addr;unsigned long flags;unsigned int i;for (i =0 ; i < amount; i++) { - addr =dma_alloc_attrs (dev,sizeof (struct isys_fw_msgs ), - &dma_addr,GFP_KERNEL ,0 ); + addr =ipu6_dma_alloc (isys->adev,sizeof (*addr), + &dma_addr,GFP_KERNEL ,0 );if (!addr)break ; addr->dma_addr = dma_addr;
@@ -974,8 +973,8 @@ static int alloc_fw_msg_bufs(struct ipu6 struct isys_fw_msgs, head);list_del (&addr->head);spin_unlock_irqrestore (&isys->listlock, flags); -dma_free_attrs (dev,sizeof (struct isys_fw_msgs ), addr, - addr->dma_addr,0 ); +ipu6_dma_free (isys->adev,sizeof (struct isys_fw_msgs ), addr, + addr->dma_addr,0 );spin_lock_irqsave (&isys->listlock, flags); }spin_unlock_irqrestore (&isys->listlock, flags);
Greg Kroah-Hartman
maintainerPATCH 458/466 ocfs2: Revert "ocfs2: fix the la space leak when unmounting an ocfs2 volume"
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Heming Zhao <[email protected]>
This reverts commit dfe6c5692fb5 ("ocfs2: fix the la space leak when unmounting an ocfs2 volume").
In commit dfe6c5692fb5, the commit log "This bug has existed since the initial OCFS2 code." is wrong. The correct introduction commit is 30dd3478c3cd ("ocfs2: correctly use ocfs2_find_next_zero_bit()").
The influence of commit dfe6c5692fb5 is that it provides a correct fix for the latest kernel. however, it shouldn't be pushed to stable branches. Let's use this commit to revert all branches that include dfe6c5692fb5 and use a new fix method to fix commit 30dd3478c3cd.
--- fs/ocfs2/localalloc.c | 19 ------------------- 1 file changed, 19 deletions(-)
fs/ocfs2/localalloc.c +0 -19
@@ -1002,25 +1002,6 @@ static int ocfs2_sync_local_to_main(stru start = bit_off +1 ; } -/* clear the contiguous bits until the end boundary */ -if (count) { - blkno = la_start_blk + -ocfs2_clusters_to_blocks (osb->sb, - start - count); - -trace_ocfs2_sync_local_to_main_free ( - count, start - count, - (unsigned long long )la_start_blk, - (unsigned long long )blkno); - - status =ocfs2_release_clusters (handle, - main_bm_inode, - main_bm_bh, blkno, - count); -if (status <0 ) -mlog_errno (status); - } - bail:if (status)mlog_errno (status);
Greg Kroah-Hartman
maintainerPATCH 459/466 net/mlx5: unique names for per device caches
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sebastian Ott <[email protected]>
commit 25872a079bbbe952eb660249cc9f40fa75623e68 upstream.
Add the device name to the per device kmem_cache names to ensure their uniqueness. This fixes warnings like this:
"kmem_cache of name 'mlx5_fs_fgs' already exists".
--- drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +5 -2
@@ -3698,6 +3698,7 @@ void mlx5_fs_core_free(struct mlx5_core_int mlx5_fs_core_alloc (struct mlx5_core_dev *dev) {struct mlx5_flow_steering *steering; +char name[80 ];int err =0 ; err =mlx5_init_fc_stats (dev);
@@ -3722,10 +3723,12 @@ int mlx5_fs_core_alloc(struct mlx5_core_else steering->mode =MLX5_FLOW_STEERING_MODE_DMFS ; - steering->fgs_cache =kmem_cache_create ("mlx5_fs_fgs" , +snprintf (name,sizeof (name),"%s-mlx5_fs_fgs" ,dev_name (dev->device)); + steering->fgs_cache =kmem_cache_create (name,sizeof (struct mlx5_flow_group ),0 ,0 ,NULL ); - steering->ftes_cache =kmem_cache_create ("mlx5_fs_ftes" ,sizeof (struct fs_fte ),0 , +snprintf (name,sizeof (name),"%s-mlx5_fs_ftes" ,dev_name (dev->device)); + steering->ftes_cache =kmem_cache_create (name,sizeof (struct fs_fte ),0 ,0 ,NULL );if (!steering->ftes_cache || !steering->fgs_cache) { err = -ENOMEM ;
Greg Kroah-Hartman
maintainerPATCH 460/466 ASoC: Intel: avs: Fix return status of avs_pcm_hw_constraints_init()
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Amadeusz Sławiński <[email protected]>
commit a0aae96be5ffc5b456ca07bfe1385b721c20e184 upstream.
Check for return code from avs_pcm_hw_constraints_init() in avs_dai_fe_startup() only checks if value is different from 0. Currently function can return positive value, change it to return 0 on success.
I've observed KASAN on our setups and while patch itself is correct regardless. Problem seems to be caused by recent changes to rates, as this started happening after recent patchsets and doesn't reproduce with those reverted
https://lore.kernel.org/linux-sound/[email protected]/
https://lore.kernel.org/linux-sound/[email protected]/
I've tested using Mark tree, where they are both applied and for some reason snd_pcm_hw_constraint_minmax() started returning positive value, while previously it returned 0. I'm bit worried if it signals some potential deeper problem regarding constraints with above changes.
--- sound/soc/intel/avs/pcm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/intel/avs/pcm.c +1 -1
@@ -509,7 +509,7 @@ static int avs_pcm_hw_constraints_init(sSNDRV_PCM_HW_PARAM_FORMAT ,SNDRV_PCM_HW_PARAM_CHANNELS , SNDRV_PCM_HW_PARAM_RATE, -1); -return ret; +return 0 ; }static int avs_dai_fe_startup (struct snd_pcm_substream *substream,struct snd_soc_dai *dai)
Greg Kroah-Hartman
maintainerPATCH 461/466 drm/amdgpu: rework resume handling for display (v2)
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <[email protected]>
commit 73dae652dcac776296890da215ee7dec357a1032 upstream.
Split resume into a 3rd step to handle displays when DCC is enabled on DCN 4.0.1. Move display after the buffer funcs have been re-enabled so that the GPU will do the move and properly set the DCC metadata for DCN.
v2: fix fence irq resume ordering
--- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 45 +++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +43 -2
@@ -3666,7 +3666,7 @@ static int amdgpu_device_ip_resume_phase* * @adev: amdgpu_device pointer * -* First resume function for hardware IPs. The list of all the hardware +* Second resume function for hardware IPs. The list of all the hardware * IPs that make up the asic is walked and the resume callbacks are run for * all blocks except COMMON, GMC, and IH. resume puts the hardware into a * functional state after a suspend and updates the software state as
@@ -3684,6 +3684,7 @@ static int amdgpu_device_ip_resume_phaseif (adev->ip_blocks[i].version->type ==AMD_IP_BLOCK_TYPE_COMMON || adev->ip_blocks[i].version->type ==AMD_IP_BLOCK_TYPE_GMC || adev->ip_blocks[i].version->type ==AMD_IP_BLOCK_TYPE_IH || + adev->ip_blocks[i].version->type ==AMD_IP_BLOCK_TYPE_DCE || adev->ip_blocks[i].version->type ==AMD_IP_BLOCK_TYPE_PSP )continue ; r = adev->ip_blocks[i].version->funcs->resume (adev);
@@ -3699,6 +3700,36 @@ static int amdgpu_device_ip_resume_phase }/** +* amdgpu_device_ip_resume_phase3 - run resume for hardware IPs +* +* @adev: amdgpu_device pointer +* +* Third resume function for hardware IPs. The list of all the hardware +* IPs that make up the asic is walked and the resume callbacks are run for +* all DCE. resume puts the hardware into a functional state after a suspend +* and updates the software state as necessary. This function is also used +* for restoring the GPU after a GPU reset. +* +* Returns 0 on success, negative error code on failure. +*/ +static int amdgpu_device_ip_resume_phase3 (struct amdgpu_device *adev) +{ +int i, r; + +for (i =0 ; i < adev->num_ip_blocks; i++) { +if (!adev->ip_blocks[i].status.valid || adev->ip_blocks[i].status.hw) +continue ; +if (adev->ip_blocks[i].version->type ==AMD_IP_BLOCK_TYPE_DCE ) { + r = adev->ip_blocks[i].version->funcs->resume (adev); +if (r) +return r; + } + } + +return 0 ; +} + +/** * amdgpu_device_ip_resume - run resume for hardware IPs * * @adev: amdgpu_device pointer
@@ -3727,6 +3758,13 @@ static int amdgpu_device_ip_resume(strucif (adev->mman.buffer_funcs_ring->sched.ready)amdgpu_ttm_set_buffer_funcs_status (adev, true); +if (r) +return r; + +amdgpu_fence_driver_hw_init (adev); + + r =amdgpu_device_ip_resume_phase3 (adev); +return r; }
@@ -4809,7 +4847,6 @@ int amdgpu_device_resume(struct drm_devidev_err (adev->dev,"amdgpu_device_ip_resume failed (%d).\n" , r); goto exit; } -amdgpu_fence_driver_hw_init (adev);if (!adev->in_s0ix) { r =amdgpu_amdkfd_resume (adev, adev->in_runpm);
@@ -5431,6 +5468,10 @@ int amdgpu_do_asic_reset(struct list_heaif (tmp_adev->mman.buffer_funcs_ring->sched.ready)amdgpu_ttm_set_buffer_funcs_status (tmp_adev, true); + r =amdgpu_device_ip_resume_phase3 (tmp_adev); +if (r) + goto out; +if (vram_lost)amdgpu_device_fill_reset_magic (tmp_adev);
Greg Kroah-Hartman
maintainerPATCH 462/466 ALSA: hda: Fix build error without CONFIG_SND_DEBUG
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
commit 0ddf2784d6c29e59409a62b8f32dc5abe56135a4 upstream.
The macro should have been defined without setting the non-existing name field in the case of CONFIG_SND_DEBUG=n.
--- sound/pci/hda/hda_local.h | 6 ++++++ 1 file changed, 6 insertions(+)
sound/pci/hda/hda_local.h +6 -0
@@ -308,9 +308,15 @@ struct hda_quirk {#endif }; +#ifdef CONFIG_SND_DEBUG_VERBOSE #define HDA_CODEC_QUIRK (vend, dev, xname, val) \ { _SND_PCI_QUIRK_ID(vend, dev), .value = (val), .name = (xname),\ .match_codec_ssid = true } +#else +#define HDA_CODEC_QUIRK (vend, dev, xname, val) \ + { _SND_PCI_QUIRK_ID(vend, dev), .value = (val), \ + .match_codec_ssid = true } +#endif struct snd_hda_pin_quirk {unsigned int codec;/* Codec vendor/device ID */
Greg Kroah-Hartman
maintainerPATCH 463/466 Revert "drm/amd/display: parse umc_info or vram_info based on ASIC"
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <[email protected]>
commit 3c2296b1eec55b50c64509ba15406142d4a958dc upstream.
This reverts commit 2551b4a321a68134360b860113dd460133e856e5.
This was not the root cause. Revert.
--- drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c +1 -3
@@ -3127,9 +3127,7 @@ static enum bp_result bios_parser_get_vrstruct atom_data_revision revision;// vram info moved to umc_info for DCN4x -if (dcb->ctx->dce_version >=DCN_VERSION_4_01 && - dcb->ctx->dce_version <DCN_VERSION_MAX && - info &&DATA_TABLES (umc_info)) { +if (info &&DATA_TABLES (umc_info)) { header = GET_IMAGE(struct atom_common_table_header,DATA_TABLES (umc_info));
Greg Kroah-Hartman
maintainerPATCH 464/466 s390/pci: Fix leak of struct zpci_dev when zpci_add_device() fails
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Niklas Schnelle <[email protected]>
commit 48796104c864cf4dafa80bd8c2ce88f9c92a65ea upstream.
Prior to commit 0467cdde8c43 ("s390/pci: Sort PCI functions prior to creating virtual busses") the IOMMU was initialized and the device was registered as part of zpci_create_device() with the struct zpci_dev freed if either resulted in an error. With that commit this was moved into a separate function called zpci_add_device().
While this new function logs when adding failed, it expects the caller not to use and to free the struct zpci_dev on error. This difference between it and zpci_create_device() was missed while changing the callers and the incompletely initialized struct zpci_dev may get used in zpci_scan_configured_device in the error path. This then leads to a crash due to the device not being registered with the zbus. It was also not freed in this case. Fix this by handling the error return of zpci_add_device(). Since in this case the zdev was not added to the zpci_list it can simply be discarded and freed. Also make this more explicit by moving the kref_init() into zpci_add_device() and document that zpci_zdev_get()/zpci_zdev_put() must be used after adding.
--- arch/s390/pci/pci.c | 21 +++++++++++++++++---- arch/s390/pci/pci_event.c | 10 ++++++++-- 2 files changed, 25 insertions(+), 6 deletions(-)
arch/s390/pci/pci.c +17 -4
@@ -779,8 +779,9 @@ int zpci_hot_reset_device(struct zpci_de* @fh: Current Function Handle of the device to be created * @state: Initial state after creation either Standby or Configured * -* Creates a new zpci device and adds it to its, possibly newly created, zbus -* as well as zpci_list. +* Allocates a new struct zpci_dev and queries the platform for its details. +* If successful the device can subsequently be added to the zPCI subsystem +* using zpci_add_device(). * * Returns: the zdev on success or an error pointer otherwise */
@@ -803,7 +804,6 @@ struct zpci_dev *zpci_create_device(u32 goto error; zdev->state = state; -kref_init (&zdev->kref);mutex_init (&zdev->state_lock);mutex_init (&zdev->fmb_lock);mutex_init (&zdev->kzdev_lock);
@@ -816,6 +816,17 @@ error:return ERR_PTR (rc); } +/** +* zpci_add_device() - Add a previously created zPCI device to the zPCI subsystem +* @zdev: The zPCI device to be added +* +* A struct zpci_dev is added to the zPCI subsystem and to a virtual PCI bus creating +* a new one as necessary. A hotplug slot is created and events start to be handled. +* If successful from this point on zpci_zdev_get() and zpci_zdev_put() must be used. +* If adding the struct zpci_dev fails the device was not added and should be freed. +* +* Return: 0 on success, or an error code otherwise +*/ int zpci_add_device (struct zpci_dev *zdev) {int rc;
@@ -829,6 +840,7 @@ int zpci_add_device(struct zpci_dev *zdeif (rc) goto error_destroy_iommu; +kref_init (&zdev->kref);spin_lock (&zpci_list_lock);list_add_tail (&zdev->entry, &zpci_list);spin_unlock (&zpci_list_lock);
@@ -1105,7 +1117,8 @@ static void zpci_add_devices(struct listlist_sort (NULL , scan_list, &zpci_cmp_rid);list_for_each_entry_safe (zdev, tmp, scan_list, entry) {list_del_init (&zdev->entry); -zpci_add_device (zdev); +if (zpci_add_device (zdev)) +kfree (zdev); } }
arch/s390/pci/pci_event.c +8 -2
@@ -340,7 +340,10 @@ static void __zpci_event_availability(st zdev =zpci_create_device (ccdf->fid, ccdf->fh,ZPCI_FN_STATE_CONFIGURED );if (IS_ERR (zdev))break ; -zpci_add_device (zdev); +if (zpci_add_device (zdev)) { +kfree (zdev); +break ; + } }else {/* the configuration request may be stale */ if (zdev->state !=ZPCI_FN_STATE_STANDBY )
@@ -354,7 +357,10 @@ static void __zpci_event_availability(st zdev =zpci_create_device (ccdf->fid, ccdf->fh,ZPCI_FN_STATE_STANDBY );if (IS_ERR (zdev))break ; -zpci_add_device (zdev); +if (zpci_add_device (zdev)) { +kfree (zdev); +break ; + } }else {zpci_update_fh (zdev, ccdf->fh); }
Greg Kroah-Hartman
maintainerPATCH 465/466 ALSA: hda/realtek: Fix spelling mistake "Firelfy" -> "Firefly"
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Colin Ian King <[email protected]>
commit 20c3b3e5f2641eff3d85f33e6a468ac052b169bd upstream.
There is a spelling mistake in a literal string in the alc269_fixup_tbl quirk table. Fix it.
--- sound/pci/hda/patch_realtek.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/pci/hda/patch_realtek.c +1 -1
@@ -10512,7 +10512,7 @@ static const struct hda_quirk alc269_fixSND_PCI_QUIRK (0x103c ,0x8d91 ,"HP ZBook Firefly 14 G12" ,ALC285_FIXUP_HP_GPIO_LED ),SND_PCI_QUIRK (0x103c ,0x8d92 ,"HP ZBook Firefly 16 G12" ,ALC285_FIXUP_HP_GPIO_LED ),SND_PCI_QUIRK (0x103c ,0x8e18 ,"HP ZBook Firefly 14 G12A" ,ALC285_FIXUP_HP_GPIO_LED ), -SND_PCI_QUIRK (0x103c ,0x8e19 ,"HP ZBook Firelfy 14 G12A" ,ALC285_FIXUP_HP_GPIO_LED ), +SND_PCI_QUIRK (0x103c ,0x8e19 ,"HP ZBook Firefly 14 G12A" ,ALC285_FIXUP_HP_GPIO_LED ),SND_PCI_QUIRK (0x103c ,0x8e1a ,"HP ZBook Firefly 14 G12A" ,ALC285_FIXUP_HP_GPIO_LED ),SND_PCI_QUIRK (0x1043 ,0x103e ,"ASUS X540SA" ,ALC256_FIXUP_ASUS_MIC ), SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300),
Greg Kroah-Hartman
maintainerPATCH 466/466 clocksource: Make negative motion detection more robust
In reply to Greg Kroah-Hartman6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Gleixner <[email protected]>
commit 76031d9536a076bf023bedbdb1b4317fc801dd67 upstream.
Guenter reported boot stalls on a emulated ARM 32-bit platform, which has a 24-bit wide clocksource.
It turns out that the calculated maximal idle time, which limits idle sleeps to prevent clocksource wrap arounds, is close to the point where the negative motion detection triggers.
max_idle_ns: 597268854 ns
negative motion tripping point: 671088640 ns
If the idle wakeup is delayed beyond that point, the clocksource advances far enough to trigger the negative motion detection. This prevents the clock to advance and in the worst case the system stalls completely if the consecutive sleeps based on the stale clock are delayed as well.
Cure this by calculating a more robust cut-off value for negative motion, which covers 87.5% of the actual clocksource counter width. Compare the delta against this value to catch negative motion. This is specifically for clock sources with a small counter width as their wrap around time is close to the half counter width. For clock sources with wide counters this is not a problem because the maximum idle time is far from the half counter width due to the math overflow protection constraints.
For the case at hand this results in a tripping point of 1174405120ns.
Note, that this cannot prevent issues when the delay exceeds the 87.5% margin, but that's not different from the previous unchecked version which allowed arbitrary time jumps.
Systems with small counter width are prone to invalid results, but this problem is unlikely to be seen on real hardware. If such a system completely stalls for more than half a second, then there are other more urgent problems than the counter wrapping around.
--- include/linux/clocksource.h | 2 ++ kernel/time/clocksource.c | 11 ++++++++++- kernel/time/timekeeping.c | 6 ++++-- kernel/time/timekeeping_internal.h | 8 ++++---- 4 files changed, 20 insertions(+), 7 deletions(-)
include/linux/clocksource.h +2 -0
@@ -49,6 +49,7 @@ struct module;* @archdata: Optional arch-specific data * @max_cycles: Maximum safe cycle value which won't overflow on * multiplication +* @max_raw_delta: Maximum safe delta value for negative motion detection * @name: Pointer to clocksource name * @list: List head for registration (internal) * @freq_khz: Clocksource frequency in khz.
@@ -109,6 +110,7 @@ struct clocksource {struct arch_clocksource_data archdata;#endif u64 max_cycles; +u64 max_raw_delta;const char *name;struct list_head list;u32 freq_khz;
kernel/time/clocksource.c +10 -1
@@ -22,7 +22,7 @@ static noinline u64 cycles_to_nsec_safe(struct clocksource *cs, u64 start, u64 end) { -u64 delta =clocksource_delta (end, start, cs->mask); +u64 delta =clocksource_delta (end, start, cs->mask, cs->max_raw_delta);if (likely (delta < cs->max_cycles))return clocksource_cyc2ns (delta, cs->mult, cs->shift);
@@ -985,6 +985,15 @@ static inline void clocksource_update_ma cs->max_idle_ns =clocks_calc_max_nsecs (cs->mult, cs->shift, cs->maxadj, cs->mask, &cs->max_cycles); + +/* +* Threshold for detecting negative motion in clocksource_delta(). +* +* Allow for 0.875 of the counter width so that overly long idle +* sleeps, which go slightly over mask/2, do not trigger the +* negative motion detection. +*/ + cs->max_raw_delta = (cs->mask >>1 ) + (cs->mask >>2 ) + (cs->mask >>3 ); }static struct clocksource *clocksource_find_best (bool oneshot,bool skipcur)
kernel/time/timekeeping.c +4 -2
@@ -793,7 +793,8 @@ static void timekeeping_forward_now(struu64 cycle_now, delta; cycle_now =tk_clock_read (&tk->tkr_mono); - delta =clocksource_delta (cycle_now, tk->tkr_mono.cycle_last, tk->tkr_mono.mask); + delta =clocksource_delta (cycle_now, tk->tkr_mono.cycle_last, tk->tkr_mono.mask, + tk->tkr_mono.clock->max_raw_delta); tk->tkr_mono.cycle_last = cycle_now; tk->tkr_raw.cycle_last = cycle_now;
@@ -2292,7 +2293,8 @@ static bool timekeeping_advance(enum tim goto out; offset =clocksource_delta (tk_clock_read (&tk->tkr_mono), - tk->tkr_mono.cycle_last, tk->tkr_mono.mask); + tk->tkr_mono.cycle_last, tk->tkr_mono.mask, + tk->tkr_mono.clock->max_raw_delta);/* Check if there's really nothing to do */ if (offset < real_tk->cycle_interval && mode ==TK_ADV_TICK )
kernel/time/timekeeping_internal.h +4 -4
@@ -15,15 +15,15 @@ extern void tk_debug_account_sleep_time(#define tk_debug_account_sleep_time (x)#endif -static inline u64 clocksource_delta (u64 now,u64 last,u64 mask) +static inline u64 clocksource_delta (u64 now,u64 last,u64 mask,u64 max_delta) {u64 ret = (now - last) & mask;/* -* Prevent time going backwards by checking the MSB of mask in -* the result. If set, return 0. +* Prevent time going backwards by checking the result against +* @max_delta. If greater, return 0. */ -return ret & ~(mask >>1 ) ?0 : ret; +return ret > max_delta ?0 : ret; }/* Semi public for serialization of non timekeeper VDSO updates. */
Works as it should
AMD Ryzen 5 5600 6-Core Processor:
https://www.inet.se/produkt/5304697/amd-ryzen-5-5600-3-5-ghz-35mb on a
https://www.gigabyte.com/Motherboard/B550-AORUS-ELITE-V2-rev-12
https://www.inet.se/produkt/1903406/gigabyte-b550-aorus-elite-v2
motherboard :)
running Arch Linux with the testing repos enabled:
https://archlinux.org/ https://archboot.com/
https://wiki.archlinux.org/title/Arch_Testing_Team
Den tors 12 dec. 2024 kl 16:00 skrev Greg Kroah-Hartman <[email protected]>:
Quoted 1,971 lines
This is the start of the stable review cycle for the 6.12.5 release. There are 466 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 14 Dec 2024 14:41:35 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.12.5-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.12.y
and the diffstat can be found below.thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:Greg Kroah-Hartman <[email protected]>
Linux 6.12.5-rc1Thomas Gleixner <[email protected]>
clocksource: Make negative motion detection more robustColin Ian King <[email protected]>
ALSA: hda/realtek: Fix spelling mistake "Firelfy" -> "Firefly"Niklas Schnelle <[email protected]>
s390/pci: Fix leak of structzpci_devwhenzpci_add_device()failsAlex Deucher <[email protected]>
Revert "drm/amd/display: parseumc_infoorvram_infobased on ASIC"Takashi Iwai <[email protected]>
ALSA: hda: Fix build error withoutCONFIG_SND_DEBUGAlex Deucher <[email protected]>
drm/amdgpu: rework resume handling for display (v2)Amadeusz Sławiński <[email protected]>
ASoC: Intel: avs: Fix return status ofavs_pcm_hw_constraints_init()Sebastian Ott <[email protected]>
net/mlx5: unique names for per device cachesHeming Zhao <[email protected]>
ocfs2: Revert "ocfs2: fix the la space leak when unmounting an ocfs2 volume"Bingbu Cao <[email protected]>
media: ipu6: use the IPU6 DMA mapping APIs to do mappingRichard Weinberger <[email protected]>
jffs2: Fix rtime decompressorKinsey Moore <[email protected]>
jffs2: Prevent rtime decompress memory corruptionNikolay Kuratov <[email protected]>
KVM: x86/mmu: Ensure thatkvm_release_pfn_clean()takes exact pfn fromkvm_faultin_pfn()Hari Bathini <[email protected]>
selftests/ftrace: adjust offset for kprobe syntax error testYishai Hadas <[email protected]>
vfio/mlx5: Align the page tracking max message size with the device capabilityLinus Torvalds <[email protected]>
Revert "unicode: Don't special case ignorable code points"Damien Le Moal <[email protected]>
x86: Fix build regression withCONFIG_KEXEC_JUMPenabledMasami Hiramatsu (Google) <[email protected]>
tracing/eprobe: Fix to release eprobe when failed to adddyn_eventHaoyu Li <[email protected]>
clk: en7523: Initialize num before accessing hws inen7523_register_clocks()Filipe Manana <[email protected]>
btrfs: fix missing snapshot drew unlock when root is dead during swap activationQu Wenruo <[email protected]>
btrfs: fix mount failure due to remount racesDavid Sterba <[email protected]>
btrfs: drop unused parameter data frombtrfs_fill_super()David Sterba <[email protected]>
btrfs: drop unused parameter options fromopen_ctree()Wander Lairson Costa <[email protected]>
sched/deadline: Fix warning inmigrate_enablefor boosted tasksK Prateek Nayak <[email protected]>
sched/core: Prevent wakeup of ksoftirqd during idle load balanceK Prateek Nayak <[email protected]>
sched/fair: Checkidle_cpu()beforeneed_resched()to detect ilb CPU turning busyK Prateek Nayak <[email protected]>
sched/core: Remove the unnecessaryneed_resched()check innohz_csd_func()Josh Don <[email protected]>
sched: fix warning insched_setaffinitySung Lee <[email protected]>
drm/amd/display: Add option to retrieve detile buffer sizeAustin Zheng <[email protected]>
drm/amd/display: Update Interface to Check UCLK DPMHimal Prasad Ghimiray <[email protected]>
drm/xe/devcoredump: Update handling ofxe_force_wake_getreturnHimal Prasad Ghimiray <[email protected]>
drm/xe/forcewake: Add a helperxe_force_wake_ref_has_domain()John Harrison <[email protected]>
drm/xe/guc: Copy GuC log prior to dumpingJohn Harrison <[email protected]>
drm/xe/devcoredump: Add ASCII85 dump helper functionJohn Harrison <[email protected]>
drm/xe/devcoredump: Improve section headings and add tile infoJohn Harrison <[email protected]>
drm/xe/devcoredump: Usedrm_putsand already cached local variablesManivannan Sadhasivam <[email protected]>
scsi: ufs: pltfrm: Dellocate HBA duringufshcd_pltfrm_remove()Jens Axboe <[email protected]>
io_uring/tctx: work aroundxa_store()allocation error issueRasmus Villemoes <[email protected]>
setlocalversion: work around "git describe" performancePaulo Alcantara <[email protected]>
smb: client: don't try following DFS links incifs_tree_connect()Zhou Wang <[email protected]>
irqchip/gicv3-its: Add workaround for hip09 ITS erratum 162100801Nilay Shroff <[email protected]>
Revert "nvme: make keep-alive synchronous operation"Inochi Amaoto <[email protected]>
serial: 8250_dw: Add Sophgo SG2044 quirkDmitry Torokhov <[email protected]>
rtc: cmos: avoid takingrtc_lockfor extended period of timeParker Newman <[email protected]>
misc: eeprom:eeprom_93cx6: Add quirk for extra read clock cycleMichael Ellerman <[email protected]>
powerpc/prom_init: Fixup missing powermac #size-cellsUwe Kleine-König <[email protected]>
ASoC: amd: yc: Add quirk for microphone on Lenovo Thinkpad T14s Gen 6 21M1CTO1WWXi Ruoyao <[email protected]>
MIPS: Loongson64: DTS: Really fix PCIe port nodes for ls7aXiang Liu <[email protected]>
drm/amdgpu/vcn: resetfw_sharedwhen VCPU buffers corrupted on vcn v4.0.3Alex Far <[email protected]>
ASoC: amd: yc: fix internal mic on Redmi G 2022Dmitry Baryshkov <[email protected]>
usb: typec: ucsi: glink: be more precise on orientation-aware portsAndy Shevchenko <[email protected]>
iio: light: ltr501: Add LTER0303 to the supported devicesNuno Sa <[email protected]>
iio: adc: ad7192: properly checkspi_get_device_match_data()Saranya Gopal <[email protected]>
usb: typec: ucsi: Do not call ACPI_DSMmethod for UCSI read operationsXu Yang <[email protected]>
usb: chipidea: udc: handle USB Error Interrupt if IOC not setXu Yang <[email protected]>
usb: chipidea: udc: create bounce buffer for problem sglist entries if possibleXu Yang <[email protected]>
usb: chipidea: udc: limit usb request length to max 16KBXu Yang <[email protected]>
usb: chipidea: addCI_HDRC_HAS_SHORT_PKT_LIMITflagMelody Olvera <[email protected]>
regulator: qcom-rpmh: Update ranges for FTSMPS525Konstantin Komarov <[email protected]>
fs/ntfs3: Fix case when unmarked clusters intersect with zoneKonstantin Komarov <[email protected]>
fs/ntfs3: Fix warning inni_fiemapHuacai Chen <[email protected]>
LoongArch: Fix sleeping in atomic context forPREEMPT_RTHans de Goede <[email protected]>
ACPI: x86: Clean up Asus entries in acpi_quirk_skip_dmi_ids[]Hans de Goede <[email protected]>
ACPI: x86: Add skip i2c clients quirk for Acer Iconia One 8 A1-840Chao Yu <[email protected]>
f2fs: add a sysfs node to limit max read extent count per-inodeChao Yu <[email protected]>
f2fs: fix to shrink read extent node in batchesChao Yu <[email protected]>
f2fs: print message if fscorrupted was found inf2fs_new_node_page()Defa Li <[email protected]>
i3c: Use i3cdev->desc->info instead of calling i3c_device_get_info() to avoid deadlockDmitry Baryshkov <[email protected]>
remoteproc: qcom: pas: enable SAR2130P audio DSP supportMengyuan Lou <[email protected]>
PCI: Add ACS quirk for Wangxun FF5xxx NICsKeith Busch <[email protected]>
PCI: Add 'reset_subordinate' to reset hierarchy below bridgeMayank Rana <[email protected]>
PCI: starfive: Enable controller runtime PM before probing host bridgeEsther Shimanovich <[email protected]>
PCI: Detect and trust built-in Thunderbolt chipsJian-Hong Pan <[email protected]>
PCI: vmd: Set devices to D0 before enabling PM L1 SubstatesNirmal Patel <[email protected]>
PCI: vmd: Add DID 8086:B06F and 8086:B60B for Intel client SKUsdevi priya <[email protected]>
PCI: qcom: Add support for IPQ9574Jarkko Nikula <[email protected]>
i3c: mipi-i3c-hci: Mask ring interrupts before ring stop requestQianqiang Liu <[email protected]>
KMSAN: uninit-value ininode_go_dump(5)Qi Han <[email protected]>
f2fs: fixf2fs_bug_onwhen uninstalling filesystem callf2fs_evict_inode.Adam Young <[email protected]>
mailbox: pcc: Check before sending MCTP PCC response ACKGabriele Monaco <[email protected]>
verification/dot2: Improve dot parser robustnessfurkanonder <[email protected]>
tools/rtla: Enhance argument parsing intimerlat_load.pyTatsuya S <[email protected]>
tracing: Fix function name for trampolineKees Cook <[email protected]>
smb: client:memcpy()with surrounding object base addressYi Yang <[email protected]>
nvdimm: rectify the illogical code withinnd_dax_probe()Barnabás Czémán <[email protected]>
thermal/drivers/qcom/tsens-v1: Add support for MSM8937 tsensBarnabás Czémán <[email protected]>
pinctrl: qcom: spmi-mpp: Add PM8937 compatibleBarnabás Czémán <[email protected]>
pinctrl: qcom-pmic-gpio: add support for PM8937Kai Mäkisara <[email protected]>
scsi: st: Add MTIOCGET and MTLOAD to ioctls allowed after device resetKai Mäkisara <[email protected]>
scsi: st: Don't modify unknown block number in MTIOCGETMukesh Ojha <[email protected]>
leds: class: Protect brightness_show() with led_cdev->led_access mutexDevi Priya <[email protected]>
clk: qcom: clk-alpha-pll: Add NSS HUAYRA ALPHA PLL support for ipq9574Dmitry Baryshkov <[email protected]>
clk: qcom: dispcc-sm8550: enable support for SAR2130PDmitry Baryshkov <[email protected]>
clk: qcom: tcsrcc-sm8550: add SAR2130P supportDmitry Baryshkov <[email protected]>
clk: qcom: rpmh: add support for SAR2130PDmitry Baryshkov <[email protected]>
clk: qcom: rcg2: addclk_rcg2_shared_floor_opsJustin Tee <[email protected]>
scsi: lpfc: Prevent NDLP reference count underflow indev_loss_tmocallbackJustin Tee <[email protected]>
scsi: lpfc: CheckSLI_ACTIVEflag in FDMI cmpl before submitting follow up FDMIJustin Tee <[email protected]>
scsi: lpfc: Calllpfc_sli4_queue_unset()in restart and rmmod pathsAndrii Nakryiko <[email protected]>
bpf: put bpf_link's program when link is safe to be deallocatedJason Gunthorpe <[email protected]>
iommu/amd: Fix corruption when mapping large pages from 0Bart Van Assche <[email protected]>
scsi: ufs: core: Make DMA mask configuration more flexibleMukesh Ojha <[email protected]>
pinmux: Use sequential access to access desc->pinmux dataPetr Pavlu <[email protected]>
ring-buffer: Limit time with disabled interrupts inrb_check_pages()Yihang Li <[email protected]>
scsi:hisi_sas: Create all dump files during debugfs initializationYihang Li <[email protected]>
scsi:hisi_sas: Addcond_resched()for no forced preemption modelTomas Glozar <[email protected]>
rtla/timerlat: Make timerlat_hist_cpu->*_count unsigned long longTomas Glozar <[email protected]>
rtla/timerlat: Make timerlat_top_cpu->*_count unsigned long longJan Stancek <[email protected]>
tools/rtla: fix collision with glibc sched_attr/sched_set_attrUros Bizjak <[email protected]>
tracing: Useatomic64_inc_return()intrace_clock_counter()Mathieu Desnoyers <[email protected]>
tracing/ftrace: disable preemption in syscall probeGabriele Monaco <[email protected]>
rtla: Fix consistency ingetopt_longfortimerlat_histEsben Haabendal <[email protected]>
pinctrl: freescale: fixCOMPILE_TESTerror withPINCTRL_IMX_SCUBreno Leitao <[email protected]>
netpoll: Usercu_access_pointer()in__netpoll_setupJakub Kicinski <[email protected]>
net/neighbor: clear error in case strict check is not setDmitry Antipov <[email protected]>
rocker: fix link status detection inrocker_carrier_init()Jonas Karlman <[email protected]>
ASoC: hdmi-codec: reorder channel allocation listJiande Lu <[email protected]>
Bluetooth: btusb: Add 3 HWIDs for MT7925Jonathan McCrohan <[email protected]>
Bluetooth: btusb: Add new VID/PID 0489/e124 for MT7925Hao Qin <[email protected]>
Bluetooth: btusb: Add new VID/PID 0489/e111 for MT7925Danil Pylaev <[email protected]>
Bluetooth: Set quirks for ATS2851Danil Pylaev <[email protected]>
Bluetooth: Support new quirks for ATS2851Danil Pylaev <[email protected]>
Bluetooth: Add new quirks for ATS2851Luiz Augusto von Dentz <[email protected]>
Bluetooth:hci_core: Fix not checking skb length onhci_acldata_packetLuiz Augusto von Dentz <[email protected]>
Bluetooth:hci_conn: Usedisable_delayed_work_syncJiande Lu <[email protected]>
Bluetooth: btusb: Add USB HW IDs for MT7920/MT7925Hilda Wu <[email protected]>
Bluetooth: btusb: Add RTL8852BE device 0489:e123 to device tablesMarkus Elfring <[email protected]>
Bluetooth:hci_conn: Reducehci_conn_drop()calls in two functionsJarkko Nikula <[email protected]>
i2c: i801: Add support for Intel Panther LakeAndrew Lunn <[email protected]>
dsa: qca8k: Use nested lock to avoid splatDmitry Kandybka <[email protected]>
mptcp: fix possible integer overflow inmptcp_reset_tout_timerHou Tao <[email protected]>
bpf: Callfree_htab_elem()afterhtab_unlock_bucket()Norbert van Bolhuis <[email protected]>
wifi: brcmfmac: Fix oops due to NULL pointer dereference inbrcmf_sdiod_sglist_rw()Jiapeng Chong <[email protected]>
wifi: ipw2x00:libipw_rx_any(): fix bad alignmentPrike Liang <[email protected]>
drm/amdgpu: set the right AMDGPU sg segment limitationTakashi Iwai <[email protected]>
ALSA: usb-audio: Make mic volume workarounds globally applicableXuan Zhuo <[email protected]>
virtio-net: fix overflow insidevirtnet_rq_allocVictor Zhao <[email protected]>
drm/amdgpu: skipamdgpu_device_cache_pci_stateunder sriovFangzhi Zuo <[email protected]>
drm/amd/display: Prune Invalid Modes For HDMI OutputAurabindo Pillai <[email protected]>
drm/amd/display: parseumc_infoorvram_infobased on ASICAusef Yousof <[email protected]>
drm/amd/display: Remove hw w/a toggle if on DP2/HPOJocelyn Falempe <[email protected]>
drm/panic: Add ABGR2101010 supportDmitry Safonov <[email protected]>
net/tcp: Add missing lockdep annotations for TCP-AO hlist traversalsAleksandr Mishin <[email protected]>
fsl/fman: Validate cell-index value obtained from Device TreeNihar Chaithanya <[email protected]>
jfs: add a check to prevent array-index-out-of-bounds in dbAdjTreeGhanshyam Agrawal <[email protected]>
jfs: fix array-index-out-of-bounds injfs_readdirGhanshyam Agrawal <[email protected]>
jfs: fix shift-out-of-bounds in dbSplitGhanshyam Agrawal <[email protected]>
jfs: array-index-out-of-bounds fix in dtReadFirstLevi Yun <[email protected]>
dma-debug: fix a possible deadlock onradix_lockGang Yan <[email protected]>
mptcp: annotate data-races around subflow->fully_establishedLeo Ma <[email protected]>
drm/amd/display: Fix underflow when playing 8K video in full screen modeMac Chiang <[email protected]>
ASoC: Intel: soc-acpi-intel-arl-match: Add rt722 and rt1320 supportMac Chiang <[email protected]>
ASoC:sdw_utils: Add quirk to exclude amplifier functionLang Yu <[email protected]>
drm/amdgpu: refine error handling inamdgpu_ttm_tt_pin_userptrDonald Hunter <[email protected]>
netlink: specs: Add missing bitset attrs to ethtool specPrike Liang <[email protected]>
drm/amdgpu: Dereference the ATCS ACPI bufferVictor Lu <[email protected]>
drm/amdgpu: clearRB_OVERFLOWbit when enabling interrupts forvega20_ihSrinivasan Shanmugam <[email protected]>
drm/amdgpu/gfx9: Add cleaner shader for GFX9.4.2Leo Chen <[email protected]>
drm/amd/display: Adding array index check to prevent memory corruptionPhilipp Stanner <[email protected]>
drm/sched:memset()'job' indrm_sched_job_init()Abhishek Chauhan <[email protected]>
net: stmmac: Programming sequence for VLAN packets with split headerShengyu Qu <[email protected]>
net: sfp: change quirks for Alcatel Lucent G-010S-PManikandan Muralidharan <[email protected]>
drm/panel: simple: Add Microchip AC69T88A LVDS Display panelBadal Nilawar <[email protected]>
drm/xe/guc/ct: Flush g2h worker in case of g2h response timeoutCharles Keepax <[email protected]>
ASoC: Intel:sof_sdw: Add quirks for some new Lenovo laptopsCharles Keepax <[email protected]>
ASoC: Intel:sof_sdw: Add quirk for cs42l43 system using host DMICsCharles Keepax <[email protected]>
ASoC:sdw_utils: Add a quirk to allow the cs42l43 mic DAI to be ignoredCharles Keepax <[email protected]>
ASoC:sdw_utils: Add support for exclusion DAI quirksLeon Hwang <[email protected]>
bpf: Prevent tailcall infinite loop caused by freplaceAmir Goldstein <[email protected]>
fanotify: allow reporting errors on failure to open fdRosen Penev <[email protected]>
wifi: ath5k: add PCI ID for Arcadyan devicesRosen Penev <[email protected]>
wifi: ath5k: add PCI ID for SX76XKang Yang <[email protected]>
wifi: ath10k: avoid NULL pointer error during sdio removeIgnat Korchagin <[email protected]>
net: inet6: do not leave a dangling sk pointer ininet6_create()Ignat Korchagin <[email protected]>
net: inet: do not leave a dangling sk pointer ininet_create()Ignat Korchagin <[email protected]>
net: ieee802154: do not leave a dangling sk pointer inieee802154_create()Ignat Korchagin <[email protected]>
net:af_can: do not leave a dangling sk pointer incan_create()Ignat Korchagin <[email protected]>
Bluetooth: RFCOMM: avoid leaving dangling sk pointer inrfcomm_sock_alloc()Ignat Korchagin <[email protected]>
Bluetooth: L2CAP: do not leave dangling sk pointer on error inl2cap_sock_create()Ignat Korchagin <[email protected]>
af_packet: avoid erroring out aftersock_init_data()inpacket_create()Elena Salomatkina <[email protected]>
net/sched: cbs: Fix integer overflow incbs_set_port_rate()Simon Horman <[email protected]>
net: ethernet:fs_enet: Use %pa to formatresource_size_tSimon Horman <[email protected]>
net:fec_mpc52xx_phy: Use %pa to formatresource_size_tLeo Chen <[email protected]>
drm/amd/display: Full exit out of IPS2 when all allow signals have been clearedJeffrey Hugo <[email protected]>
accel/qaic: Add AIC080 supportKalle Valo <[email protected]>
wifi: ath12k: fix atomic calls inath12k_mac_op_set_bitrate_mask()Zhu Jun <[email protected]>
samples/bpf: Fix a resource leakHeiner Kallweit <[email protected]>
r8169: don't apply UDP padding quirk on RTL8126ATakashi Iwai <[email protected]>
ALSA: hda/realtek: Use codec SSID matching for Lenovo devicesTakashi Iwai <[email protected]>
ALSA: hda/conexant: Use the new codec SSID matchingTakashi Iwai <[email protected]>
ALSA: hda: Use own quirk lookup helperBrahmajit Das <[email protected]>
drm/display: Fix building with GCC 15Gustavo Sousa <[email protected]>
drm/xe/xe3: Add initial set of workaroundsShekhar Chauhan <[email protected]>
drm/xe/ptl: L3bank mask is not available on the media GTAlex Deucher <[email protected]>
drm/amd/display: disable SG displays on cyan skillfishZhongwei <[email protected]>
drm/amd/display: Fix garbage or black screen when resetting otgFudongwang <[email protected]>
drm/amd/display: skip disable CRTC in seemless bootup caseAlexander Aring <[email protected]>
dlm: fix possiblelkb_resourcenull dereferenceBalamurugan C <[email protected]>
ASoC: Intel:sof_rt5682: Add HDMI-In capture with rt5682 support for MTL.Igor Artemiev <[email protected]>
drm/radeon/r600_cs: Fix possible int overflow inr600_packet3_check()Srinivasan Shanmugam <[email protected]>
drm/amd/display: Fix out-of-bounds access in 'dcn21_link_encoder_create'Ping-Ke Shih <[email protected]>
wifi: rtw89: check return value ofieee80211_probereq_get()for RNRLiao Chen <[email protected]>
drm/mcde: Enable module autoloadingLiao Chen <[email protected]>
drm/bridge: it6505: Enable module autoloadingJoaquín Ignacio Aramendía <[email protected]>
drm: panel-orientation-quirks: Add quirk for AYA NEO GEEKJoaquín Ignacio Aramendía <[email protected]>
drm: panel-orientation-quirks: Add quirk for AYA NEO Founder editionJoaquín Ignacio Aramendía <[email protected]>
drm: panel-orientation-quirks: Add quirk for AYA NEO 2 modelDnyaneshwar Bhadane <[email protected]>
drm/xe/pciid: Add new PCI id for ARLPing-Ke Shih <[email protected]>
wifi: rtw88: useieee80211_purge_tx_queue()to purge TX skbRodrigo Vivi <[email protected]>
drm/xe/pciids: Add PVC's PCI device ID macrosDave Stevenson <[email protected]>
drm/vc4: hvs: Set AXI panic modes for the HVSDom Cobley <[email protected]>
drm/vc4: hdmi: Avoid log spam for audio start failureJani Nikula <[email protected]>
drm/xe/pciids: separate ARL and MTL PCI IDsJani Nikula <[email protected]>
drm/xe/pciids: separate RPL-U and RPL-P PCI IDsCallahan Kovacs <[email protected]>
HID: magicmouse: Apple Magic Trackpad 2 USB-C driver supportChangwoo Min <[email protected]>
sched_ext: add a missing rcu_read_lock/unlock pair atscx_select_cpu_dfl()Reinette Chatre <[email protected]>
selftests/resctrl: Protect against array overflow when reading stringsCristian Ciocaltea <[email protected]>
regmap: maple: Provide lockdep (sub)class for maple tree's internal lockMarek Vasut <[email protected]>
soc: imx8m: Probe the SoC driver as platform driverAleksandrs Vinarskis <[email protected]>
firmware: qcom: scm: Allow QSEECOM on Dell XPS 13 9345Peng Fan <[email protected]>
mmc: sdhci-esdhc-imx: enable quirksSDHCI_QUIRK_NO_LEDKeita Aihara <[email protected]>
mmc: core: Add SD card quirk for broken poweroff notificationRohan Barar <[email protected]>
media: cx231xx: Add support for Dexatek USB Video Grabber 1d19:6108Ricardo Ribalda <[email protected]>
media: uvcvideo: Force UVC version to 1.0a for 0408:4033David Given <[email protected]>
media: uvcvideo: Add a quirk for the Kaiweets KTI-W02 infrared cameraDmitry Perchanov <[email protected]>
media: uvcvideo: RealSense D421 Depth module metadataBjorn Andersson <[email protected]>
soc: qcom: pd-mapper: Add QCM6490 PD mapsMaya Matuszczyk <[email protected]>
firmware: qcom: scm: Allow QSEECOM on Lenovo Yoga Slim 7xBenjamin Tissoires <[email protected]>
HID: add per device quirk to force bind to hid-genericKonrad Dybcio <[email protected]>
soc: qcom: llcc: Use designated initializers for LLC settingsStefan Wahren <[email protected]>
spi: spi-fsl-lpspi: Adjust type of scldivBartosz Golaszewski <[email protected]>
gpio: free irqs that are still requested when the chip is being removedThomas Gleixner <[email protected]>
timekeeping: Always check for negative motionStephen Rothwell <[email protected]>
iio: magnetometer: fix if ()scoped_guard()formattingPrzemek Kitszel <[email protected]>
cleanup: Adjustscoped_guard()macros to avoid potential warningBreno Leitao <[email protected]>
perf/x86/amd: Warn only on new bits setJonathan Denose <[email protected]>
ACPI: video: force native for Apple MacbookPro11,2 and Air7,2Hans de Goede <[email protected]>
ACPI: x86: Add adev NULL check toacpi_quirk_skip_serdev_enumeration()Hans de Goede <[email protected]>
ACPI: x86: Make UART skip quirks work on PCI UARTs without an UIDSarah Maedel <[email protected]>
hwmon: (nct6775) Add 665-ACE/600M-CL to ASUS WMI monitoring listMarco Elver <[email protected]>
kcsan: Turnreport_filterlist_lockinto araw_spinlockLukas Wunner <[email protected]>
crypto: ecdsa - Avoid signed integer overflow on signature decodingBrian Foster <[email protected]>
ext4: partial zero eof block on unaligned inode size extensionMark Brown <[email protected]>
kselftest/arm64: Don't leak pipe fds inpac.exec_sign_all()Boris Burkov <[email protected]>
btrfs: do not clear read-only when adding sprout deviceQu Wenruo <[email protected]>
btrfs: canonicalize the device path before adding itQu Wenruo <[email protected]>
btrfs: avoid unnecessary device path update for the same deviceJohannes Thumshirn <[email protected]>
btrfs: don't takedev_replacerwsem on task already holding itDamien Le Moal <[email protected]>
block: RCU protect disk->conv_zones_bitmapThomas Richter <[email protected]>
s390/cpum_sf: Handle CPU hotplug remove during samplingMark Brown <[email protected]>
kselftest/arm64: Log fp-stress child startup errors to stdoutChristian Brauner <[email protected]>
epoll: annotate racy checkNiklas Schnelle <[email protected]>
s390/pci: Ignore RID for isolated VFsNiklas Schnelle <[email protected]>
s390/pci: Use topology ID for multi-function devicesNiklas Schnelle <[email protected]>
s390/pci: Sort PCI functions prior to creating virtual bussesGary Guo <[email protected]>
rust: enablearbitrary_self_typesand removeReceiverMike Rapoport (Microsoft) <[email protected]>
memblock: allow zero threshold invalidate_numa_converage()Manivannan Sadhasivam <[email protected]>
scsi: ufs: pltfrm: Drop PM runtime reference count afterufshcd_remove()Kalesh Singh <[email protected]>
mm: respect mmap hint address when aligning for THPAndrii Nakryiko <[email protected]>
mm: fix vrealloc()'s KASAN poisoning logicMatthew Wilcox (Oracle) <[email protected]>
mm: open-codepage_folio()indump_page()Matthew Wilcox (Oracle) <[email protected]>
mm: open-code PageTail infolio_flags()andconst_folio_flags()John Sperbeck <[email protected]>
mm: memcg: declaredo_memsw_accountinlineAkinobu Mita <[email protected]>
mm/damon: fix order of arguments indamos_before_applytracepointDavid Woodhouse <[email protected]>
x86/mm: Add_PAGE_NOPTISHADOWbit to avoid updating userspace page tablesFernando Fernandez Mancera <[email protected]>
x86/cpu/topology: Remove limit of CPUs due to disabled IO/APICDavid Hildenbrand <[email protected]>
mm/mempolicy: fixmigrate_to_node()assuming there is at least one VMA in a MMJohn Hubbard <[email protected]>
mm/gup: handle NULL pages inunpin_user_pages()Jared Kangas <[email protected]>
kasan: makereport_locka raw spinlockAdrian Huang <[email protected]>
sched/numa: fix memory leak due to the overwritten vma->numab_stateKees Cook <[email protected]>
lib: stackinit: hide never-taken branch from compilerMarco Elver <[email protected]>
stackdepot: fixstack_depot_save_flags()in NMI contextWengang Wang <[email protected]>
ocfs2: updateseq_fileindex inocfs2_dlm_seq_nextLen Brown <[email protected]>
x86/cpu: Add Lunar Lake to list of CPUs with a broken MONITOR implementationUlf Hansson <[email protected]>
mmc: core: Further prevent card detect during shutdownHans de Goede <[email protected]>
mmc: sdhci-pci: Add DMI quirk for missing CD GPIO on Vexia Edu Atla 10 tabletMarc Zyngier <[email protected]>
arch_numa: Restore nid checks before registering a memblock with a nodeCosmin Tanislav <[email protected]>
regmap: detach regmap from dev onregmap_exitMaciej Fijalkowski <[email protected]>
xsk: fix OOB map writes when deleting elementsTvrtko Ursulin <[email protected]>
dma-fence: Use kernel's sort for merging fencesTvrtko Ursulin <[email protected]>
dma-fence: Fix reference leak on fence merge failure pathChristian König <[email protected]>
dma-buf: fixdma_fence_array_signaledv4Maciej Fijalkowski <[email protected]>
bpf: fix OOB devmap writes when deleting elementsDavid Woodhouse <[email protected]>
x86/kexec: Restore GDT on return from ::preserve_context kexecThomas Gleixner <[email protected]>
modpost: Add .irqentry.text toOTHER_SECTIONSAlex Deucher <[email protected]>
drm/amdgpu/hdp5.2: do a posting read when flushing HDPAlex Deucher <[email protected]>
drm/amdgpu/hdp7.0: do a posting read when flushing HDPAlex Deucher <[email protected]>
drm/amdgpu/hdp5.0: do a posting read when flushing HDPAlex Deucher <[email protected]>
drm/amdgpu/hdp4.0: do a posting read when flushing HDPAlex Deucher <[email protected]>
drm/amdgpu/hdp6.0: do a posting read when flushing HDPPeterson Guo <[email protected]>
drm/amd/display: Add a left edge pixel if in YCbCr422 or YCbCr420 and odmDillon Varone <[email protected]>
drm/amd/display: Limit VTotal range to max hw cap minus fpLo-an Chen <[email protected]>
drm/amd/display: Correct prefetch calculationImre Deak <[email protected]>
drm/dp_mst: Fix resetting msg rx state after topology removalImre Deak <[email protected]>
drm/dp_mst: Verify request type in the corresponding down message replyAlex Deucher <[email protected]>
drm/amd/pm: fix and simplify workload handlingSreekant Somasekharan <[email protected]>
drm/amdkfd: add MEC version that supports no PCIe atomics for GFX12Imre Deak <[email protected]>
drm/dp_mst: Fix MST sideband message body length checkDavid Yat Sin <[email protected]>
drm/amdkfd: hard-code cacheline for gc943,gc944Ricardo Neri <[email protected]>
x86/cacheinfo: Delete globalnum_cache_leavesRicardo Neri <[email protected]>
cacheinfo: Allocate memory during CPU hotplug if not done from the primary CPUMark Brown <[email protected]>
selftest:hugetlb_dio: fix test namingMaximilian Heyne <[email protected]>
selftests/damon: add_damon_sysfs.pytoTEST_FILESShengjiu Wang <[email protected]>
pmdomain: imx: gpcv2: Adjust delay after power up handshakeJan Kara <[email protected]>
Revert "readahead: properly shorten readahead when falling back todo_page_cache_ra()"Liequan Che <[email protected]>
bcache: revert replacingIS_ERR_OR_NULLwithIS_ERRagainBernd Schubert <[email protected]>
io_uring: Change res2 parameter type inio_uring_cmd_doneSteve French <[email protected]>
smb3.1.1: fix posix mounts to older serversRalph Boehme <[email protected]>
fs/smb/client:cifs_prime_dcache()for SMB3 POSIX reparse pointsRalph Boehme <[email protected]>
fs/smb/client: Implement new SMB3 POSIX typeRalph Boehme <[email protected]>
fs/smb/client: avoid queryingSMB2_OP_QUERY_WSL_EAfor SMB3 POSIXRyusuke Konishi <[email protected]>
nilfs2: fix potential out-of-bounds memory access innilfs_find_entry()Peter Wang <[email protected]>
scsi: ufs: core: Add missing post notify for power mode changeManivannan Sadhasivam <[email protected]>
scsi: ufs: pltfrm: Disable runtime PM during removal of glue driversManivannan Sadhasivam <[email protected]>
scsi: ufs: qcom: Only free platform MSIs when ESI is enabledManivannan Sadhasivam <[email protected]>
scsi: ufs: core: Cancel RTC work duringufshcd_remove()Gwendal Grignou <[email protected]>
scsi: ufs: core: sysfs: Prevent div by zeroSaurav Kashyap <[email protected]>
scsi: qla2xxx: Remove checkreq_sg_cntshould be equal torsp_sg_cntQuinn Tran <[email protected]>
scsi: qla2xxx: Fix use after free on unloadAnil Gurumurthy <[email protected]>
scsi: qla2xxx: Supported speed displayed incorrectly for VPortsQuinn Tran <[email protected]>
scsi: qla2xxx: Fix NVMe and NPIV connect issueQuinn Tran <[email protected]>
scsi: qla2xxx: Fix abort in bsg timeoutSahas Leelodharry <[email protected]>
ALSA: hda/realtek: Add support for Samsung Galaxy Book3 360 (NP730QFG)Nazar Bilinskyi <[email protected]>
ALSA: hda/realtek: Enable mute and micmute LED on HP ProBook 430 G8Marie Ramlow <[email protected]>
ALSA: usb-audio: add mixer mapping for Corsair HS80Chris Chiu <[email protected]>
ALSA: hda/realtek: fix micmute LEDs don't work on HP LaptopsAsahi Lina <[email protected]>
ALSA: usb-audio: Add extra PID for RME Digiface USBDan Carpenter <[email protected]>
ALSA: usb-audio: Fix a DMA to stack memory bugMark Rutland <[email protected]>
arm64: ptrace: fix partial SETREGSET forNT_ARM_POEMark Rutland <[email protected]>
arm64: ptrace: fix partial SETREGSET forNT_ARM_FPMRMark Rutland <[email protected]>
arm64: ptrace: fix partial SETREGSET forNT_ARM_TAGGED_ADDR_CTRLCatalin Marinas <[email protected]>
arm64: Ensure bits ASID[15:8] are masked out when the kernel uses 8-bit ASIDsYang Shi <[email protected]>
arm64: mm: Fixzone_dma_limitcalculationNicolin Chen <[email protected]>
iommufd: Fixout_fputiniommufd_fault_alloc()Shradha Gupta <[email protected]>
net :mana :Request a V2 response version forMANA_QUERY_GF_STATKuan-Wei Chiu <[email protected]>
tracing: Fixcmp_entries_dup()to respectsort()comparison rulesMarc Kleine-Budde <[email protected]>
can: mcp251xfd: mcp251xfd_get_tef_len(): work around erratum DS80000789E 6.Marc Kleine-Budde <[email protected]>
can: dev:can_set_termination(): allow sleeping GPIOsAlexander Sverdlin <[email protected]>
watchdog: rti: of: honor timeout-sec propertyJordy Zomer <[email protected]>
ksmbd: fix Out-of-Bounds Write inksmbd_vfs_stream_writeJordy Zomer <[email protected]>
ksmbd: fix Out-of-Bounds Read inksmbd_vfs_stream_readHuacai Chen <[email protected]>
LoongArch: KVM: Protectkvm_check_requests()with SRCUBibo Mao <[email protected]>
LoongArch: Add architecture specifichuge_pte_clear()WangYuli <[email protected]>
HID: wacom: fix when get product name maybe null pointerKenny Levinsen <[email protected]>
HID: i2c-hid: Revert to using power commands to wake on resumeMiguel Ojeda <[email protected]>
rust: allowclippy::needless_lifetimesSean Christopherson <[email protected]>
x86/CPU/AMD: WARN when setting EFER.AUTOIBRS if and only if the WRMSR failsHou Tao <[email protected]>
bpf: Fix exact match conditions intrie_get_next_key()Hou Tao <[email protected]>
bpf: Handle in-place update for full LPM trie correctlyHou Tao <[email protected]>
bpf: Remove unnecessarykfree(im_node)inlpm_trie_update_elemHou Tao <[email protected]>
bpf: HandleBPF_EXISTandBPF_NOEXISTfor LPM triePaulo Alcantara <[email protected]>
smb: client: fix potential race incifs_put_tcon()Jakob Hauser <[email protected]>
iio: magnetometer: yas530: use signed integer type for clamp limitsRandy Dunlap <[email protected]>
scatterlist: fix incorrect func name in kernel-docTetsuo Handa <[email protected]>
ocfs2: free inode whenocfs2_get_init_inode()failsMaíra Canal <[email protected]>
drm/v3d: Enable Performance Counters before clearing themNícolas F. R. A. Prado <[email protected]>
ASoC: mediatek: mt8188-mt6359: Remove hardcoded dmic codecJohn Garry <[email protected]>
scsi:scsi_debug: Fix hrtimer support for ndelaySuraj Sonawane <[email protected]>
scsi: sg: Fix slab-use-after-free read insg_release()Chunguang.xu <[email protected]>
nvme-rdma: unquiesceadmin_qbefore destroy itChunguang.xu <[email protected]>
nvme-tcp: fix the memleak while create new ctrl failedMaurizio Lombardi <[email protected]>
nvme-fabrics: handle zero MAXCMD without closing the connectionTao Lyu <[email protected]>
bpf: Fix narrow scalar spill onto 64-bit spilled scalar slotsKumar Kartikeya Dwivedi <[email protected]>
bpf: Don't markSTACK_INVALIDasSTACK_MISCinmark_stack_slot_miscWill Deacon <[email protected]>
drivers/virt: pkvm: Don't failioremap()call ifMMIO_GUARDfailsGeert Uytterhoeven <[email protected]>
irqchip/stm32mp-exti:CONFIG_STM32MP_EXTIshould not default to y when compile-testingTao Lyu <[email protected]>
bpf: Ensure reg isPTR_TO_STACKinprocess_iter_argAruna Ramakrishna <[email protected]>
x86/pkeys: Ensure updated PKRU value is XRSTOR'dAruna Ramakrishna <[email protected]>
x86/pkeys: Change caller ofupdate_pkru_in_sigframe()Christoph Hellwig <[email protected]>
nvme: don't applyNVME_QUIRK_DEALLOCATE_ZEROESwhen DSM is not supportedUlf Hansson <[email protected]>
pmdomain: core: Fix error path inpm_genpd_init()when ida alloc failsUlf Hansson <[email protected]>
pmdomain: core: Add missingput_device()Dan Carpenter <[email protected]>
ASoC: SOF: ipc3-topology: fix resource leaks insof_ipc3_widget_setup_comp_dai()Bard Liao <[email protected]>
ASoC: SOF: ipc3-topology: Convert the topology pin index to ALH dai indexPei Xiao <[email protected]>
spi: mpc52xx: Addcancel_work_syncbefore module removeBjörn Töpel <[email protected]>
tools: Override makefile ARCH variable if defined, but emptyTakashi Iwai <[email protected]>
ALSA: usb-audio: Notify xrun for low-latency modeTakashi Iwai <[email protected]>
ALSA: seq: ump: Fix seq port updates per FB info notifyZijian Zhang <[email protected]>
tcp_bpf: Fix thesk_mem_unchargelogic intcp_bpf_sendmsgPei Xiao <[email protected]>
drm/sti: Add__iomemfor mixer_dbg_mxn's parameterAmir Mohammadi <[email protected]>
bpftool: fix potential NULL pointer dereferencing inprog_dump()Larysa Zaremba <[email protected]>
xsk: always clear DMA mapping information when unmapping the poolMichal Luczaj <[email protected]>
bpf, vsock: Invokeproto::closeonclose()Michal Luczaj <[email protected]>
bpf, vsock: Fixpoll()missing a queueZiqi Chen <[email protected]>
scsi: ufs: core: Addufshcd_send_bsg_uic_cmd()for UFS BSGBart Van Assche <[email protected]>
scsi: ufs: core: Always initialize the UIC done completionChris Park <[email protected]>
drm/amd/display: Ignore scalar validation failure if pipe is phantomYihan Zhu <[email protected]>
drm/amd/display: calculate final viewport before TAP optimizationFrank Li <[email protected]>
i3c: master: Fix dynamic address leak when 'assigned-address' is presentFrank Li <[email protected]>
i3c: master: Extend address status bit to 4 and addI3C_ADDR_SLOT_EXT_DESIREDFrank Li <[email protected]>
i3c: master: Replace hard code 2 with macroI3C_ADDR_SLOT_STATUS_BITSChao Yu <[email protected]>
f2fs: fix to requery extent which cross boundary of inquiryZhiguo Niu <[email protected]>
f2fs: fix to adjust appropriate length for fiemapChao Yu <[email protected]>
f2fs: clean up w/ F2FS_{BLK_TO_BYTES,BTYES_TO_BLK}Marcelo Dalmas <[email protected]>
ntp: Remove invalid cast in time offset mathSergey Senozhatsky <[email protected]>
zram: clear IDLE flag inmark_idle()Sergey Senozhatsky <[email protected]>
zram: do not mark idle slots that cannot be idleAvri Altman <[email protected]>
mmc: core: UseGFP_NOIOin ACMD22Avri Altman <[email protected]>
mmc: core: Adjust ACMD22 to SDUCAvri Altman <[email protected]>
mmc: sd: SDUC Support RecognitionAndy-ld Lu <[email protected]>
mmc: mtk-sd: FixMMC_CAP2_CRYPTOflag settingRosen Penev <[email protected]>
mmc: mtk-sd: fixdevm_clk_get_optionalusageAndy-ld Lu <[email protected]>
mmc: mtk-sd: Fix error handle of probe functionRosen Penev <[email protected]>
mmc: mtk-sd: usedevm_mmc_alloc_hostCharles Han <[email protected]>
gpio: grgpio: Add NULL check ingrgpio_probeBartosz Golaszewski <[email protected]>
gpio: grgpio: use a helper variable to store the address of ofdev->devEric Dumazet <[email protected]>
net: avoid potential UAF indefault_operstate()Konstantin Shkolnyy <[email protected]>
vsock/test: fix parameter types in SO_VM_SOCKETS_* callsKonstantin Shkolnyy <[email protected]>
vsock/test: fix failures due to wrongSO_RCVLOWATparameterJianbo Liu <[email protected]>
net/mlx5e: Remove workaround to avoid syndrome for internal portTariq Toukan <[email protected]>
net/mlx5e: SD, Use correct mdev to build channel paramCosmin Ratiu <[email protected]>
net/mlx5: HWS: Properly set bwc queue locks lock classesCosmin Ratiu <[email protected]>
net/mlx5: HWS: Fix memory leak inmlx5hws_definer_calc_layoutEric Dumazet <[email protected]>
geneve: do not assume mac header is set ingeneve_xmit_skb()Ido Schimmel <[email protected]>
mlxsw:spectrum_acl_flex_keys: Use correct key block on Spectrum-4Christophe JAILLET <[email protected]>
mlxsw:spectrum_acl_flex_keys: Constify structmlxsw_afk_element_instKory Maincent <[email protected]>
ethtool: Fix wrong mod state in case of verbose andno_maskbitsetPablo Neira Ayuso <[email protected]>
netfilter:nft_set_hash: skip duplicated elements pending gc runPhil Sutter <[email protected]>
netfilter: ipset: Hold module reference while requesting a moduleXin Long <[email protected]>
net: sched: fixerspan_optsettings incls_flowerFernando Fernandez Mancera <[email protected]>
Revert "udp: avoid callingsock_def_readable()if possible"Pablo Neira Ayuso <[email protected]>
netfilter:nft_inner: incorrect percpu area handling under softirqYuan Can <[email protected]>
igb: Fix potential invalid memory access inigb_init_module()Tore Amundsen <[email protected]>
ixgbe: Correct BASE-BX10 compliance codeJacob Keller <[email protected]>
ixgbe: downgrade logging of unsupported VF API version to debugJacob Keller <[email protected]>
ixgbevf: stop attempting IPSEC offload on Mailbox API 1.5Joshua Hay <[email protected]>
idpf: set completion tag for "empty" bufs associated with a packetMarcin Szycik <[email protected]>
ice: Fix VLAN pruning in switchdev modePrzemyslaw Korba <[email protected]>
ice: fix PHY timestamp extraction for ETH56GArkadiusz Kubalewski <[email protected]>
ice: fix PHY Clock Recovery availability checkEric Dumazet <[email protected]>
net: hsr: must allocate more bytes for RedBox supportLouis Leseur <[email protected]>
net/qed: allow old cards not supporting "num_images" to workWen Gu <[email protected]>
net/smc: fix LGR and link use-after-free issueWen Gu <[email protected]>
net/smc: initializeclose_workearly to avoid warningKuniyuki Iwashima <[email protected]>
tipc: Fix use-after-free of kernel socket incleanup_bearer().Ivan Solodovnikov <[email protected]>
dccp: Fix memory leak indccp_feat_change_recvJiri Wiesner <[email protected]>
net/ipv6: release expired exception dst cached in socketOleksij Rempel <[email protected]>
net: phy: microchip: Reset LAN88xx PHY to ensure clean link state on LAN7800/7850Armin Wolf <[email protected]>
platform/x86: asus-wmi: Ignore return value when writing thermal policyDmitry Antipov <[email protected]>
can: j1939: j1939_session_new(): fix skb reference countingEric Dumazet <[email protected]>
ipv6: avoid possible NULL deref inmodify_prefix_route()Dong Chenchen <[email protected]>
net: Fix icmp host relookup triggeringip_rt_bugDaniel Xu <[email protected]>
bnxt_en: ethtool: Supply ntuple rss context actionEric Dumazet <[email protected]>
net: hsr: avoid potential out-of-bound access infill_frame_info()Martin Ottens <[email protected]>
net/sched: tbf: correct backlog statistic for GSO packetsAjay Kaher <[email protected]>
ptp: Add error handling for adjfine callback inptp_clock_adjtimeWei Fang <[email protected]>
net: enetc: Do not configure preemptible TCs if SIs do not supportMaximilian Heyne <[email protected]>
selftests: hid: fix typo and exit codePablo Neira Ayuso <[email protected]>
netfilter:nft_socket: removeWARN_ON_ONCEon maximum cgroup levelDmitry Antipov <[email protected]>
netfilter:x_tables: fix LED ID check inled_tg_check()Jinghao Jia <[email protected]>
ipvs: fix UB due to uninitialized stack access inip_vs_protocol_init()Dario Binacchi <[email protected]>
can: f81604: f81604_handle_can_bus_errors(): fix {rx,tx}_errors statisticsDario Binacchi <[email protected]>
can:ems_usb:ems_usb_rx_err(): fix {rx,tx}_errors statisticsDario Binacchi <[email protected]>
can:sun4i_can:sun4i_can_err(): fix {rx,tx}_errors statisticsDario Binacchi <[email protected]>
can: sja1000: sja1000_err(): fix {rx,tx}_errors statisticsDario Binacchi <[email protected]>
can: hi311x: hi3110_can_ist(): fix {rx,tx}_errors statisticsDario Binacchi <[email protected]>
can:ifi_canfd:ifi_canfd_handle_lec_err(): fix {rx,tx}_errors statisticsDario Binacchi <[email protected]>
can:m_can:m_can_handle_lec_err(): fix {rx,tx}_errors statisticsDario Binacchi <[email protected]>
can: hi311x: hi3110_can_ist(): fix potential use-after-freeDario Binacchi <[email protected]>
can:sun4i_can:sun4i_can_err(): callcan_change_state()even if cf is NULLDario Binacchi <[email protected]>
can:c_can:c_can_handle_bus_err(): update statistics if skb allocation failsAlexander Kozhinov <[email protected]>
can:gs_usb: add usb endpoint address detection at driver probe stepYassine Oudjana <[email protected]>
watchdog: mediatek: Make sure system reset gets asserted inmtk_wdt_restart()Nick Chan <[email protected]>
watchdog: apple: Actually flush writes after requesting watchdog restartHarini T <[email protected]>
watchdog:xilinx_wwdt: Calculatemax_hw_heartbeat_msusing clock frequencyOleksandr Ocheretnyi <[email protected]>
iTCO_wdt: maskNMI_NOWbit forupdate_no_reboot_bit()call-------------
Diffstat:
Documentation/ABI/testing/sysfs-bus-pci | 11 + Documentation/ABI/testing/sysfs-fs-f2fs | 6 + Documentation/accel/qaic/aic080.rst | 14 + Documentation/accel/qaic/index.rst | 1 + Documentation/arch/arm64/silicon-errata.rst | 2 + Documentation/i2c/busses/i2c-i801.rst | 1 + Documentation/netlink/specs/ethtool.yaml | 7 +- Makefile | 5 +- arch/arm64/Kconfig | 11 + arch/arm64/kernel/ptrace.c | 10 +- arch/arm64/mm/context.c | 4 +- arch/arm64/mm/init.c | 17 +- arch/loongarch/include/asm/hugetlb.h | 10 + arch/loongarch/kvm/vcpu.c | 4 +- arch/loongarch/mm/tlb.c | 2 +- arch/mips/boot/dts/loongson/ls7a-pch.dtsi | 73 +- arch/powerpc/kernel/prom_init.c | 29 +- arch/s390/include/asm/pci.h | 14 +- arch/s390/include/asm/pci_clp.h | 8 +- arch/s390/kernel/perf_cpum_sf.c | 4 +- arch/s390/pci/pci.c | 88 +- arch/s390/pci/pci_bus.c | 48 +- arch/s390/pci/pci_clp.c | 17 +- arch/s390/pci/pci_event.c | 19 +- arch/x86/Kconfig | 1 - arch/x86/events/amd/core.c | 10 +- arch/x86/include/asm/pgtable_types.h | 8 +- arch/x86/kernel/cpu/amd.c | 2 +- arch/x86/kernel/cpu/cacheinfo.c | 43 +- arch/x86/kernel/cpu/intel.c | 4 +- arch/x86/kernel/cpu/topology.c | 6 +- arch/x86/kernel/fpu/signal.c | 20 +- arch/x86/kernel/fpu/xstate.h | 27 +- arch/x86/kernel/relocate_kernel_64.S | 8 + arch/x86/kvm/mmu/mmu.c | 10 +- arch/x86/kvm/mmu/paging_tmpl.h | 5 +- arch/x86/mm/ident_map.c | 6 +- arch/x86/mm/pti.c | 2 +- arch/x86/pci/acpi.c | 119 + block/blk-zoned.c | 43 +- crypto/ecdsa.c | 19 +- drivers/accel/qaic/qaic_drv.c | 4 +- drivers/acpi/video_detect.c | 16 + drivers/acpi/x86/utils.c | 85 +- drivers/base/arch_numa.c | 4 + drivers/base/cacheinfo.c | 14 +- drivers/base/regmap/internal.h | 1 + drivers/base/regmap/regcache-maple.c | 3 + drivers/base/regmap/regmap.c | 13 + drivers/block/zram/zram_drv.c | 29 +- drivers/bluetooth/btusb.c | 26 + drivers/clk/clk-en7523.c | 4 +- drivers/clk/qcom/Kconfig | 4 +- drivers/clk/qcom/clk-alpha-pll.c | 11 + drivers/clk/qcom/clk-alpha-pll.h | 1 + drivers/clk/qcom/clk-rcg.h | 1 + drivers/clk/qcom/clk-rcg2.c | 48 +- drivers/clk/qcom/clk-rpmh.c | 13 + drivers/clk/qcom/dispcc-sm8550.c | 18 +- drivers/clk/qcom/tcsrcc-sm8550.c | 18 +- drivers/dma-buf/dma-fence-array.c | 28 +- drivers/dma-buf/dma-fence-unwrap.c | 126 +- drivers/firmware/qcom/qcom_scm.c | 2 + drivers/gpio/gpio-grgpio.c | 26 +- drivers/gpio/gpiolib.c | 41 + drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 48 +- drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 5 +- drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 12 + .../gpu/drm/amd/amdgpu/gfx_v9_0_cleaner_shader.h | 44 +- .../drm/amd/amdgpu/gfx_v9_4_2_cleaner_shader.asm | 153 + drivers/gpu/drm/amd/amdgpu/hdp_v4_0.c | 12 +- drivers/gpu/drm/amd/amdgpu/hdp_v5_0.c | 7 +- drivers/gpu/drm/amd/amdgpu/hdp_v5_2.c | 6 +- drivers/gpu/drm/amd/amdgpu/hdp_v6_0.c | 6 +- drivers/gpu/drm/amd/amdgpu/hdp_v7_0.c | 6 +- drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c | 30 +- drivers/gpu/drm/amd/amdgpu/vega20_ih.c | 27 + drivers/gpu/drm/amd/amdkfd/kfd_crat.c | 6 + drivers/gpu/drm/amd/amdkfd/kfd_device.c | 3 + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 25 +- .../amd/display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c | 17 +- drivers/gpu/drm/amd/display/dc/core/dc.c | 27 +- drivers/gpu/drm/amd/display/dc/core/dc_debug.c | 40 + drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 57 +- drivers/gpu/drm/amd/display/dc/core/dc_stream.c | 6 +- drivers/gpu/drm/amd/display/dc/dc.h | 3 + drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c | 6 +- .../dc/dio/dcn314/dcn314_dio_stream_encoder.c | 10 + .../drm/amd/display/dc/dml2/display_mode_core.c | 1 + .../dc/dml2/dml21/dml21_translation_helper.c | 29 +- .../dml2/dml21/src/dml2_pmo/dml2_pmo_dcn4_fams2.c | 1 + .../drm/amd/display/dc/hwss/dcn314/dcn314_hwseq.c | 20 +- drivers/gpu/drm/amd/display/dc/inc/core_status.h | 2 + drivers/gpu/drm/amd/display/dc/inc/core_types.h | 5 + .../amd/display/dc/resource/dcn20/dcn20_resource.c | 23 + .../amd/display/dc/resource/dcn21/dcn21_resource.c | 2 +- .../amd/display/dc/resource/dcn30/dcn30_resource.c | 1 + .../display/dc/resource/dcn302/dcn302_resource.c | 1 + .../display/dc/resource/dcn303/dcn303_resource.c | 1 + .../amd/display/dc/resource/dcn31/dcn31_resource.c | 7 + .../amd/display/dc/resource/dcn31/dcn31_resource.h | 3 + .../display/dc/resource/dcn314/dcn314_resource.c | 1 + .../display/dc/resource/dcn315/dcn315_resource.c | 7 + .../display/dc/resource/dcn316/dcn316_resource.c | 1 + .../amd/display/dc/resource/dcn32/dcn32_resource.c | 1 + .../display/dc/resource/dcn321/dcn321_resource.c | 1 + .../amd/display/dc/resource/dcn35/dcn35_resource.c | 2 + .../display/dc/resource/dcn351/dcn351_resource.c | 2 + .../display/dc/resource/dcn401/dcn401_resource.c | 18 + drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h | 3 +- .../drm/amd/display/modules/freesync/freesync.c | 13 +- drivers/gpu/drm/amd/pm/amdgpu_pm.c | 6 +- drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 148 +- drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h | 15 +- drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c | 190 +- drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c | 181 +- .../drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 182 +- drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c | 41 +- drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c | 43 +- .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c | 169 +- .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c | 152 +- .../gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c | 172 +- drivers/gpu/drm/amd/pm/swsmu/smu_cmn.c | 25 + drivers/gpu/drm/amd/pm/swsmu/smu_cmn.h | 4 + drivers/gpu/drm/bridge/ite-it6505.c | 1 + drivers/gpu/drm/display/drm_dp_dual_mode_helper.c | 4 +- drivers/gpu/drm/display/drm_dp_mst_topology.c | 55 +- drivers/gpu/drm/drm_panel_orientation_quirks.c | 18 + drivers/gpu/drm/drm_panic.c | 10 + drivers/gpu/drm/mcde/mcde_drv.c | 1 + drivers/gpu/drm/panel/panel-simple.c | 28 + drivers/gpu/drm/radeon/r600_cs.c | 2 +- drivers/gpu/drm/scheduler/sched_main.c | 8 + drivers/gpu/drm/sti/sti_mixer.c | 2 +- drivers/gpu/drm/v3d/v3d_perfmon.c | 2 +- drivers/gpu/drm/vc4/vc4_hdmi.c | 2 +- drivers/gpu/drm/vc4/vc4_hvs.c | 11 + drivers/gpu/drm/xe/regs/xe_engine_regs.h | 1 + drivers/gpu/drm/xe/regs/xe_gt_regs.h | 3 + drivers/gpu/drm/xe/xe_devcoredump.c | 146 +- drivers/gpu/drm/xe/xe_devcoredump.h | 6 + drivers/gpu/drm/xe/xe_devcoredump_types.h | 3 +- drivers/gpu/drm/xe/xe_device.c | 1 + drivers/gpu/drm/xe/xe_force_wake.h | 16 + drivers/gpu/drm/xe/xe_gt_topology.c | 14 + drivers/gpu/drm/xe/xe_guc_ct.c | 18 + drivers/gpu/drm/xe/xe_guc_log.c | 40 +- drivers/gpu/drm/xe/xe_guc_submit.c | 2 +- drivers/gpu/drm/xe/xe_hw_engine.c | 1 - drivers/gpu/drm/xe/xe_pci.c | 2 + drivers/gpu/drm/xe/xe_query.c | 42 +- drivers/gpu/drm/xe/xe_wa.c | 47 + drivers/gpu/drm/xe/xe_wa_oob.rules | 2 + drivers/hid/hid-core.c | 5 +- drivers/hid/hid-generic.c | 3 + drivers/hid/hid-ids.h | 1 + drivers/hid/hid-magicmouse.c | 56 +- drivers/hid/i2c-hid/i2c-hid-core.c | 20 +- drivers/hid/wacom_sys.c | 3 +- drivers/hwmon/nct6775-platform.c | 2 + drivers/i2c/busses/Kconfig | 1 + drivers/i2c/busses/i2c-i801.c | 6 + drivers/i3c/master.c | 85 +- drivers/i3c/master/mipi-i3c-hci/dma.c | 2 +- drivers/iio/adc/ad7192.c | 3 + drivers/iio/light/ltr501.c | 2 + drivers/iio/magnetometer/af8133j.c | 3 +- drivers/iio/magnetometer/yamaha-yas530.c | 13 +- drivers/iommu/amd/io_pgtable.c | 11 +- drivers/iommu/iommufd/fault.c | 2 - drivers/irqchip/Kconfig | 2 +- drivers/irqchip/irq-gic-v3-its.c | 50 +- drivers/leds/led-class.c | 14 +- drivers/mailbox/pcc.c | 61 +- drivers/md/bcache/super.c | 2 +- drivers/media/pci/intel/ipu6/Kconfig | 2 +- drivers/media/pci/intel/ipu6/ipu6-isys-queue.c | 66 +- drivers/media/pci/intel/ipu6/ipu6-isys-queue.h | 1 + drivers/media/pci/intel/ipu6/ipu6-isys.c | 19 +- drivers/media/usb/cx231xx/cx231xx-cards.c | 2 + drivers/media/usb/uvc/uvc_driver.c | 31 + drivers/misc/eeprom/eeprom_93cx6.c | 10 + drivers/mmc/core/block.c | 26 +- drivers/mmc/core/bus.c | 6 +- drivers/mmc/core/card.h | 10 + drivers/mmc/core/core.c | 3 + drivers/mmc/core/quirks.h | 9 + drivers/mmc/core/sd.c | 30 +- drivers/mmc/core/sd.h | 2 +- drivers/mmc/core/sdio.c | 2 +- drivers/mmc/host/mtk-sd.c | 64 +- drivers/mmc/host/sdhci-esdhc-imx.c | 6 + drivers/mmc/host/sdhci-pci-core.c | 72 + drivers/mmc/host/sdhci-pci.h | 1 + drivers/net/can/c_can/c_can_main.c | 26 +- drivers/net/can/dev/dev.c | 2 +- drivers/net/can/ifi_canfd/ifi_canfd.c | 58 +- drivers/net/can/m_can/m_can.c | 33 +- drivers/net/can/sja1000/sja1000.c | 65 +- drivers/net/can/spi/hi311x.c | 48 +- drivers/net/can/spi/mcp251xfd/mcp251xfd-tef.c | 29 +- drivers/net/can/sun4i_can.c | 22 +- drivers/net/can/usb/ems_usb.c | 58 +- drivers/net/can/usb/f81604.c | 10 +- drivers/net/can/usb/gs_usb.c | 25 +- drivers/net/dsa/qca/qca8k-8xxx.c | 2 +- drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 8 +- drivers/net/ethernet/freescale/enetc/enetc.c | 3 + drivers/net/ethernet/freescale/fec_mpc52xx_phy.c | 2 +- drivers/net/ethernet/freescale/fman/fman.c | 1 - drivers/net/ethernet/freescale/fman/fman.h | 3 + drivers/net/ethernet/freescale/fman/mac.c | 5 + .../net/ethernet/freescale/fs_enet/mii-bitbang.c | 2 +- drivers/net/ethernet/intel/ice/ice_common.c | 25 +- drivers/net/ethernet/intel/ice/ice_main.c | 8 +- drivers/net/ethernet/intel/ice/ice_ptp_hw.c | 3 +- drivers/net/ethernet/intel/ice/ice_ptp_hw.h | 5 +- drivers/net/ethernet/intel/idpf/idpf_txrx.c | 1 + drivers/net/ethernet/intel/igb/igb_main.c | 4 + drivers/net/ethernet/intel/ixgbe/ixgbe_common.h | 2 + drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h | 2 +- drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 2 +- drivers/net/ethernet/intel/ixgbevf/ipsec.c | 1 - .../ethernet/mellanox/mlx5/core/en/tc_tun_encap.c | 13 +- drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 32 +- drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 7 +- .../mlx5/core/steering/hws/mlx5hws_bwc_complex.c | 2 + .../mellanox/mlx5/core/steering/hws/mlx5hws_send.c | 1 + .../ethernet/mellanox/mlxsw/core_acl_flex_keys.c | 6 +- .../ethernet/mellanox/mlxsw/core_acl_flex_keys.h | 2 +- .../mellanox/mlxsw/spectrum_acl_flex_keys.c | 72 +- drivers/net/ethernet/microsoft/mana/mana_en.c | 1 + drivers/net/ethernet/qlogic/qed/qed_mcp.c | 4 +- drivers/net/ethernet/realtek/r8169_main.c | 14 +- drivers/net/ethernet/rocker/rocker_main.c | 2 +- drivers/net/ethernet/stmicro/stmmac/dwmac4.h | 5 + drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c | 5 + drivers/net/geneve.c | 2 +- drivers/net/phy/microchip.c | 21 + drivers/net/phy/sfp.c | 3 +- drivers/net/virtio_net.c | 12 +- drivers/net/wireless/ath/ath10k/sdio.c | 6 +- drivers/net/wireless/ath/ath12k/mac.c | 18 +- drivers/net/wireless/ath/ath5k/pci.c | 2 + .../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 2 +- drivers/net/wireless/intel/ipw2x00/libipw_rx.c | 8 +- drivers/net/wireless/realtek/rtw88/sdio.c | 6 +- drivers/net/wireless/realtek/rtw88/usb.c | 5 +- drivers/net/wireless/realtek/rtw89/fw.c | 3 + drivers/nvdimm/dax_devs.c | 4 +- drivers/nvdimm/nd.h | 7 + drivers/nvme/host/core.c | 25 +- drivers/nvme/host/rdma.c | 8 +- drivers/nvme/host/tcp.c | 2 +- drivers/pci/controller/dwc/pcie-qcom.c | 1 + drivers/pci/controller/plda/pcie-starfive.c | 10 +- drivers/pci/controller/vmd.c | 17 +- drivers/pci/pci-sysfs.c | 26 + drivers/pci/pci.c | 2 +- drivers/pci/pci.h | 1 + drivers/pci/probe.c | 30 +- drivers/pci/quirks.c | 15 +- drivers/pinctrl/core.c | 3 + drivers/pinctrl/core.h | 1 + drivers/pinctrl/freescale/Kconfig | 2 +- drivers/pinctrl/pinmux.c | 173 +- drivers/pinctrl/qcom/pinctrl-spmi-gpio.c | 2 + drivers/pinctrl/qcom/pinctrl-spmi-mpp.c | 1 + drivers/platform/x86/asus-wmi.c | 11 +- drivers/pmdomain/core.c | 37 +- drivers/pmdomain/imx/gpcv2.c | 2 +- drivers/ptp/ptp_clock.c | 3 +- drivers/regulator/qcom-rpmh-regulator.c | 83 +- drivers/remoteproc/qcom_q6v5_pas.c | 1 + drivers/rtc/rtc-cmos.c | 37 +- drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 100 +- drivers/scsi/lpfc/lpfc_ct.c | 21 +- drivers/scsi/lpfc/lpfc_hbadisc.c | 36 +- drivers/scsi/lpfc/lpfc_init.c | 2 + drivers/scsi/lpfc/lpfc_sli.c | 41 +- drivers/scsi/qla2xxx/qla_attr.c | 1 + drivers/scsi/qla2xxx/qla_bsg.c | 124 +- drivers/scsi/qla2xxx/qla_mid.c | 1 + drivers/scsi/qla2xxx/qla_os.c | 15 +- drivers/scsi/scsi_debug.c | 2 +- drivers/scsi/sg.c | 2 +- drivers/scsi/st.c | 31 +- drivers/soc/imx/soc-imx8m.c | 107 +- drivers/soc/qcom/llcc-qcom.c | 2644 +++++++- drivers/soc/qcom/qcom_pd_mapper.c | 1 + drivers/spi/spi-fsl-lpspi.c | 7 +- drivers/spi/spi-mpc52xx.c | 1 + drivers/thermal/qcom/tsens-v1.c | 21 +- drivers/thermal/qcom/tsens.c | 3 + drivers/thermal/qcom/tsens.h | 2 +- drivers/tty/serial/8250/8250_dw.c | 5 +- drivers/ufs/core/ufs-sysfs.c | 6 + drivers/ufs/core/ufs_bsg.c | 2 +- drivers/ufs/core/ufshcd-priv.h | 1 + drivers/ufs/core/ufshcd.c | 59 +- drivers/ufs/host/cdns-pltfrm.c | 4 +- drivers/ufs/host/tc-dwc-g210-pltfrm.c | 5 +- drivers/ufs/host/ufs-exynos.c | 3 +- drivers/ufs/host/ufs-hisi.c | 4 +- drivers/ufs/host/ufs-mediatek.c | 5 +- drivers/ufs/host/ufs-qcom.c | 7 +- drivers/ufs/host/ufs-renesas.c | 13 +- drivers/ufs/host/ufs-sprd.c | 5 +- drivers/ufs/host/ufshcd-pltfrm.c | 16 + drivers/ufs/host/ufshcd-pltfrm.h | 1 + drivers/usb/chipidea/ci.h | 2 + drivers/usb/chipidea/ci_hdrc_imx.c | 1 + drivers/usb/chipidea/core.c | 2 + drivers/usb/chipidea/udc.c | 156 +- drivers/usb/chipidea/udc.h | 2 + drivers/usb/typec/ucsi/ucsi_acpi.c | 56 +- drivers/usb/typec/ucsi/ucsi_glink.c | 10 +- drivers/vfio/pci/mlx5/cmd.c | 47 +- drivers/virt/coco/pkvm-guest/arm-pkvm-guest.c | 6 +- drivers/watchdog/apple_wdt.c | 2 +- drivers/watchdog/iTCO_wdt.c | 21 +- drivers/watchdog/mtk_wdt.c | 6 + drivers/watchdog/rti_wdt.c | 3 +- drivers/watchdog/xilinx_wwdt.c | 75 +- fs/btrfs/dev-replace.c | 2 + fs/btrfs/disk-io.c | 3 +- fs/btrfs/disk-io.h | 3 +- fs/btrfs/fs.h | 2 + fs/btrfs/inode.c | 1 + fs/btrfs/super.c | 73 +- fs/btrfs/volumes.c | 137 +- fs/dlm/lock.c | 10 +- fs/eventpoll.c | 6 +- fs/ext4/extents.c | 7 +- fs/ext4/inode.c | 53 +- fs/f2fs/data.c | 82 +- fs/f2fs/extent_cache.c | 74 +- fs/f2fs/f2fs.h | 4 + fs/f2fs/inode.c | 4 +- fs/f2fs/node.c | 7 +- fs/f2fs/sysfs.c | 10 + fs/gfs2/super.c | 2 + fs/jffs2/compr_rtime.c | 3 + fs/jfs/jfs_dmap.c | 6 + fs/jfs/jfs_dtree.c | 15 + fs/nilfs2/dir.c | 2 +- fs/notify/fanotify/fanotify_user.c | 85 +- fs/ntfs3/attrib.c | 9 +- fs/ntfs3/frecord.c | 103 +- fs/ntfs3/ntfs_fs.h | 3 +- fs/ntfs3/run.c | 40 +- fs/ocfs2/dlmglue.c | 1 + fs/ocfs2/localalloc.c | 19 - fs/ocfs2/namei.c | 4 +- fs/smb/client/cifsproto.h | 1 + fs/smb/client/cifssmb.c | 2 +- fs/smb/client/connect.c | 4 +- fs/smb/client/dfs.c | 188 +- fs/smb/client/inode.c | 94 +- fs/smb/client/readdir.c | 54 +- fs/smb/client/reparse.c | 90 +- fs/smb/client/smb2inode.c | 3 +- fs/smb/server/smb2pdu.c | 6 + fs/unicode/mkutf8data.c | 70 + fs/unicode/utf8data.c_shipped | 6703 ++++++++++---------- include/acpi/pcc.h | 7 + include/drm/display/drm_dp_mst_helper.h | 7 + include/drm/intel/xe_pciids.h | 31 +- include/linux/blkdev.h | 2 +- include/linux/bpf.h | 17 +- include/linux/cleanup.h | 48 +- include/linux/clocksource.h | 2 + include/linux/eeprom_93cx6.h | 11 + include/linux/eventpoll.h | 2 +- include/linux/f2fs_fs.h | 1 + include/linux/fanotify.h | 1 + include/linux/hid.h | 2 + include/linux/i3c/master.h | 9 +- include/linux/io_uring/cmd.h | 4 +- include/linux/leds.h | 2 +- include/linux/mmc/card.h | 3 +- include/linux/mmc/sd.h | 1 + include/linux/page-flags.h | 4 +- include/linux/pci.h | 6 + include/linux/scatterlist.h | 2 +- include/linux/stackdepot.h | 6 +- include/linux/usb/chipidea.h | 1 + include/net/bluetooth/hci.h | 14 + include/net/bluetooth/hci_core.h | 10 +- include/net/netfilter/nf_tables_core.h | 1 + include/net/tcp_ao.h | 3 +- include/sound/soc_sdw_utils.h | 2 + include/trace/events/damon.h | 2 +- include/trace/trace_events.h | 36 +- include/uapi/drm/xe_drm.h | 4 +- include/uapi/linux/fanotify.h | 1 + include/ufs/ufshcd.h | 19 +- io_uring/tctx.c | 13 +- io_uring/uring_cmd.c | 2 +- kernel/bpf/arraymap.c | 26 +- kernel/bpf/core.c | 1 + kernel/bpf/devmap.c | 6 +- kernel/bpf/hashtab.c | 56 +- kernel/bpf/lpm_trie.c | 55 +- kernel/bpf/syscall.c | 29 +- kernel/bpf/trampoline.c | 47 +- kernel/bpf/verifier.c | 15 +- kernel/dma/debug.c | 8 +- kernel/kcsan/debugfs.c | 74 +- kernel/sched/core.c | 4 +- kernel/sched/deadline.c | 1 + kernel/sched/ext.c | 9 + kernel/sched/fair.c | 14 +- kernel/sched/syscalls.c | 2 +- kernel/time/Kconfig | 5 - kernel/time/clocksource.c | 11 +- kernel/time/ntp.c | 2 +- kernel/time/timekeeping.c | 6 +- kernel/time/timekeeping_internal.h | 15 +- kernel/trace/ring_buffer.c | 98 +- kernel/trace/trace.c | 33 +- kernel/trace/trace.h | 7 + kernel/trace/trace_clock.c | 2 +- kernel/trace/trace_eprobe.c | 5 + kernel/trace/trace_output.c | 4 + kernel/trace/trace_syscalls.c | 12 + kernel/trace/tracing_map.c | 6 +- lib/stackdepot.c | 10 +- lib/stackinit_kunit.c | 1 + mm/debug.c | 7 +- mm/gup.c | 11 +- mm/kasan/report.c | 6 +- mm/memblock.c | 4 +- mm/memcontrol-v1.h | 2 +- mm/mempolicy.c | 4 + mm/mmap.c | 1 + mm/readahead.c | 5 +- mm/vmalloc.c | 3 +- net/bluetooth/hci_conn.c | 19 +- net/bluetooth/hci_core.c | 13 +- net/bluetooth/hci_event.c | 7 + net/bluetooth/hci_sync.c | 9 +- net/bluetooth/l2cap_sock.c | 1 + net/bluetooth/rfcomm/sock.c | 10 +- net/can/af_can.c | 1 + net/can/j1939/transport.c | 2 +- net/core/link_watch.c | 7 +- net/core/neighbour.c | 1 + net/core/netpoll.c | 2 +- net/dccp/feat.c | 6 +- net/ethtool/bitset.c | 48 +- net/hsr/hsr_device.c | 19 +- net/hsr/hsr_forward.c | 2 + net/ieee802154/socket.c | 12 +- net/ipv4/af_inet.c | 22 +- net/ipv4/icmp.c | 3 + net/ipv4/tcp_ao.c | 42 +- net/ipv4/tcp_bpf.c | 11 +- net/ipv4/tcp_ipv4.c | 3 +- net/ipv4/udp.c | 14 +- net/ipv6/addrconf.c | 13 +- net/ipv6/af_inet6.c | 22 +- net/ipv6/route.c | 6 +- net/ipv6/tcp_ipv6.c | 4 +- net/mptcp/diag.c | 2 +- net/mptcp/options.c | 4 +- net/mptcp/protocol.c | 6 +- net/mptcp/protocol.h | 6 +- net/mptcp/subflow.c | 4 +- net/netfilter/ipset/ip_set_core.c | 5 + net/netfilter/ipvs/ip_vs_proto.c | 4 +- net/netfilter/nft_inner.c | 59 +- net/netfilter/nft_set_hash.c | 16 + net/netfilter/nft_socket.c | 2 +- net/netfilter/xt_LED.c | 4 +- net/packet/af_packet.c | 12 +- net/sched/cls_flower.c | 5 +- net/sched/sch_cbs.c | 2 +- net/sched/sch_tbf.c | 18 +- net/smc/af_smc.c | 6 +- net/tipc/udp_media.c | 2 +- net/vmw_vsock/af_vsock.c | 70 +- net/xdp/xsk_buff_pool.c | 5 +- net/xdp/xskmap.c | 2 +- rust/kernel/lib.rs | 2 +- rust/kernel/list/arc.rs | 3 - rust/kernel/sync/arc.rs | 6 - samples/bpf/test_cgrp2_sock.c | 4 +- scripts/Makefile.build | 2 +- scripts/mod/modpost.c | 2 +- scripts/setlocalversion | 54 +- sound/core/seq/seq_ump_client.c | 6 +- sound/pci/hda/hda_auto_parser.c | 61 +- sound/pci/hda/hda_local.h | 28 +- sound/pci/hda/patch_analog.c | 6 +- sound/pci/hda/patch_cirrus.c | 8 +- sound/pci/hda/patch_conexant.c | 36 +- sound/pci/hda/patch_cs8409-tables.c | 2 +- sound/pci/hda/patch_cs8409.h | 2 +- sound/pci/hda/patch_realtek.c | 126 +- sound/pci/hda/patch_sigmatel.c | 22 +- sound/pci/hda/patch_via.c | 2 +- sound/soc/amd/yc/acp6x-mach.c | 14 + sound/soc/codecs/hdmi-codec.c | 144 +- sound/soc/intel/avs/pcm.c | 2 +- sound/soc/intel/boards/sof_rt5682.c | 7 + sound/soc/intel/boards/sof_sdw.c | 41 + sound/soc/intel/common/soc-acpi-intel-arl-match.c | 63 + sound/soc/intel/common/soc-acpi-intel-mtl-match.c | 7 + sound/soc/mediatek/mt8188/mt8188-mt6359.c | 4 +- sound/soc/sdw_utils/soc_sdw_utils.c | 7 +- sound/soc/sof/ipc3-topology.c | 31 +- sound/usb/endpoint.c | 14 +- sound/usb/mixer.c | 58 +- sound/usb/mixer_maps.c | 10 + sound/usb/mixer_quirks.c | 1 + sound/usb/quirks-table.h | 341 +- sound/usb/quirks.c | 75 +- sound/usb/usbaudio.h | 4 + tools/bpf/bpftool/prog.c | 17 +- tools/scripts/Makefile.arch | 4 +- tools/testing/selftests/arm64/fp/fp-stress.c | 15 +- tools/testing/selftests/arm64/pauth/pac.c | 3 + .../selftests/bpf/progs/verifier_bits_iter.c | 4 +- tools/testing/selftests/damon/Makefile | 2 +- .../ftrace/test.d/kprobe/kprobe_syntax_errors.tc | 2 +- tools/testing/selftests/hid/run-hid-tools-tests.sh | 16 +- tools/testing/selftests/mm/hugetlb_dio.c | 14 +- tools/testing/selftests/resctrl/resctrl_val.c | 4 +- tools/testing/selftests/resctrl/resctrlfs.c | 2 +- tools/testing/vsock/vsock_perf.c | 10 +- tools/testing/vsock/vsock_test.c | 26 +- tools/tracing/rtla/sample/timerlat_load.py | 9 +- tools/tracing/rtla/src/timerlat_hist.c | 20 +- tools/tracing/rtla/src/timerlat_top.c | 8 +- tools/tracing/rtla/src/utils.c | 4 +- tools/tracing/rtla/src/utils.h | 2 + tools/verification/dot2/automata.py | 18 +- 539 files changed, 13136 insertions(+), 7041 deletions(-)
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.12.5 release. There are 466 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 14 Dec 2024 14:41:35 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.12.5-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.12.y
and the diffstat can be found below.thanks,
greg k-h
The riscv builds failed on Linux stable-rc linux-6.12.y due to following build warnings / errors.
riscv:
* build/gcc-13-defconfig
* build/clang-19-defconfig
* build/clang-nightly-defconfig
* build/gcc-8-defconfig
First seen on Linux stable-rc linux-6.12.y v6.12.4-467-g3f47dc0fd5b1,
Good: v6.12.4
Bad: 6.12.5-rc1
Build log:
-----------kernel/time/timekeeping.c: In function 'timekeeping_debug_get_ns':kernel/time/timekeeping.c:263:17: error: too few arguments to function 'clocksource_delta'
263 | delta = clocksource_delta(now, last, mask);
| ^~~~~~~~~~~~~~~~~In file included from kernel/time/timekeeping.c:30:kernel/time/timekeeping_internal.h:18:19: note: declared here
18 | static inline u64 clocksource_delta(u64 now, u64 last, u64
mask, u64 max_delta)
| ^~~~~~~~~~~~~~~~~
make[5]: *** [scripts/Makefile.build:229: kernel/time/timekeeping.o] Error 1
Links:
-------
- https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.12.y/build/v6.12.4-467-g3f47dc0fd5b1/testrun/26281169/suite/build/test/gcc-13-defconfig/log
- https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.12.y/build/v6.12.4-467-g3f47dc0fd5b1/testrun/26281169/suite/build/test/gcc-13-defconfig/history/
- https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.12.y/build/v6.12.4-467-g3f47dc0fd5b1/testrun/26281169/suite/build/test/gcc-13-defconfig/details/
Steps to reproduce:
------------
# tuxmake --runtime podman --target-arch riscv --toolchain gcc-13 --kconfig defconfig
metadata:
----
git describe: v6.12.4-467-g3f47dc0fd5b1
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git sha: 3f47dc0fd5b11e6655e9fa78a350d64c0a3d53d3
kernel config:
https://storage.tuxsuite.com/public/linaro/lkft/builds/2q7Ekivz3juYAyrxbUVAOGrVOAe/config
build url: https://storage.tuxsuite.com/public/linaro/lkft/builds/2q7Ekivz3juYAyrxbUVAOGrVOAe/
toolchain: gcc-13 and clang
config: gcc-13-defconfig
arch: riscv
--
Linaro LKFT
https://lkft.linaro.org
Quoted 41 lines · Naresh Kamboju
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.12.5 release. There are 466 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 14 Dec 2024 14:41:35 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.12.5-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.12.y
and the diffstat can be found below.thanks,
greg k-h
The riscv builds failed on Linux stable-rc linux-6.12.y due to following build warnings / errors.
riscv:
* build/gcc-13-defconfig
* build/clang-19-defconfig
* build/clang-nightly-defconfig
* build/gcc-8-defconfigFirst seen on Linux stable-rc linux-6.12.y v6.12.4-467-g3f47dc0fd5b1,
Good: v6.12.4
Bad: 6.12.5-rc1Build log:
-----------kernel/time/timekeeping.c: In function 'timekeeping_debug_get_ns':kernel/time/timekeeping.c:263:17: error: too few arguments to function 'clocksource_delta'
Quoted 8 lines
263 | delta = clocksource_delta(now, last, mask); | ^~~~~~~~~~~~~~~~~In file included from
kernel/time/timekeeping.c:30:kernel/time/timekeeping_internal.h:18:19: note: declared here
18 | static inline u64 clocksource_delta(u64 now, u64 last, u64
mask, u64max_delta)| ^~~~~~~~~~~~~~~~~make[5]: *** [
scripts/Makefile.build:229:kernel/time/timekeeping.o] Error 1
The bisect log pointing to first bad commit,
clocksource: Make negative motion detection more robust commit 76031d9536a076bf023bedbdb1b4317fc801dd67 upstream.
- Naresh
Quoted 52 lines · Naresh Kamboju
Quoted 41 lines · Naresh Kamboju
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.12.5 release. There are 466 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 14 Dec 2024 14:41:35 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.12.5-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.12.y
and the diffstat can be found below.thanks,
greg k-h
The riscv builds failed on Linux stable-rc linux-6.12.y due to following build warnings / errors.
riscv:
* build/gcc-13-defconfig
* build/clang-19-defconfig
* build/clang-nightly-defconfig
* build/gcc-8-defconfigFirst seen on Linux stable-rc linux-6.12.y v6.12.4-467-g3f47dc0fd5b1,
Good: v6.12.4
Bad: 6.12.5-rc1Build log:
-----------kernel/time/timekeeping.c: In function 'timekeeping_debug_get_ns':kernel/time/timekeeping.c:263:17: error: too few arguments to function 'clocksource_delta'Quoted 8 lines
263 | delta = clocksource_delta(now, last, mask); | ^~~~~~~~~~~~~~~~~In file included from
kernel/time/timekeeping.c:30:kernel/time/timekeeping_internal.h:18:19: note: declared here
18 | static inline u64 clocksource_delta(u64 now, u64 last, u64
mask, u64max_delta)| ^~~~~~~~~~~~~~~~~make[5]: *** [
scripts/Makefile.build:229:kernel/time/timekeeping.o] Error 1
Quoted 4 lines
The bisect log pointing to first bad commit,
clocksource: Make negative motion detection more robust commit
76031d9536a076bf023bedbdb1b4317fc801dd67upstream.
This issue was fixed in the upstream by adding the following patch,
timekeeping: Remove CONFIG_DEBUG_TIMEKEEPING
commit d44d26987bb3df6d76556827097fc9ce17565cb8 upstream
- Naresh
Greg Kroah-Hartman
maintainerQuoted 53 lines · Naresh Kamboju
Quoted 52 lines · Naresh Kamboju
Quoted 49 lines · Naresh Kamboju
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.12.5 release. There are 466 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 14 Dec 2024 14:41:35 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.12.5-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.12.y
and the diffstat can be found below.thanks,
greg k-h
The riscv builds failed on Linux stable-rc linux-6.12.y due to following build warnings / errors.
riscv:
* build/gcc-13-defconfig
* build/clang-19-defconfig
* build/clang-nightly-defconfig
* build/gcc-8-defconfigFirst seen on Linux stable-rc linux-6.12.y v6.12.4-467-g3f47dc0fd5b1,
Good: v6.12.4
Bad: 6.12.5-rc1Build log:
-----------kernel/time/timekeeping.c: In function 'timekeeping_debug_get_ns':kernel/time/timekeeping.c:263:17: error: too few arguments to function 'clocksource_delta'263 | delta = clocksource_delta(now, last, mask); | ^~~~~~~~~~~~~~~~~In file included from
kernel/time/timekeeping.c:30:kernel/time/timekeeping_internal.h:18:19: note: declared here
18 | static inline u64 clocksource_delta(u64 now, u64 last, u64
mask, u64max_delta)| ^~~~~~~~~~~~~~~~~make[5]: *** [
scripts/Makefile.build:229:kernel/time/timekeeping.o] Error 1
Quoted 8 lines
Quoted 4 lines
The bisect log pointing to first bad commit,
clocksource: Make negative motion detection more robust commit
76031d9536a076bf023bedbdb1b4317fc801dd67upstream.This issue was fixed in the upstream by adding the following patch,
timekeeping: RemoveCONFIG_DEBUG_TIMEKEEPING
commitd44d26987bb3df6d76556827097fc9ce17565cb8upstream
Kind of, it needed another commit as well, I've queued up the needed ones and will push out a -rc2 soon.
thanks for testing!
greg k-h
Am 12.12.2024 um 15:52 schrieb Greg Kroah-Hartman:
Quoted 4 lines
This is the start of the stable review cycle for the 6.12.5 release. There are 466 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Builds, boots and works on my 2-socket Ivy Bridge Xeon E5-2697 v2 server. No dmesg oddities or regressions found.
Beste Grüße,
Peter Schneider
Signature · 8 lines
Climb the mountain not to plant your flag, but to embrace the challenge, enjoy the air and behold the view. Climb it so you can see the world, not so the world can see you. -- David McCullough Jr. OpenPGP: 0xA3828BD796CCE11A8CADE8866E3A92C92C3FF244 Download: https://www.peters-netzplatz.de/download/pschneider1968_pub.asc https://keys.mailvelope.com/pks/lookup?op=get&[email protected] https://keys.mailvelope.com/pks/lookup?op=get&[email protected]
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.12.5 release. There are 466 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 14 Dec 2024 14:41:35 +0000. Anything received after that time might be too late.
Tested on a ThinkPad E14 Gen 3 with a AMD Ryzen 5 5500U CPU and on the Steam Deck (LCD variant).
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.12.5 release. There are 466 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 14 Dec 2024 14:41:35 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.12.5-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.12.y
and the diffstat can be found below.thanks,
greg k-h
No new regressions for Tegra ...
Test results for stable-v6.12:
10 builds: 10 pass, 0 fail
26 boots: 26 pass, 0 fail
116 tests: 115 pass, 1 failLinux version: 6.12.5-rc1-g3f47dc0fd5b1
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra194-p3509-0000+p3668-0000,
tegra20-ventana, tegra210-p2371-2180,
tegra210-p3450-0000, tegra30-cardhu-a04Test failures: tegra186-p2771-0000: cpufreq
Tegra186 tests are failing randomly but there is a fix now in the mainline ...
4c49f38e20a5 ("net: stmmac: fix TSO DMA API usage causing oops")
Let me know if you want me to send a separate request to include in this in stable.
Otherwise ...
Thanks
Jon
Signature · 1 line
nvpublic
Quoted 4 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.12.5 release. There are 466 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.12.5 release. There are 466 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 14 Dec 2024 14:41:35 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.12.5-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.12.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Would it not be better to test rc2 now instead?
Den fre 13 dec. 2024 kl 17:39 skrev Shuah Khan <[email protected]>:
Quoted 28 lines · Greg Kroah-Hartman
Quoted 9 lines
This is the start of the stable review cycle for the 6.12.5 release. There are 466 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 14 Dec 2024 14:41:35 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.12.5-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.12.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
Tested-by Shuah Khan <[email protected]>thanks,
-- Shuah
Hello,
Quoted 7 lines · On Thu, 12 Dec 2024 15:52:49 +0100 Greg Kroah-Hartman…
This is the start of the stable review cycle for the 6.12.5 release. There are 466 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 14 Dec 2024 14:41:35 +0000. Anything received after that time might be too late.
This rc kernel passes DAMON functionality test[1] on my test machine. Attaching the test results summary below. Please note that I retrieved the kernel from linux-stable-rc tree[2].
[1] https://github.com/damonitor/damon-tests/tree/next/corr
[2] 602e3159e817 ("Linux 6.12.5-rc2")
Thanks,
SJ
[...]
---
ok 9 selftests: damon: damos_tried_regions.py
ok 10 selftests: damon: damon_nr_regions.py
ok 11 selftests: damon: reclaim.sh
ok 12 selftests: damon: lru_sort.sh
ok 13 selftests: damon: debugfs_empty_targets.sh
ok 14 selftests: damon: debugfs_huge_count_read_write.sh
ok 15 selftests: damon: debugfs_duplicate_context_creation.sh ok 16 selftests: damon: debugfs_rm_non_contexts.sh
ok 17 selftests: damon: debugfs_target_ids_read_before_terminate_race.sh ok 18 selftests: damon: debugfs_target_ids_pid_leak.sh
ok 19 selftests: damon: sysfs_update_removed_scheme_dir.sh
ok 20 selftests: damon: sysfs_update_schemes_tried_regions_hang.py ok 1 selftests: damon-tests: kunit.sh
ok 2 selftests: damon-tests: huge_count_read_write.sh
ok 3 selftests: damon-tests: buffer_overflow.sh
ok 4 selftests: damon-tests: rm_contexts.sh
ok 5 selftests: damon-tests: record_null_deref.sh
ok 6 selftests: damon-tests: dbgfs_target_ids_read_before_terminate_race.sh ok 7 selftests: damon-tests: dbgfs_target_ids_pid_leak.sh
ok 8 selftests: damon-tests: damo_tests.sh
ok 9 selftests: damon-tests: masim-record.sh
ok 10 selftests: damon-tests: build_i386.sh
ok 11 selftests: damon-tests: build_arm64.sh # SKIP
ok 12 selftests: damon-tests: build_m68k.sh # SKIP
ok 13 selftests: damon-tests: build_i386_idle_flag.sh
ok 14 selftests: damon-tests: build_i386_highpte.sh
ok 15 selftests: damon-tests: build_nomemcg.sh
[33m
[92mPASS [39m