From: Sasha Levin Date: Tue, 3 Oct 2023 00:58:38 +0000 (-0400) Subject: Fixes for 4.14 X-Git-Tag: v6.5.6~57 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4f761cdf30f11dcd766bbea2ea418911c879d765;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 4.14 Signed-off-by: Sasha Levin --- diff --git a/queue-4.14/ata-ahci-drop-pointless-vprintk-calls-and-convert-th.patch b/queue-4.14/ata-ahci-drop-pointless-vprintk-calls-and-convert-th.patch new file mode 100644 index 00000000000..e93558e18e8 --- /dev/null +++ b/queue-4.14/ata-ahci-drop-pointless-vprintk-calls-and-convert-th.patch @@ -0,0 +1,155 @@ +From 4e397868c05957682b0b94359578b9c4ffb35d29 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 21 Dec 2021 08:20:47 +0100 +Subject: ata: ahci: Drop pointless VPRINTK() calls and convert the remaining + ones + +From: Hannes Reinecke + +[ Upstream commit 93c7711494f47f9c829321e2a8711671b02f6e4c ] + +Drop pointless VPRINTK() calls for entering and existing interrupt +routines and convert the remaining calls to dev_dbg(). + +Signed-off-by: Hannes Reinecke +Signed-off-by: Damien Le Moal +Stable-dep-of: 737dd811a3db ("ata: libahci: clear pending interrupt status") +Signed-off-by: Sasha Levin +--- + drivers/ata/ahci.c | 4 +--- + drivers/ata/ahci_xgene.c | 4 ---- + drivers/ata/libahci.c | 18 ++++-------------- + 3 files changed, 5 insertions(+), 21 deletions(-) + +diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c +index 0905c07b8c7eb..70930eb1e3286 100644 +--- a/drivers/ata/ahci.c ++++ b/drivers/ata/ahci.c +@@ -670,7 +670,7 @@ static void ahci_pci_init_controller(struct ata_host *host) + + /* clear port IRQ */ + tmp = readl(port_mmio + PORT_IRQ_STAT); +- VPRINTK("PORT_IRQ_STAT 0x%x\n", tmp); ++ dev_dbg(&pdev->dev, "PORT_IRQ_STAT 0x%x\n", tmp); + if (tmp) + writel(tmp, port_mmio + PORT_IRQ_STAT); + } +@@ -1480,7 +1480,6 @@ static irqreturn_t ahci_thunderx_irq_handler(int irq, void *dev_instance) + u32 irq_stat, irq_masked; + unsigned int handled = 1; + +- VPRINTK("ENTER\n"); + hpriv = host->private_data; + mmio = hpriv->mmio; + irq_stat = readl(mmio + HOST_IRQ_STAT); +@@ -1497,7 +1496,6 @@ static irqreturn_t ahci_thunderx_irq_handler(int irq, void *dev_instance) + irq_stat = readl(mmio + HOST_IRQ_STAT); + spin_unlock(&host->lock); + } while (irq_stat); +- VPRINTK("EXIT\n"); + + return IRQ_RETVAL(handled); + } +diff --git a/drivers/ata/ahci_xgene.c b/drivers/ata/ahci_xgene.c +index ad58da7c9affd..06826ec47454f 100644 +--- a/drivers/ata/ahci_xgene.c ++++ b/drivers/ata/ahci_xgene.c +@@ -601,8 +601,6 @@ static irqreturn_t xgene_ahci_irq_intr(int irq, void *dev_instance) + void __iomem *mmio; + u32 irq_stat, irq_masked; + +- VPRINTK("ENTER\n"); +- + hpriv = host->private_data; + mmio = hpriv->mmio; + +@@ -625,8 +623,6 @@ static irqreturn_t xgene_ahci_irq_intr(int irq, void *dev_instance) + + spin_unlock(&host->lock); + +- VPRINTK("EXIT\n"); +- + return IRQ_RETVAL(rc); + } + +diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c +index 1fe18a4983f0d..3111c649816a2 100644 +--- a/drivers/ata/libahci.c ++++ b/drivers/ata/libahci.c +@@ -1212,12 +1212,12 @@ static void ahci_port_init(struct device *dev, struct ata_port *ap, + + /* clear SError */ + tmp = readl(port_mmio + PORT_SCR_ERR); +- VPRINTK("PORT_SCR_ERR 0x%x\n", tmp); ++ dev_dbg(dev, "PORT_SCR_ERR 0x%x\n", tmp); + writel(tmp, port_mmio + PORT_SCR_ERR); + + /* clear port IRQ */ + tmp = readl(port_mmio + PORT_IRQ_STAT); +- VPRINTK("PORT_IRQ_STAT 0x%x\n", tmp); ++ dev_dbg(dev, "PORT_IRQ_STAT 0x%x\n", tmp); + if (tmp) + writel(tmp, port_mmio + PORT_IRQ_STAT); + +@@ -1248,10 +1248,10 @@ void ahci_init_controller(struct ata_host *host) + } + + tmp = readl(mmio + HOST_CTL); +- VPRINTK("HOST_CTL 0x%x\n", tmp); ++ dev_dbg(host->dev, "HOST_CTL 0x%x\n", tmp); + writel(tmp | HOST_IRQ_EN, mmio + HOST_CTL); + tmp = readl(mmio + HOST_CTL); +- VPRINTK("HOST_CTL 0x%x\n", tmp); ++ dev_dbg(host->dev, "HOST_CTL 0x%x\n", tmp); + } + EXPORT_SYMBOL_GPL(ahci_init_controller); + +@@ -1902,8 +1902,6 @@ static irqreturn_t ahci_multi_irqs_intr_hard(int irq, void *dev_instance) + void __iomem *port_mmio = ahci_port_base(ap); + u32 status; + +- VPRINTK("ENTER\n"); +- + status = readl(port_mmio + PORT_IRQ_STAT); + writel(status, port_mmio + PORT_IRQ_STAT); + +@@ -1911,8 +1909,6 @@ static irqreturn_t ahci_multi_irqs_intr_hard(int irq, void *dev_instance) + ahci_handle_port_interrupt(ap, port_mmio, status); + spin_unlock(ap->lock); + +- VPRINTK("EXIT\n"); +- + return IRQ_HANDLED; + } + +@@ -1929,9 +1925,7 @@ u32 ahci_handle_port_intr(struct ata_host *host, u32 irq_masked) + ap = host->ports[i]; + if (ap) { + ahci_port_intr(ap); +- VPRINTK("port %u\n", i); + } else { +- VPRINTK("port %u (no irq)\n", i); + if (ata_ratelimit()) + dev_warn(host->dev, + "interrupt on disabled port %u\n", i); +@@ -1952,8 +1946,6 @@ static irqreturn_t ahci_single_level_irq_intr(int irq, void *dev_instance) + void __iomem *mmio; + u32 irq_stat, irq_masked; + +- VPRINTK("ENTER\n"); +- + hpriv = host->private_data; + mmio = hpriv->mmio; + +@@ -1981,8 +1973,6 @@ static irqreturn_t ahci_single_level_irq_intr(int irq, void *dev_instance) + + spin_unlock(&host->lock); + +- VPRINTK("EXIT\n"); +- + return IRQ_RETVAL(rc); + } + +-- +2.40.1 + diff --git a/queue-4.14/ata-libahci-clear-pending-interrupt-status.patch b/queue-4.14/ata-libahci-clear-pending-interrupt-status.patch new file mode 100644 index 00000000000..b11bec67426 --- /dev/null +++ b/queue-4.14/ata-libahci-clear-pending-interrupt-status.patch @@ -0,0 +1,101 @@ +From 375213a9ea15d7e6452a027531ee7cfee8a90602 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 7 Sep 2023 16:17:10 +0800 +Subject: ata: libahci: clear pending interrupt status + +From: Szuying Chen + +[ Upstream commit 737dd811a3dbfd7edd4ad2ba5152e93d99074f83 ] + +When a CRC error occurs, the HBA asserts an interrupt to indicate an +interface fatal error (PxIS.IFS). The ISR clears PxIE and PxIS, then +does error recovery. If the adapter receives another SDB FIS +with an error (PxIS.TFES) from the device before the start of the EH +recovery process, the interrupt signaling the new SDB cannot be +serviced as PxIE was cleared already. This in turn results in the HBA +inability to issue any command during the error recovery process after +setting PxCMD.ST to 1 because PxIS.TFES is still set. + +According to AHCI 1.3.1 specifications section 6.2.2, fatal errors +notified by setting PxIS.HBFS, PxIS.HBDS, PxIS.IFS or PxIS.TFES will +cause the HBA to enter the ERR:Fatal state. In this state, the HBA +shall not issue any new commands. + +To avoid this situation, introduce the function +ahci_port_clear_pending_irq() to clear pending interrupts before +executing a COMRESET. This follows the AHCI 1.3.1 - section 6.2.2.2 +specification. + +Signed-off-by: Szuying Chen +Fixes: e0bfd149973d ("[PATCH] ahci: stop engine during hard reset") +Cc: stable@vger.kernel.org +Reviewed-by: Niklas Cassel +Signed-off-by: Damien Le Moal +Signed-off-by: Sasha Levin +--- + drivers/ata/libahci.c | 35 +++++++++++++++++++++++------------ + 1 file changed, 23 insertions(+), 12 deletions(-) + +diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c +index 3111c649816a2..563fcef14b7cb 100644 +--- a/drivers/ata/libahci.c ++++ b/drivers/ata/libahci.c +@@ -1196,6 +1196,26 @@ static ssize_t ahci_activity_show(struct ata_device *dev, char *buf) + return sprintf(buf, "%d\n", emp->blink_policy); + } + ++static void ahci_port_clear_pending_irq(struct ata_port *ap) ++{ ++ struct ahci_host_priv *hpriv = ap->host->private_data; ++ void __iomem *port_mmio = ahci_port_base(ap); ++ u32 tmp; ++ ++ /* clear SError */ ++ tmp = readl(port_mmio + PORT_SCR_ERR); ++ dev_dbg(ap->host->dev, "PORT_SCR_ERR 0x%x\n", tmp); ++ writel(tmp, port_mmio + PORT_SCR_ERR); ++ ++ /* clear port IRQ */ ++ tmp = readl(port_mmio + PORT_IRQ_STAT); ++ dev_dbg(ap->host->dev, "PORT_IRQ_STAT 0x%x\n", tmp); ++ if (tmp) ++ writel(tmp, port_mmio + PORT_IRQ_STAT); ++ ++ writel(1 << ap->port_no, hpriv->mmio + HOST_IRQ_STAT); ++} ++ + static void ahci_port_init(struct device *dev, struct ata_port *ap, + int port_no, void __iomem *mmio, + void __iomem *port_mmio) +@@ -1210,18 +1230,7 @@ static void ahci_port_init(struct device *dev, struct ata_port *ap, + if (rc) + dev_warn(dev, "%s (%d)\n", emsg, rc); + +- /* clear SError */ +- tmp = readl(port_mmio + PORT_SCR_ERR); +- dev_dbg(dev, "PORT_SCR_ERR 0x%x\n", tmp); +- writel(tmp, port_mmio + PORT_SCR_ERR); +- +- /* clear port IRQ */ +- tmp = readl(port_mmio + PORT_IRQ_STAT); +- dev_dbg(dev, "PORT_IRQ_STAT 0x%x\n", tmp); +- if (tmp) +- writel(tmp, port_mmio + PORT_IRQ_STAT); +- +- writel(1 << port_no, mmio + HOST_IRQ_STAT); ++ ahci_port_clear_pending_irq(ap); + + /* mark esata ports */ + tmp = readl(port_mmio + PORT_CMD); +@@ -1551,6 +1560,8 @@ int ahci_do_hardreset(struct ata_link *link, unsigned int *class, + tf.command = ATA_BUSY; + ata_tf_to_fis(&tf, 0, 0, d2h_fis); + ++ ahci_port_clear_pending_irq(ap); ++ + rc = sata_link_hardreset(link, timing, deadline, online, + ahci_check_ready); + +-- +2.40.1 + diff --git a/queue-4.14/ata-libata-eh-do-not-clear-ata_pflag_eh_pending-in-a.patch b/queue-4.14/ata-libata-eh-do-not-clear-ata_pflag_eh_pending-in-a.patch new file mode 100644 index 00000000000..7293b119720 --- /dev/null +++ b/queue-4.14/ata-libata-eh-do-not-clear-ata_pflag_eh_pending-in-a.patch @@ -0,0 +1,123 @@ +From 1f2c93a3e55d62c8e7fef90a4aaefb6dd7b20db6 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 14 Sep 2023 00:19:16 +0200 +Subject: ata: libata-eh: do not clear ATA_PFLAG_EH_PENDING in ata_eh_reset() + +From: Niklas Cassel + +[ Upstream commit 80cc944eca4f0baa9c381d0706f3160e491437f2 ] + +ata_scsi_port_error_handler() starts off by clearing ATA_PFLAG_EH_PENDING, +before calling ap->ops->error_handler() (without holding the ap->lock). + +If an error IRQ is received while ap->ops->error_handler() is running, +the irq handler will set ATA_PFLAG_EH_PENDING. + +Once ap->ops->error_handler() returns, ata_scsi_port_error_handler() +checks if ATA_PFLAG_EH_PENDING is set, and if it is, another iteration +of ATA EH is performed. + +The problem is that ATA_PFLAG_EH_PENDING is not only cleared by +ata_scsi_port_error_handler(), it is also cleared by ata_eh_reset(). + +ata_eh_reset() is called by ap->ops->error_handler(). This additional +clearing done by ata_eh_reset() breaks the whole retry logic in +ata_scsi_port_error_handler(). Thus, if an error IRQ is received while +ap->ops->error_handler() is running, the port will currently remain +frozen and will never get re-enabled. + +The additional clearing in ata_eh_reset() was introduced in commit +1e641060c4b5 ("libata: clear eh_info on reset completion"). + +Looking at the original error report: +https://marc.info/?l=linux-ide&m=124765325828495&w=2 + +We can see the following happening: +[ 1.074659] ata3: XXX port freeze +[ 1.074700] ata3: XXX hardresetting link, stopping engine +[ 1.074746] ata3: XXX flipping SControl + +[ 1.411471] ata3: XXX irq_stat=400040 CONN|PHY +[ 1.411475] ata3: XXX port freeze + +[ 1.420049] ata3: XXX starting engine +[ 1.420096] ata3: XXX rc=0, class=1 +[ 1.420142] ata3: XXX clearing IRQs for thawing +[ 1.420188] ata3: XXX port thawed +[ 1.420234] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300) + +We are not supposed to be able to receive an error IRQ while the port is +frozen (PxIE is set to 0, i.e. all IRQs for the port are disabled). + +AHCI 1.3.1 section 10.7.1.1 First Tier (IS Register) states: +"Each bit location can be thought of as reporting a '1' if the virtual +"interrupt line" for that port is indicating it wishes to generate an +interrupt. That is, if a port has one or more interrupt status bit set, +and the enables for those status bits are set, then this bit shall be set." + +Additionally, AHCI state P:ComInit clearly shows that the state machine +will only jump to P:ComInitSetIS (which sets IS.IPS(x) to '1'), if PxIE.PCE +is set to '1'. In our case, PxIE is set to 0, so IS.IPS(x) won't get set. + +So IS.IPS(x) only gets set if PxIS and PxIE is set. + +AHCI 1.3.1 section 10.7.1.1 First Tier (IS Register) also states: +"The bits in this register are read/write clear. It is set by the level of +the virtual interrupt line being a set, and cleared by a write of '1' from +the software." + +So if IS.IPS(x) is set, you need to explicitly clear it by writing a 1 to +IS.IPS(x) for that port. + +Since PxIE is cleared, the only way to get an interrupt while the port is +frozen, is if IS.IPS(x) is set, and the only way IS.IPS(x) can be set when +the port is frozen, is if it was set before the port was frozen. + +However, since commit 737dd811a3db ("ata: libahci: clear pending interrupt +status"), we clear both PxIS and IS.IPS(x) after freezing the port, but +before the COMRESET, so the problem that commit 1e641060c4b5 ("libata: +clear eh_info on reset completion") fixed can no longer happen. + +Thus, revert commit 1e641060c4b5 ("libata: clear eh_info on reset +completion"), so that the retry logic in ata_scsi_port_error_handler() +works once again. (The retry logic is still needed, since we can still +get an error IRQ _after_ the port has been thawed, but before +ata_scsi_port_error_handler() takes the ap->lock in order to check +if ATA_PFLAG_EH_PENDING is set.) + +Signed-off-by: Niklas Cassel +Signed-off-by: Damien Le Moal +Signed-off-by: Sasha Levin +--- + drivers/ata/libata-eh.c | 13 +++---------- + 1 file changed, 3 insertions(+), 10 deletions(-) + +diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c +index cbe9af624a06f..8a789de056807 100644 +--- a/drivers/ata/libata-eh.c ++++ b/drivers/ata/libata-eh.c +@@ -2948,18 +2948,11 @@ int ata_eh_reset(struct ata_link *link, int classify, + postreset(slave, classes); + } + +- /* +- * Some controllers can't be frozen very well and may set spurious +- * error conditions during reset. Clear accumulated error +- * information and re-thaw the port if frozen. As reset is the +- * final recovery action and we cross check link onlineness against +- * device classification later, no hotplug event is lost by this. +- */ ++ /* clear cached SError */ + spin_lock_irqsave(link->ap->lock, flags); +- memset(&link->eh_info, 0, sizeof(link->eh_info)); ++ link->eh_info.serror = 0; + if (slave) +- memset(&slave->eh_info, 0, sizeof(link->eh_info)); +- ap->pflags &= ~ATA_PFLAG_EH_PENDING; ++ slave->eh_info.serror = 0; + spin_unlock_irqrestore(link->ap->lock, flags); + + if (ap->pflags & ATA_PFLAG_FROZEN) +-- +2.40.1 + diff --git a/queue-4.14/fbdev-sh7760fb-depend-on-fb-y.patch b/queue-4.14/fbdev-sh7760fb-depend-on-fb-y.patch new file mode 100644 index 00000000000..b8f49c0fccb --- /dev/null +++ b/queue-4.14/fbdev-sh7760fb-depend-on-fb-y.patch @@ -0,0 +1,60 @@ +From 293c7a4257a9f6c6432dfd9c9f2d2a5636b27f85 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 18 Sep 2023 11:03:49 +0200 +Subject: fbdev/sh7760fb: Depend on FB=y + +From: Thomas Zimmermann + +[ Upstream commit f75f71b2c418a27a7c05139bb27a0c83adf88d19 ] + +Fix linker error if FB=m about missing fb_io_read and fb_io_write. The +linker's error message suggests that this config setting has already +been broken for other symbols. + + All errors (new ones prefixed by >>): + + sh4-linux-ld: drivers/video/fbdev/sh7760fb.o: in function `sh7760fb_probe': + sh7760fb.c:(.text+0x374): undefined reference to `framebuffer_alloc' + sh4-linux-ld: sh7760fb.c:(.text+0x394): undefined reference to `fb_videomode_to_var' + sh4-linux-ld: sh7760fb.c:(.text+0x39c): undefined reference to `fb_alloc_cmap' + sh4-linux-ld: sh7760fb.c:(.text+0x3a4): undefined reference to `register_framebuffer' + sh4-linux-ld: sh7760fb.c:(.text+0x3ac): undefined reference to `fb_dealloc_cmap' + sh4-linux-ld: sh7760fb.c:(.text+0x434): undefined reference to `framebuffer_release' + sh4-linux-ld: drivers/video/fbdev/sh7760fb.o: in function `sh7760fb_remove': + sh7760fb.c:(.text+0x800): undefined reference to `unregister_framebuffer' + sh4-linux-ld: sh7760fb.c:(.text+0x804): undefined reference to `fb_dealloc_cmap' + sh4-linux-ld: sh7760fb.c:(.text+0x814): undefined reference to `framebuffer_release' + >> sh4-linux-ld: drivers/video/fbdev/sh7760fb.o:(.rodata+0xc): undefined reference to `fb_io_read' + >> sh4-linux-ld: drivers/video/fbdev/sh7760fb.o:(.rodata+0x10): undefined reference to `fb_io_write' + sh4-linux-ld: drivers/video/fbdev/sh7760fb.o:(.rodata+0x2c): undefined reference to `cfb_fillrect' + sh4-linux-ld: drivers/video/fbdev/sh7760fb.o:(.rodata+0x30): undefined reference to `cfb_copyarea' + sh4-linux-ld: drivers/video/fbdev/sh7760fb.o:(.rodata+0x34): undefined reference to `cfb_imageblit' + +Suggested-by: Randy Dunlap +Reported-by: kernel test robot +Closes: https://lore.kernel.org/oe-kbuild-all/202309130632.LS04CPWu-lkp@intel.com/ +Signed-off-by: Thomas Zimmermann +Reviewed-by: Javier Martinez Canillas +Acked-by: John Paul Adrian Glaubitz +Link: https://patchwork.freedesktop.org/patch/msgid/20230918090400.13264-1-tzimmermann@suse.de +Signed-off-by: Sasha Levin +--- + drivers/video/fbdev/Kconfig | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig +index a7e8db955ef67..30654608297f1 100644 +--- a/drivers/video/fbdev/Kconfig ++++ b/drivers/video/fbdev/Kconfig +@@ -2197,7 +2197,7 @@ config FB_COBALT + + config FB_SH7760 + bool "SH7760/SH7763/SH7720/SH7721 LCDC support" +- depends on FB && (CPU_SUBTYPE_SH7760 || CPU_SUBTYPE_SH7763 \ ++ depends on FB=y && (CPU_SUBTYPE_SH7760 || CPU_SUBTYPE_SH7763 \ + || CPU_SUBTYPE_SH7720 || CPU_SUBTYPE_SH7721) + select FB_CFB_FILLRECT + select FB_CFB_COPYAREA +-- +2.40.1 + diff --git a/queue-4.14/parisc-iosapic.c-fix-sparse-warnings.patch b/queue-4.14/parisc-iosapic.c-fix-sparse-warnings.patch new file mode 100644 index 00000000000..4e917b23bbe --- /dev/null +++ b/queue-4.14/parisc-iosapic.c-fix-sparse-warnings.patch @@ -0,0 +1,50 @@ +From 57d665d8333dcbc9a3d99d1de5648ae1611ad574 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 30 Aug 2023 11:59:55 +0200 +Subject: parisc: iosapic.c: Fix sparse warnings + +From: Helge Deller + +[ Upstream commit 927c6c8aa27c284a799b8c18784e37d3373af908 ] + +Signed-off-by: Helge Deller +Signed-off-by: Sasha Levin +--- + drivers/parisc/iosapic.c | 4 ++-- + drivers/parisc/iosapic_private.h | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/drivers/parisc/iosapic.c b/drivers/parisc/iosapic.c +index eb9137faccf74..4cc08d13b82fa 100644 +--- a/drivers/parisc/iosapic.c ++++ b/drivers/parisc/iosapic.c +@@ -216,9 +216,9 @@ static inline void iosapic_write(void __iomem *iosapic, unsigned int reg, u32 va + + static DEFINE_SPINLOCK(iosapic_lock); + +-static inline void iosapic_eoi(void __iomem *addr, unsigned int data) ++static inline void iosapic_eoi(__le32 __iomem *addr, __le32 data) + { +- __raw_writel(data, addr); ++ __raw_writel((__force u32)data, addr); + } + + /* +diff --git a/drivers/parisc/iosapic_private.h b/drivers/parisc/iosapic_private.h +index 6e05e30a2450a..7a928c03d5201 100644 +--- a/drivers/parisc/iosapic_private.h ++++ b/drivers/parisc/iosapic_private.h +@@ -132,8 +132,8 @@ struct iosapic_irt { + struct vector_info { + struct iosapic_info *iosapic; /* I/O SAPIC this vector is on */ + struct irt_entry *irte; /* IRT entry */ +- u32 __iomem *eoi_addr; /* precalculate EOI reg address */ +- u32 eoi_data; /* IA64: ? PA: swapped txn_data */ ++ __le32 __iomem *eoi_addr; /* precalculate EOI reg address */ ++ __le32 eoi_data; /* IA64: ? PA: swapped txn_data */ + int txn_irq; /* virtual IRQ number for processor */ + ulong txn_addr; /* IA64: id_eid PA: partial HPA */ + u32 txn_data; /* CPU interrupt bit */ +-- +2.40.1 + diff --git a/queue-4.14/parisc-irq-make-irq_stack_union-static-to-avoid-spar.patch b/queue-4.14/parisc-irq-make-irq_stack_union-static-to-avoid-spar.patch new file mode 100644 index 00000000000..305a62dc3ff --- /dev/null +++ b/queue-4.14/parisc-irq-make-irq_stack_union-static-to-avoid-spar.patch @@ -0,0 +1,31 @@ +From 7f92e20c711cb1007b4dc58af67a9b8f6dc89e28 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 31 Aug 2023 22:36:12 +0200 +Subject: parisc: irq: Make irq_stack_union static to avoid sparse warning + +From: Helge Deller + +[ Upstream commit b1bef1388c427cdad7331a9c8eb4ebbbe5b954b0 ] + +Signed-off-by: Helge Deller +Signed-off-by: Sasha Levin +--- + arch/parisc/kernel/irq.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/parisc/kernel/irq.c b/arch/parisc/kernel/irq.c +index c152c30c2d06d..11c1505775f87 100644 +--- a/arch/parisc/kernel/irq.c ++++ b/arch/parisc/kernel/irq.c +@@ -392,7 +392,7 @@ union irq_stack_union { + volatile unsigned int lock[1]; + }; + +-DEFINE_PER_CPU(union irq_stack_union, irq_stack_union) = { ++static DEFINE_PER_CPU(union irq_stack_union, irq_stack_union) = { + .slock = { 1,1,1,1 }, + }; + #endif +-- +2.40.1 + diff --git a/queue-4.14/parisc-sba-fix-compile-warning-wrt-list-of-sba-devic.patch b/queue-4.14/parisc-sba-fix-compile-warning-wrt-list-of-sba-devic.patch new file mode 100644 index 00000000000..6f0d2822dfc --- /dev/null +++ b/queue-4.14/parisc-sba-fix-compile-warning-wrt-list-of-sba-devic.patch @@ -0,0 +1,50 @@ +From 1a089ff778879278155ca8edfeecd9f126b6359c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 30 Aug 2023 08:10:01 +0200 +Subject: parisc: sba: Fix compile warning wrt list of SBA devices + +From: Helge Deller + +[ Upstream commit eb3255ee8f6f4691471a28fbf22db5e8901116cd ] + +Fix this makecheck warning: +drivers/parisc/sba_iommu.c:98:19: warning: symbol 'sba_list' + was not declared. Should it be static? + +Signed-off-by: Helge Deller +Signed-off-by: Sasha Levin +--- + arch/parisc/include/asm/ropes.h | 3 +++ + drivers/char/agp/parisc-agp.c | 2 -- + 2 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/arch/parisc/include/asm/ropes.h b/arch/parisc/include/asm/ropes.h +index 8e51c775c80a6..62399c7ea94a1 100644 +--- a/arch/parisc/include/asm/ropes.h ++++ b/arch/parisc/include/asm/ropes.h +@@ -86,6 +86,9 @@ struct sba_device { + struct ioc ioc[MAX_IOC]; + }; + ++/* list of SBA's in system, see drivers/parisc/sba_iommu.c */ ++extern struct sba_device *sba_list; ++ + #define ASTRO_RUNWAY_PORT 0x582 + #define IKE_MERCED_PORT 0x803 + #define REO_MERCED_PORT 0x804 +diff --git a/drivers/char/agp/parisc-agp.c b/drivers/char/agp/parisc-agp.c +index 1d5510cb6db4e..1962ff624b7c5 100644 +--- a/drivers/char/agp/parisc-agp.c ++++ b/drivers/char/agp/parisc-agp.c +@@ -385,8 +385,6 @@ find_quicksilver(struct device *dev, void *data) + static int __init + parisc_agp_init(void) + { +- extern struct sba_device *sba_list; +- + int err = -1; + struct parisc_device *sba = NULL, *lba = NULL; + struct lba_device *lbadev = NULL; +-- +2.40.1 + diff --git a/queue-4.14/ring-buffer-avoid-softlockup-in-ring_buffer_resize.patch b/queue-4.14/ring-buffer-avoid-softlockup-in-ring_buffer_resize.patch new file mode 100644 index 00000000000..5b3a16d86b1 --- /dev/null +++ b/queue-4.14/ring-buffer-avoid-softlockup-in-ring_buffer_resize.patch @@ -0,0 +1,45 @@ +From 84e2cabdcaa90762bd675c7717be7cd15c285807 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 6 Sep 2023 16:19:30 +0800 +Subject: ring-buffer: Avoid softlockup in ring_buffer_resize() + +From: Zheng Yejian + +[ Upstream commit f6bd2c92488c30ef53b5bd80c52f0a7eee9d545a ] + +When user resize all trace ring buffer through file 'buffer_size_kb', +then in ring_buffer_resize(), kernel allocates buffer pages for each +cpu in a loop. + +If the kernel preemption model is PREEMPT_NONE and there are many cpus +and there are many buffer pages to be allocated, it may not give up cpu +for a long time and finally cause a softlockup. + +To avoid it, call cond_resched() after each cpu buffer allocation. + +Link: https://lore.kernel.org/linux-trace-kernel/20230906081930.3939106-1-zhengyejian1@huawei.com + +Cc: +Signed-off-by: Zheng Yejian +Signed-off-by: Steven Rostedt (Google) +Signed-off-by: Sasha Levin +--- + kernel/trace/ring_buffer.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c +index 1949d7bbe145d..f0d4ff2db2ef0 100644 +--- a/kernel/trace/ring_buffer.c ++++ b/kernel/trace/ring_buffer.c +@@ -1686,6 +1686,8 @@ int ring_buffer_resize(struct ring_buffer *buffer, unsigned long size, + err = -ENOMEM; + goto out_err; + } ++ ++ cond_resched(); + } + + get_online_cpus(); +-- +2.40.1 + diff --git a/queue-4.14/selftests-ftrace-correctly-enable-event-in-instance-.patch b/queue-4.14/selftests-ftrace-correctly-enable-event-in-instance-.patch new file mode 100644 index 00000000000..b6d83b264ea --- /dev/null +++ b/queue-4.14/selftests-ftrace-correctly-enable-event-in-instance-.patch @@ -0,0 +1,51 @@ +From 2b392e47517738f036f464da6bd7174f26fbdbf2 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 26 Jun 2023 08:11:44 +0800 +Subject: selftests/ftrace: Correctly enable event in instance-event.tc + +From: Zheng Yejian + +[ Upstream commit f4e4ada586995b17f828c6d147d1800eb1471450 ] + +Function instance_set() expects to enable event 'sched_switch', so we +should set 1 to its 'enable' file. + +Testcase passed after this patch: + # ./ftracetest test.d/instances/instance-event.tc + === Ftrace unit tests === + [1] Test creation and deletion of trace instances while setting an event + [PASS] + + # of passed: 1 + # of failed: 0 + # of unresolved: 0 + # of untested: 0 + # of unsupported: 0 + # of xfailed: 0 + # of undefined(test bug): 0 + +Signed-off-by: Zheng Yejian +Acked-by: Masami Hiramatsu (Google) +Acked-by: Steven Rostedt (Google) +Signed-off-by: Shuah Khan +Signed-off-by: Sasha Levin +--- + .../testing/selftests/ftrace/test.d/instances/instance-event.tc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/testing/selftests/ftrace/test.d/instances/instance-event.tc b/tools/testing/selftests/ftrace/test.d/instances/instance-event.tc +index d7f48b55df51c..ee11b42014c83 100644 +--- a/tools/testing/selftests/ftrace/test.d/instances/instance-event.tc ++++ b/tools/testing/selftests/ftrace/test.d/instances/instance-event.tc +@@ -43,7 +43,7 @@ instance_read() { + + instance_set() { + while :; do +- echo 1 > foo/events/sched/sched_switch ++ echo 1 > foo/events/sched/sched_switch/enable + done 2> /dev/null + } + +-- +2.40.1 + diff --git a/queue-4.14/series b/queue-4.14/series index 7cd66ac6021..acf31d7cdcc 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -8,3 +8,12 @@ i2c-mux-demux-pinctrl-check-the-return-value-of-devm.patch clk-tegra-fix-error-return-case-for-recalc_rate.patch xtensa-boot-don-t-add-include-dirs.patch xtensa-boot-lib-fix-function-prototypes.patch +parisc-sba-fix-compile-warning-wrt-list-of-sba-devic.patch +parisc-iosapic.c-fix-sparse-warnings.patch +parisc-irq-make-irq_stack_union-static-to-avoid-spar.patch +selftests-ftrace-correctly-enable-event-in-instance-.patch +ring-buffer-avoid-softlockup-in-ring_buffer_resize.patch +ata-libata-eh-do-not-clear-ata_pflag_eh_pending-in-a.patch +fbdev-sh7760fb-depend-on-fb-y.patch +ata-ahci-drop-pointless-vprintk-calls-and-convert-th.patch +ata-libahci-clear-pending-interrupt-status.patch