X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=kernel-small_fixes.patch;h=dc2c31ff9b1c67f8176b7c034942e6a78f7a9b5b;hb=ecfb01fb9899ec9dc82a19355c0c02aa2994c9f9;hp=a59aaafed08ded01680a955e11a01ac386034fbe;hpb=092a4f51e06fa6d8ecb15f769d064c286875fbf8;p=packages%2Fkernel.git diff --git a/kernel-small_fixes.patch b/kernel-small_fixes.patch index a59aaafe..dc2c31ff 100644 --- a/kernel-small_fixes.patch +++ b/kernel-small_fixes.patch @@ -1,219 +1,109 @@ ---- 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. */ - ---- 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 - -diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c -index 7a0c800..ec5ebbb 100644 ---- a/drivers/net/ethernet/realtek/r8169.c -+++ b/drivers/net/ethernet/realtek/r8169.c -@@ -6927,6 +6927,14 @@ rtl_init_one(struct pci_dev *pdev, const - for (i = 0; i < ETH_ALEN; i++) - dev->dev_addr[i] = RTL_R8(MAC0 + i); - -+ if (!is_valid_ether_addr(dev->dev_addr)) { -+ /* Report it and use a random ethernet address instead */ -+ netdev_err(dev, "Invalid MAC address: %pM\n", dev->dev_addr); -+ random_ether_addr(dev->dev_addr); -+ netdev_info(dev, "Using random MAC address: %pM\n", -+ dev->dev_addr); -+ } -+ - SET_ETHTOOL_OPS(dev, &rtl8169_ethtool_ops); - dev->watchdog_timeo = RTL8169_TX_TIMEOUT; - -commit 03bbcb2e7e292838bb0244f5a7816d194c911d62 -Author: Neil Horman -Date: Tue Apr 16 16:38:32 2013 -0400 - - iommu/vt-d: add quirk for broken interrupt remapping on 55XX chipsets - - A few years back intel published a spec update: - http://www.intel.com/content/dam/doc/specification-update/5520-and-5500-chipset-ioh-specification-update.pdf - - For the 5520 and 5500 chipsets which contained an errata (specificially errata - 53), which noted that these chipsets can't properly do interrupt remapping, and - as a result the recommend that interrupt remapping be disabled in bios. While - many vendors have a bios update to do exactly that, not all do, and of course - not all users update their bios to a level that corrects the problem. As a - result, occasionally interrupts can arrive at a cpu even after affinity for that - interrupt has be moved, leading to lost or spurrious interrupts (usually - characterized by the message: - kernel: do_IRQ: 7.71 No irq handler for vector (irq -1) - - There have been several incidents recently of people seeing this error, and - investigation has shown that they have system for which their BIOS level is such - that this feature was not properly turned off. As such, it would be good to - give them a reminder that their systems are vulnurable to this problem. For - details of those that reported the problem, please see: - https://bugzilla.redhat.com/show_bug.cgi?id=887006 - - [ Joerg: Removed CONFIG_IRQ_REMAP ifdef from early-quirks.c ] - - Signed-off-by: Neil Horman - CC: Prarit Bhargava - CC: Don Zickus - CC: Don Dutile - CC: Bjorn Helgaas - CC: Asit Mallick - CC: David Woodhouse - CC: linux-pci@vger.kernel.org - CC: Joerg Roedel - CC: Konrad Rzeszutek Wilk - CC: Arkadiusz Miśkiewicz - Signed-off-by: Joerg Roedel - -diff --git a/arch/x86/include/asm/irq_remapping.h b/arch/x86/include/asm/irq_remapping.h -index 95fd352..aca6aa2 100644 ---- a/arch/x86/include/asm/irq_remapping.h -+++ b/arch/x86/include/asm/irq_remapping.h -@@ -28,6 +28,7 @@ - - extern void setup_irq_remapping_ops(void); - extern int irq_remapping_supported(void); -+extern void set_irq_remapping_broken(void); - extern int irq_remapping_prepare(void); - extern int irq_remapping_enable(void); - extern void irq_remapping_disable(void); -@@ -54,6 +55,7 @@ void irq_remap_modify_chip_defaults(struct irq_chip *chip); - - static inline void setup_irq_remapping_ops(void) { } - static inline int irq_remapping_supported(void) { return 0; } -+static inline void set_irq_remapping_broken(void) { } - static inline int irq_remapping_prepare(void) { return -ENODEV; } - static inline int irq_remapping_enable(void) { return -ENODEV; } - static inline void irq_remapping_disable(void) { } -diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c -index 3755ef4..94ab6b9 100644 ---- a/arch/x86/kernel/early-quirks.c -+++ b/arch/x86/kernel/early-quirks.c -@@ -18,6 +18,7 @@ - #include - #include - #include -+#include - - static void __init fix_hypertransport_config(int num, int slot, int func) +; 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) { -@@ -192,6 +193,21 @@ static void __init ati_bugs_contd(int num, int slot, int func) - } - #endif - -+static void __init intel_remapping_check(int num, int slot, int func) -+{ -+ u8 revision; -+ -+ revision = read_pci_config_byte(num, slot, func, PCI_REVISION_ID); -+ -+ /* -+ * Revision 0x13 of this chipset supports irq remapping -+ * but has an erratum that breaks its behavior, flag it as such -+ */ -+ if (revision == 0x13) -+ set_irq_remapping_broken(); -+ -+} -+ - #define QFLAG_APPLY_ONCE 0x1 - #define QFLAG_APPLIED 0x2 - #define QFLAG_DONE (QFLAG_APPLY_ONCE|QFLAG_APPLIED) -@@ -221,6 +237,10 @@ static struct chipset early_qrk[] __initdata = { - PCI_CLASS_SERIAL_SMBUS, PCI_ANY_ID, 0, ati_bugs }, - { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SBX00_SMBUS, - PCI_CLASS_SERIAL_SMBUS, PCI_ANY_ID, 0, ati_bugs_contd }, -+ { PCI_VENDOR_ID_INTEL, 0x3403, PCI_CLASS_BRIDGE_HOST, -+ PCI_BASE_CLASS_BRIDGE, 0, intel_remapping_check }, -+ { PCI_VENDOR_ID_INTEL, 0x3406, PCI_CLASS_BRIDGE_HOST, -+ PCI_BASE_CLASS_BRIDGE, 0, intel_remapping_check }, - {} - }; - -diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c -index f3b8f23..5b19b2d 100644 ---- a/drivers/iommu/intel_irq_remapping.c -+++ b/drivers/iommu/intel_irq_remapping.c -@@ -524,6 +524,16 @@ static int __init intel_irq_remapping_supported(void) + 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 (disable_irq_remap) - return 0; -+ if (irq_remap_broken) { -+ WARN_TAINT(1, TAINT_FIRMWARE_WORKAROUND, -+ "This system BIOS has enabled interrupt remapping\n" -+ "on a chipset that contains an erratum making that\n" -+ "feature unstable. To maintain system stability\n" -+ "interrupt remapping is being disabled. Please\n" -+ "contact your BIOS vendor for an update\n"); -+ disable_irq_remap = 1; -+ return 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); + } - - if (!dmar_ir_support()) - return 0; -diff --git a/drivers/iommu/irq_remapping.c b/drivers/iommu/irq_remapping.c -index d56f8c1..3c11043 100644 ---- a/drivers/iommu/irq_remapping.c -+++ b/drivers/iommu/irq_remapping.c -@@ -19,6 +19,7 @@ - int irq_remapping_enabled; - - int disable_irq_remap; -+int irq_remap_broken; - int disable_sourceid_checking; - int no_x2apic_optout; - -@@ -211,6 +212,11 @@ void __init setup_irq_remapping_ops(void) - #endif + return (status & AAC_INT_MODE_MSIX); } -+void set_irq_remapping_broken(void) -+{ -+ irq_remap_broken = 1; -+} -+ - int irq_remapping_supported(void) +@@ -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); + } + +- 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); + /* + * 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 (disable_irq_remap) -diff --git a/drivers/iommu/irq_remapping.h b/drivers/iommu/irq_remapping.h -index ecb6376..90c4dae 100644 ---- a/drivers/iommu/irq_remapping.h -+++ b/drivers/iommu/irq_remapping.h -@@ -32,6 +32,7 @@ struct pci_dev; - struct msi_msg; - - extern int disable_irq_remap; -+extern int irq_remap_broken; - extern int disable_sourceid_checking; - extern int no_x2apic_optout; - extern int irq_remapping_enabled; -@@ -89,6 +90,7 @@ extern struct irq_remap_ops amd_iommu_irq_ops; - - #define irq_remapping_enabled 0 - #define disable_irq_remap 1 -+#define irq_remap_broken 0 - - #endif /* CONFIG_IRQ_REMAP */ - + 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) +