mirror of
				https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux-stable.git
				synced 2025-11-04 07:44:51 +10:00 
			
		
		
		
	irqchip/irq-mvebu-icu: Fix access to msi_data from irq_domain::host_data
commit987f379b54upstream. mvebu_icu_translate() incorrectly casts irq_domain::host_data directly to mvebu_icu_msi_data. However, host_data actually points to a structure of type msi_domain_info. This incorrect cast causes issues such as the thermal sensors of the CP110 platform malfunctioning. Specifically, the translation of the SEI interrupt to IRQ_TYPE_EDGE_RISING fails, preventing proper interrupt handling. The following error was observed: genirq: Setting trigger mode 4 for irq 85 failed (irq_chip_set_type_parent+0x0/0x34) armada_thermal f2400000.system-controller:thermal-sensor@70: Cannot request threaded IRQ 85 Resolve the issue by first casting host_data to msi_domain_info and then accessing mvebu_icu_msi_data through msi_domain_info::chip_data. Fixes:d929e4db22("irqchip/irq-mvebu-icu: Prepare for real per device MSI") Signed-off-by: Stefan Eichenberger <eichest@gmail.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: stable@vger.kernel.org Link: https://lore.kernel.org/all/20250124085140.44792-1-eichest@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
		
							parent
							
								
									0dd5aade30
								
							
						
					
					
						commit
						06124c6ae8
					
				@ -68,7 +68,8 @@ static int mvebu_icu_translate(struct irq_domain *d, struct irq_fwspec *fwspec,
 | 
				
			|||||||
			       unsigned long *hwirq, unsigned int *type)
 | 
								       unsigned long *hwirq, unsigned int *type)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned int param_count = static_branch_unlikely(&legacy_bindings) ? 3 : 2;
 | 
						unsigned int param_count = static_branch_unlikely(&legacy_bindings) ? 3 : 2;
 | 
				
			||||||
	struct mvebu_icu_msi_data *msi_data = d->host_data;
 | 
						struct msi_domain_info *info = d->host_data;
 | 
				
			||||||
 | 
						struct mvebu_icu_msi_data *msi_data = info->chip_data;
 | 
				
			||||||
	struct mvebu_icu *icu = msi_data->icu;
 | 
						struct mvebu_icu *icu = msi_data->icu;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Check the count of the parameters in dt */
 | 
						/* Check the count of the parameters in dt */
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user