Patch "powerpc/xive: Fix xmon command "dxi"" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    powerpc/xive: Fix xmon command "dxi"

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     powerpc-xive-fix-xmon-command-dxi.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 44440d39d42647501538ab5ed8992dbbc93e71ea
Author: Cédric Le Goater <clg@xxxxxxxx>
Date:   Wed Mar 31 16:45:12 2021 +0200

    powerpc/xive: Fix xmon command "dxi"
    
    [ Upstream commit 33e4bc5946432a4ac173fd08e8e30a13ab94d06d ]
    
    When under xmon, the "dxi" command dumps the state of the XIVE
    interrupts. If an interrupt number is specified, only the state of
    the associated XIVE interrupt is dumped. This form of the command
    lacks an irq_data parameter which is nevertheless used by
    xmon_xive_get_irq_config(), leading to an xmon crash.
    
    Fix that by doing a lookup in the system IRQ mapping to query the IRQ
    descriptor data. Invalid interrupt numbers, or not belonging to the
    XIVE IRQ domain, OPAL event interrupt number for instance, should be
    caught by the previous query done at the firmware level.
    
    Fixes: 97ef27507793 ("powerpc/xive: Fix xmon support on the PowerNV platform")
    Reported-by: kernel test robot <lkp@xxxxxxxxx>
    Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
    Signed-off-by: Cédric Le Goater <clg@xxxxxxxx>
    Tested-by: Greg Kurz <groug@xxxxxxxx>
    Reviewed-by: Greg Kurz <groug@xxxxxxxx>
    Signed-off-by: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20210331144514.892250-8-clg@xxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/powerpc/sysdev/xive/common.c b/arch/powerpc/sysdev/xive/common.c
index 5899ffb28c58..5b0f6b6278e3 100644
--- a/arch/powerpc/sysdev/xive/common.c
+++ b/arch/powerpc/sysdev/xive/common.c
@@ -261,17 +261,20 @@ notrace void xmon_xive_do_dump(int cpu)
 	xmon_printf("\n");
 }
 
+static struct irq_data *xive_get_irq_data(u32 hw_irq)
+{
+	unsigned int irq = irq_find_mapping(xive_irq_domain, hw_irq);
+
+	return irq ? irq_get_irq_data(irq) : NULL;
+}
+
 int xmon_xive_get_irq_config(u32 hw_irq, struct irq_data *d)
 {
-	struct irq_chip *chip = irq_data_get_irq_chip(d);
 	int rc;
 	u32 target;
 	u8 prio;
 	u32 lirq;
 
-	if (!is_xive_irq(chip))
-		return -EINVAL;
-
 	rc = xive_ops->get_irq_config(hw_irq, &target, &prio, &lirq);
 	if (rc) {
 		xmon_printf("IRQ 0x%08x : no config rc=%d\n", hw_irq, rc);
@@ -281,6 +284,9 @@ int xmon_xive_get_irq_config(u32 hw_irq, struct irq_data *d)
 	xmon_printf("IRQ 0x%08x : target=0x%x prio=%02x lirq=0x%x ",
 		    hw_irq, target, prio, lirq);
 
+	if (!d)
+		d = xive_get_irq_data(hw_irq);
+
 	if (d) {
 		struct xive_irq_data *xd = irq_data_get_irq_handler_data(d);
 		u64 val = xive_esb_read(xd, XIVE_ESB_GET);



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux