X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=kernel-small_fixes.patch;h=f0584fb5d2bf489cc24ac7eaf952c345766e3c27;hb=42b5c33a9137a17d1bf97dd43ad1ad45de94d3e9;hp=2377438fc68859ba467deab7eab3465c77318965;hpb=b508a2a9d783b262e74713e9af0450e8dbe0b6a4;p=packages%2Fkernel.git diff --git a/kernel-small_fixes.patch b/kernel-small_fixes.patch index 2377438f..f0584fb5 100644 --- a/kernel-small_fixes.patch +++ b/kernel-small_fixes.patch @@ -1,298 +1,117 @@ ---- linux-2.6.32/drivers/infiniband/Kconfig~ 2009-12-05 00:26:03.663774916 +0100 -+++ linux-2.6.32/drivers/infiniband/Kconfig 2009-12-05 00:26:05.914179759 +0100 -@@ -37,7 +37,6 @@ - config INFINIBAND_ADDR_TRANS - bool - depends on INET -- depends on !(INFINIBAND = y && IPV6 = m) - default y - - source "drivers/infiniband/hw/mthca/Kconfig" ---- linux-2.6.33/scripts/mod/modpost.c~ 2010-02-24 19:52:17.000000000 +0100 -+++ linux-2.6.33/scripts/mod/modpost.c 2010-03-07 14:26:47.242168558 +0100 -@@ -15,7 +15,8 @@ - #include - #include - #include "modpost.h" --#include "../../include/generated/autoconf.h" -+// PLD architectures don't use CONFIG_SYMBOL_PREFIX -+//#include "../../include/generated/autoconf.h" - #include "../../include/linux/license.h" - - /* Some toolchains use a `_' prefix for all user symbols. */ - -commit 87b09f1f25cd1e01d7c50bf423c7fe33027d7511 -Author: stephen hemminger -Date: Fri Feb 12 06:58:00 2010 +0000 - - sky2: dont enable PME legacy mode - - This bit is not changed by vendor driver, and should be left alone. - The documentation implies this a debug bit. - 0 = WAKE# only asserted when VMAIN not available - 1 = WAKE# is depend on wake events and independent of VMAIN. - - Signed-off-by: Stephen Hemminger - Signed-off-by: David S. Miller - -diff --git b/drivers/net/sky2.c a/drivers/net/sky2.c -index 2494842..edf37aa 100644 ---- b/drivers/net/sky2.c -+++ a/drivers/net/sky2.c -@@ -733,6 +733,7 @@ static void sky2_wol_init(struct sky2_port *sky2) - unsigned port = sky2->port; - enum flow_control save_mode; - u16 ctrl; -+ u32 reg1; - - /* Bring hardware out of reset */ - sky2_write16(hw, B0_CTST, CS_RST_CLR); -@@ -786,6 +787,11 @@ static void sky2_wol_init(struct sky2_port *sky2) - /* Disable PiG firmware */ - sky2_write16(hw, B0_CTST, Y2_HW_WOL_OFF); - -+ /* Turn on legacy PCI-Express PME mode */ -+ reg1 = sky2_pci_read32(hw, PCI_DEV_REG1); -+ reg1 |= PCI_Y2_PME_LEGACY; -+ sky2_pci_write32(hw, PCI_DEV_REG1, reg1); -+ - /* block receiver */ - sky2_write8(hw, SK_REG(port, RX_GMF_CTRL_T), GMF_RST_SET); +; https://lkml.org/lkml/2019/7/10/244 +diff -ur linux-5.3/drivers/scsi/aacraid.org/aacraid.h linux-5.3/drivers/scsi/aacraid/aacraid.h +--- linux-5.3/drivers/scsi/aacraid.org/aacraid.h 2019-11-01 22:42:37.011469816 +0100 ++++ linux-5.3/drivers/scsi/aacraid/aacraid.h 2019-11-04 09:29:51.321486211 +0100 +@@ -2740,17 +2740,6 @@ + int aac_rx_deliver_producer(struct fib * fib); + void aac_reinit_aif(struct aac_dev *aac, unsigned int index); + +-static inline int aac_is_src(struct aac_dev *dev) +-{ +- u16 device = dev->pdev->device; +- +- if (device == PMC_DEVICE_S6 || +- device == PMC_DEVICE_S7 || +- device == PMC_DEVICE_S8) +- return 1; +- return 0; +-} +- + static inline int aac_supports_2T(struct aac_dev *dev) + { + return (dev->adapter_info.options & AAC_OPT_NEW_COMM_64); +diff -ur linux-5.3/drivers/scsi/aacraid.org/comminit.c linux-5.3/drivers/scsi/aacraid/comminit.c +--- linux-5.3/drivers/scsi/aacraid.org/comminit.c 2019-11-01 22:42:37.014803249 +0100 ++++ linux-5.3/drivers/scsi/aacraid/comminit.c 2019-11-04 09:29:51.321486211 +0100 +@@ -41,8 +41,11 @@ + { + u32 status = 0; + +- if (aac_is_src(dev)) ++ if (dev->pdev->device == PMC_DEVICE_S6 || ++ dev->pdev->device == PMC_DEVICE_S7 || ++ dev->pdev->device == PMC_DEVICE_S8) { + status = src_readl(dev, MUnit.OMR); ++ } + return (status & AAC_INT_MODE_MSIX); } -On Sat, 2 Jul 2011, Andi Kleen wrote: - -> > The problem is that blk_peek_request() calls scsi_prep_fn(), which -> > does this: -> > -> > struct scsi_device *sdev = q->queuedata; -> > int ret = BLKPREP_KILL; -> > -> > if (req->cmd_type == REQ_TYPE_BLOCK_PC) -> > ret = scsi_setup_blk_pc_cmnd(sdev, req); -> > return scsi_prep_return(q, req, ret); -> > -> > It doesn't check to see if sdev is NULL, nor does -> > scsi_setup_blk_pc_cmnd(). That accounts for this error: -> -> I actually added a NULL check in scsi_setup_blk_pc_cmnd early on, -> but that just caused RCU CPU stalls afterwards and then eventually -> a hung system. - -The RCU problem is likely to be a separate issue. It might even be a -result of the use-after-free problem with the elevator. - -At any rate, it's clear that the crash in the refcounting log you -posted occurred because scsi_setup_blk_pc_cmnd() called -scsi_prep_state_check(), which tried to dereference the NULL pointer. - -Would you like to try this patch to see if it fixes the problem? As I -said before, I'm not certain it's the best thing to do, but it worked -on my system. - -Alan Stern - - - - -Index: usb-3.0/drivers/scsi/scsi_lib.c -=================================================================== ---- usb-3.0.orig/drivers/scsi/scsi_lib.c -+++ usb-3.0/drivers/scsi/scsi_lib.c -@@ -1247,6 +1247,8 @@ int scsi_prep_fn(struct request_queue *q - struct scsi_device *sdev = q->queuedata; - int ret = BLKPREP_KILL; -+ if (!sdev) -+ return ret; - if (req->cmd_type == REQ_TYPE_BLOCK_PC) - ret = scsi_setup_blk_pc_cmnd(sdev, req); - return scsi_prep_return(q, req, ret); -Index: usb-3.0/drivers/scsi/scsi_sysfs.c -=================================================================== ---- usb-3.0.orig/drivers/scsi/scsi_sysfs.c -+++ usb-3.0/drivers/scsi/scsi_sysfs.c -@@ -322,6 +322,8 @@ static void scsi_device_dev_release_user - kfree(evt); +@@ -349,7 +352,8 @@ + /* FIB should be freed only after getting the response from the F/W */ + if (status != -ERESTARTSYS) + aac_fib_free(fibctx); +- if (aac_is_src(dev) && ++ if ((dev->pdev->device == PMC_DEVICE_S7 || ++ dev->pdev->device == PMC_DEVICE_S8) && + dev->msi_enabled) + aac_set_intx_mode(dev); + return status; +@@ -610,7 +614,8 @@ + dev->max_fib_size = status[1] & 0xFFE0; + host->sg_tablesize = status[2] >> 16; + dev->sg_tablesize = status[2] & 0xFFFF; +- if (aac_is_src(dev)) { ++ if (dev->pdev->device == PMC_DEVICE_S7 || ++ dev->pdev->device == PMC_DEVICE_S8) { + if (host->can_queue > (status[3] >> 16) - + AAC_NUM_MGT_FIB) + host->can_queue = (status[3] >> 16) - +@@ -629,7 +634,9 @@ + pr_warn("numacb=%d ignored\n", numacb); } -+ /* Freeing the queue signals to block that we're done */ -+ scsi_free_queue(sdev->request_queue); - blk_put_queue(sdev->request_queue); - /* NULL queue means the device can't be used */ - sdev->request_queue = NULL; -@@ -936,8 +938,6 @@ void __scsi_remove_device(struct scsi_de - /* cause the request function to reject all I/O requests */ - sdev->request_queue->queuedata = NULL; - -- /* Freeing the queue signals to block that we're done */ -- scsi_free_queue(sdev->request_queue); - put_device(dev); - } - - - --- -To unsubscribe from this list: send the line "unsubscribe linux-kernel" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html -Please read the FAQ at http://www.tux.org/lkml/ ---- linux-3.0/scripts/kconfig/lxdialog/check-lxdialog.sh~ 2011-07-22 04:17:23.000000000 +0200 -+++ linux-3.0/scripts/kconfig/lxdialog/check-lxdialog.sh 2011-08-25 21:26:04.799150642 +0200 -@@ -9,6 +9,12 @@ - $cc -print-file-name=lib${lib}.${ext} | grep -q / - if [ $? -eq 0 ]; then - echo "-l${lib}" -+ for libt in tinfow tinfo ; do -+ $cc -print-file-name=lib${libt}.${ext} | grep -q / -+ if [ $? -eq 0 ]; then -+ echo "-l${libt}" -+ fi -+ done - exit - fi - done - - - -commit 745718132c3c7cac98a622b610e239dcd5217f71 -Author: Hannes Reinecke -Date: Wed Nov 9 08:39:24 2011 +0100 - - [SCSI] Silencing 'killing requests for dead queue' - - When we tear down a device we try to flush all outstanding - commands in scsi_free_queue(). However the check in - scsi_request_fn() is imperfect as it only signals that - we _might start_ aborting commands, not that we've actually - aborted some. - So move the printk inside the scsi_kill_request function, - this will also give us a hint about which commands are aborted. - - Signed-off-by: Hannes Reinecke - Signed-off-by: James Bottomley - -diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c -index 06bc265..f85cfa6 100644 ---- a/drivers/scsi/scsi_lib.c -+++ b/drivers/scsi/scsi_lib.c -@@ -1409,6 +1409,8 @@ static void scsi_kill_request(struct request *req, struct request_queue *q) - - blk_start_request(req); - -+ scmd_printk(KERN_INFO, cmd, "killing request\n"); -+ - sdev = cmd->device; - starget = scsi_target(sdev); - shost = sdev->host; -@@ -1490,7 +1492,6 @@ static void scsi_request_fn(struct request_queue *q) - struct request *req; - - if (!sdev) { -- printk("scsi: killing requests for dead queue\n"); - while ((req = blk_peek_request(q)) != NULL) - scsi_kill_request(req, q); - return; ->From 4467601416e23740fc940c31b1fffacbcb69b4a0 Mon Sep 17 00:00:00 2001 -From: Corey Minyard -Date: Mon, 21 Nov 2011 14:26:20 -0600 -Subject: [PATCH] ipmi_watchdog: Restore settings when BMC reset - -If the BMC gets reset, it will return 0x80 response errors. In this case, -it is probably a good idea to restore the IPMI settings. ---- - drivers/char/ipmi/ipmi_watchdog.c | 41 ++++++++++++++++++++++++++++++++++-- - 1 files changed, 38 insertions(+), 3 deletions(-) - -diff --git a/drivers/char/ipmi/ipmi_watchdog.c b/drivers/char/ipmi/ipmi_watchdog.c -index c2917ffa..34767a6 100644 ---- a/drivers/char/ipmi/ipmi_watchdog.c -+++ b/drivers/char/ipmi/ipmi_watchdog.c -@@ -139,6 +139,8 @@ - #define IPMI_WDOG_SET_TIMER 0x24 - #define IPMI_WDOG_GET_TIMER 0x25 - -+#define IPMI_WDOG_TIMER_NOT_INIT_RESP 0x80 -+ - /* These are here until the real ones get into the watchdog.h interface. */ - #ifndef WDIOC_GETTIMEOUT - #define WDIOC_GETTIMEOUT _IOW(WATCHDOG_IOCTL_BASE, 20, int) -@@ -596,6 +598,7 @@ static int ipmi_heartbeat(void) - struct kernel_ipmi_msg msg; - int rv; - struct ipmi_system_interface_addr addr; -+ int timeout_retries = 0; - - if (ipmi_ignore_heartbeat) - return 0; -@@ -616,6 +619,7 @@ static int ipmi_heartbeat(void) - - mutex_lock(&heartbeat_lock); - -+restart: - atomic_set(&heartbeat_tofree, 2); - +- if (aac_is_src(dev)) ++ if (dev->pdev->device == PMC_DEVICE_S6 || ++ dev->pdev->device == PMC_DEVICE_S7 || ++ dev->pdev->device == PMC_DEVICE_S8) + aac_define_int_mode(dev); /* -@@ -653,7 +657,33 @@ static int ipmi_heartbeat(void) - /* Wait for the heartbeat to be sent. */ - wait_for_completion(&heartbeat_wait); - -- if (heartbeat_recv_msg.msg.data[0] != 0) { -+ if (heartbeat_recv_msg.msg.data[0] == IPMI_WDOG_TIMER_NOT_INIT_RESP) { -+ timeout_retries++; -+ if (timeout_retries > 3) { -+ printk(KERN_ERR PFX ": Unable to restore the IPMI" -+ " watchdog's settings, giving up.\n"); -+ rv = -EIO; -+ goto out_unlock; -+ } -+ -+ /* -+ * The timer was not initialized, that means the BMC was -+ * probably reset and lost the watchdog information. Attempt -+ * to restore the timer's info. Note that we still hold -+ * the heartbeat lock, to keep a heartbeat from happening -+ * in this process, so must say no heartbeat to avoid a -+ * deadlock on this mutex. -+ */ -+ rv = ipmi_set_timeout(IPMI_SET_TIMEOUT_NO_HB); -+ if (rv) { -+ printk(KERN_ERR PFX ": Unable to send the command to" -+ " set the watchdog's settings, giving up.\n"); -+ goto out_unlock; -+ } -+ -+ /* We might need a new heartbeat, so do it now */ -+ goto restart; -+ } else if (heartbeat_recv_msg.msg.data[0] != 0) { - /* - * Got an error in the heartbeat response. It was already - * reported in ipmi_wdog_msg_handler, but we should return -@@ -662,6 +692,7 @@ static int ipmi_heartbeat(void) - rv = -EINVAL; - } - -+out_unlock: - mutex_unlock(&heartbeat_lock); - - return rv; -@@ -922,11 +953,15 @@ static struct miscdevice ipmi_wdog_miscdev = { - static void ipmi_wdog_msg_handler(struct ipmi_recv_msg *msg, - void *handler_data) + * Ok now init the communication subsystem +diff -ur linux-5.3/drivers/scsi/aacraid.org/commsup.c linux-5.3/drivers/scsi/aacraid/commsup.c +--- linux-5.3/drivers/scsi/aacraid.org/commsup.c 2019-11-01 22:42:37.014803249 +0100 ++++ linux-5.3/drivers/scsi/aacraid/commsup.c 2019-11-04 09:29:51.321486211 +0100 +@@ -2593,7 +2593,9 @@ { -- if (msg->msg.data[0] != 0) { -+ if (msg->msg.cmd == IPMI_WDOG_RESET_TIMER && -+ msg->msg.data[0] == IPMI_WDOG_TIMER_NOT_INIT_RESP) -+ printk(KERN_INFO PFX "response: The IPMI controller appears" -+ " to have been reset, will attempt to reinitialize" -+ " the watchdog timer\n"); -+ else if (msg->msg.data[0] != 0) - printk(KERN_ERR PFX "response: Error %x on cmd %x\n", - msg->msg.data[0], - msg->msg.cmd); -- } - - ipmi_free_recv_msg(msg); - } --- -1.7.4.1 - + int i; + +- if (aac_is_src(dev)) { ++ if (dev->pdev->device == PMC_DEVICE_S6 || ++ dev->pdev->device == PMC_DEVICE_S7 || ++ dev->pdev->device == PMC_DEVICE_S8) { + if (dev->max_msix > 1) { + for (i = 0; i < dev->max_msix; i++) + free_irq(pci_irq_vector(dev->pdev, i), +diff -ur linux-5.3/drivers/scsi/aacraid.org/linit.c linux-5.3/drivers/scsi/aacraid/linit.c +--- linux-5.3/drivers/scsi/aacraid.org/linit.c 2019-11-01 22:42:37.011469816 +0100 ++++ linux-5.3/drivers/scsi/aacraid/linit.c 2019-11-04 09:29:51.321486211 +0100 +@@ -1567,8 +1567,9 @@ + aac_send_shutdown(aac); + + aac_adapter_disable_int(aac); +- +- if (aac_is_src(aac)) { ++ if (aac->pdev->device == PMC_DEVICE_S6 || ++ aac->pdev->device == PMC_DEVICE_S7 || ++ aac->pdev->device == PMC_DEVICE_S8) { + if (aac->max_msix > 1) { + for (i = 0; i < aac->max_msix; i++) { + free_irq(pci_irq_vector(aac->pdev, i), +@@ -1858,7 +1859,8 @@ + aac_adapter_enable_int(dev); + + +- if (aac_is_src(dev)) ++ if (dev->pdev->device == PMC_DEVICE_S7 || ++ dev->pdev->device == PMC_DEVICE_S8) + aac_define_int_mode(dev); + + if (dev->msi_enabled) + +--- linux-5.7/scripts/ld-version.sh~ 2020-06-01 01:49:15.000000000 +0200 ++++ linux-5.7/scripts/ld-version.sh 2020-06-02 08:28:48.303207264 +0200 +@@ -1,4 +1,4 @@ +-#!/usr/bin/awk -f ++#!/bin/awk -f + # SPDX-License-Identifier: GPL-2.0 + # extract linker version number from stdin and turn into single number + {