From 3beca208e3c91610ee19dca544f3b7c0eee4e11a Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Mar 10 2016 01:07:20 +0000 Subject: Linux v4.4.5 - Fix for known arm64 bootup issue --- diff --git a/0001-Test-ata-fix.patch b/0001-Test-ata-fix.patch deleted file mode 100644 index 0ae2cf7..0000000 --- a/0001-Test-ata-fix.patch +++ /dev/null @@ -1,27 +0,0 @@ -From bb4d91481dd2122351866e500b46cff9399f579d Mon Sep 17 00:00:00 2001 -From: Laura Abbott -Date: Thu, 25 Feb 2016 11:40:07 -0800 -Subject: [PATCH] Test ata fix - -Signed-off-by: Laura Abbott ---- - drivers/ata/libahci.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c -index 1f225cc..998c6a8 100644 ---- a/drivers/ata/libahci.c -+++ b/drivers/ata/libahci.c -@@ -1142,8 +1142,7 @@ static void ahci_port_init(struct device *dev, struct ata_port *ap, - - /* mark esata ports */ - tmp = readl(port_mmio + PORT_CMD); -- if ((tmp & PORT_CMD_HPCP) || -- ((tmp & PORT_CMD_ESP) && (hpriv->cap & HOST_CAP_SXS))) -+ if ((tmp & PORT_CMD_ESP) && (hpriv->cap & HOST_CAP_SXS)) - ap->pflags |= ATA_PFLAG_EXTERNAL; - } - --- -2.5.0 - diff --git a/0001-arm64-account-for-sparsemem-section-alignment-when-c.patch b/0001-arm64-account-for-sparsemem-section-alignment-when-c.patch new file mode 100644 index 0000000..78e01de --- /dev/null +++ b/0001-arm64-account-for-sparsemem-section-alignment-when-c.patch @@ -0,0 +1,54 @@ +From b3ffe8a6522dd1f07c181a5f2581142776e2162d Mon Sep 17 00:00:00 2001 +From: Ard Biesheuvel +Date: Tue, 8 Mar 2016 21:09:29 +0700 +Subject: [PATCH] arm64: account for sparsemem section alignment when choosing + vmemmap offset + +Commit dfd55ad85e4a ("arm64: vmemmap: use virtual projection of linear +region") fixed an issue where the struct page array would overflow into the +adjacent virtual memory region if system RAM was placed so high up in +physical memory that its addresses were not representable in the build time +configured virtual address size. + +However, the fix failed to take into account that the vmemmap region needs +to be relatively aligned with respect to the sparsemem section size, so that +a sequence of page structs corresponding with a sparsemem section in the +linear region appears naturally aligned in the vmemmap region. + +So round up vmemmap to sparsemem section size. Since this essentially moves +the projection of the linear region up in memory, also revert the reduction +of the size of the vmemmap region. + +Fixes: dfd55ad85e4a ("arm64: vmemmap: use virtual projection of linear region") +Tested-by: Mark Langsdorf +Signed-off-by: Ard Biesheuvel +--- + arch/arm64/include/asm/pgtable.h | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h +index fc9f7ef..eaa9cab 100644 +--- a/arch/arm64/include/asm/pgtable.h ++++ b/arch/arm64/include/asm/pgtable.h +@@ -40,7 +40,7 @@ + * VMALLOC_END: extends to the available space below vmmemmap, PCI I/O space, + * fixed mappings and modules + */ +-#define VMEMMAP_SIZE ALIGN((1UL << (VA_BITS - PAGE_SHIFT - 1)) * sizeof(struct page), PUD_SIZE) ++#define VMEMMAP_SIZE ALIGN((1UL << (VA_BITS - PAGE_SHIFT)) * sizeof(struct page), PUD_SIZE) + + #ifndef CONFIG_KASAN + #define VMALLOC_START (VA_START) +@@ -52,7 +52,8 @@ + #define VMALLOC_END (PAGE_OFFSET - PUD_SIZE - VMEMMAP_SIZE - SZ_64K) + + #define VMEMMAP_START (VMALLOC_END + SZ_64K) +-#define vmemmap ((struct page *)VMEMMAP_START - (memstart_addr >> PAGE_SHIFT)) ++#define vmemmap ((struct page *)VMEMMAP_START - \ ++ SECTION_ALIGN_DOWN(memstart_addr >> PAGE_SHIFT)) + + #define FIRST_USER_ADDRESS 0UL + +-- +2.5.0 + diff --git a/iommu-fix.patch b/iommu-fix.patch deleted file mode 100644 index 08cdafd..0000000 --- a/iommu-fix.patch +++ /dev/null @@ -1,92 +0,0 @@ -From b91309eedd77374fdecc379942c44f903e2dedff Mon Sep 17 00:00:00 2001 -From: Suravee Suthikulpanit -Date: Tue, 23 Feb 2016 13:03:30 +0100 -Subject: [PATCH] iommu/amd: Fix boot warning when device 00:00.0 is not iommu - covered - -The setup code for the performance counters in the AMD IOMMU driver -tests whether the counters can be written. It tests to setup a counter -for device 00:00.0, which fails on systems where this particular device -is not covered by the IOMMU. - -Fix this by not relying on device 00:00.0 but only on the IOMMU being -present. - -Cc: stable@vger.kernel.org -Signed-off-by: Suravee Suthikulpanit -Signed-off-by: Joerg Roedel ---- - drivers/iommu/amd_iommu_init.c | 34 ++++++++++++++++++++++------------ - 1 file changed, 22 insertions(+), 12 deletions(-) - -diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c -index 013bdff..d06a6d9 100644 ---- a/drivers/iommu/amd_iommu_init.c -+++ b/drivers/iommu/amd_iommu_init.c -@@ -228,6 +228,10 @@ static int amd_iommu_enable_interrupts(void); - static int __init iommu_go_to_state(enum iommu_init_state state); - static void init_device_table_dma(void); - -+static int iommu_pc_get_set_reg_val(struct amd_iommu *iommu, -+ u8 bank, u8 cntr, u8 fxn, -+ u64 *value, bool is_write); -+ - static inline void update_last_devid(u16 devid) - { - if (devid > amd_iommu_last_bdf) -@@ -1142,8 +1146,8 @@ static void init_iommu_perf_ctr(struct amd_iommu *iommu) - amd_iommu_pc_present = true; - - /* Check if the performance counters can be written to */ -- if ((0 != amd_iommu_pc_get_set_reg_val(0, 0, 0, 0, &val, true)) || -- (0 != amd_iommu_pc_get_set_reg_val(0, 0, 0, 0, &val2, false)) || -+ if ((0 != iommu_pc_get_set_reg_val(iommu, 0, 0, 0, &val, true)) || -+ (0 != iommu_pc_get_set_reg_val(iommu, 0, 0, 0, &val2, false)) || - (val != val2)) { - pr_err("AMD-Vi: Unable to write to IOMMU perf counter.\n"); - amd_iommu_pc_present = false; -@@ -2283,22 +2287,15 @@ u8 amd_iommu_pc_get_max_counters(u16 devid) - } - EXPORT_SYMBOL(amd_iommu_pc_get_max_counters); - --int amd_iommu_pc_get_set_reg_val(u16 devid, u8 bank, u8 cntr, u8 fxn, -+static int iommu_pc_get_set_reg_val(struct amd_iommu *iommu, -+ u8 bank, u8 cntr, u8 fxn, - u64 *value, bool is_write) - { -- struct amd_iommu *iommu; - u32 offset; - u32 max_offset_lim; - -- /* Make sure the IOMMU PC resource is available */ -- if (!amd_iommu_pc_present) -- return -ENODEV; -- -- /* Locate the iommu associated with the device ID */ -- iommu = amd_iommu_rlookup_table[devid]; -- - /* Check for valid iommu and pc register indexing */ -- if (WARN_ON((iommu == NULL) || (fxn > 0x28) || (fxn & 7))) -+ if (WARN_ON((fxn > 0x28) || (fxn & 7))) - return -ENODEV; - - offset = (u32)(((0x40|bank) << 12) | (cntr << 8) | fxn); -@@ -2322,3 +2319,16 @@ int amd_iommu_pc_get_set_reg_val(u16 devid, u8 bank, u8 cntr, u8 fxn, - return 0; - } - EXPORT_SYMBOL(amd_iommu_pc_get_set_reg_val); -+ -+int amd_iommu_pc_get_set_reg_val(u16 devid, u8 bank, u8 cntr, u8 fxn, -+ u64 *value, bool is_write) -+{ -+ struct amd_iommu *iommu = amd_iommu_rlookup_table[devid]; -+ -+ /* Make sure the IOMMU PC resource is available */ -+ if (!amd_iommu_pc_present || iommu == NULL) -+ return -ENODEV; -+ -+ return iommu_pc_get_set_reg_val(iommu, bank, cntr, fxn, -+ value, is_write); -+} --- -1.8.4.5 diff --git a/kernel.spec b/kernel.spec index 242636f..4c23883 100644 --- a/kernel.spec +++ b/kernel.spec @@ -52,7 +52,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 4 +%define stable_update 5 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -619,18 +619,15 @@ Patch646: HID-sony-do-not-bail-out-when-the-sixaxis-refuses-th.patch #Known use after free, possibly rhbz 1310579 Patch654: 0001-usb-hub-fix-panic-in-usb_reset_and_verify_device.patch -#rhbz 1310258 -Patch655: iommu-fix.patch - -#rhbz 1310682 -Patch657: 0001-Test-ata-fix.patch - #Mitigates CVE-2013-4312 rhbz 1313428 1313433 Patch659: pipe-limit-the-per-user-amount-of-pages-allocated-in.patch #rhbz 1310252 1313318 Patch660: 0001-drm-i915-Pretend-cursor-is-always-on-for-ILK-style-W.patch +#Fix for known arm64 breakage. No bugzilla becuase proactivity \o/ +Patch661: 0001-arm64-account-for-sparsemem-section-alignment-when-c.patch + # END OF PATCH DEFINITIONS %endif @@ -1314,18 +1311,13 @@ ApplyPatch HID-sony-do-not-bail-out-when-the-sixaxis-refuses-th.patch #Known use after free, possibly rhbz 1310579 ApplyPatch 0001-usb-hub-fix-panic-in-usb_reset_and_verify_device.patch -#rhbz 1310258 -ApplyPatch iommu-fix.patch - -#rhbz 1310682 -ApplyPatch 0001-Test-ata-fix.patch - #Mitigates CVE-2013-4312 rhbz 1313428 1313433 ApplyPatch pipe-limit-the-per-user-amount-of-pages-allocated-in.patch #rhbz 1310252 1313318 ApplyPatch 0001-drm-i915-Pretend-cursor-is-always-on-for-ILK-style-W.patch +ApplyPatch 0001-arm64-account-for-sparsemem-section-alignment-when-c.patch # END OF PATCH APPLICATIONS %endif @@ -2175,6 +2167,10 @@ fi # # %changelog +* Wed Mar 09 2016 Laura Abbott - 4.4.5-200 +- Linux v4.4.5 +- Fix for known arm64 bootup issue + * Fri Mar 04 2016 Laura Abbott - 4.4.4-200 - Require updated XFS utilities diff --git a/sources b/sources index 7da2ff0..8133226 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ 9a78fa2eb6c68ca5a40ed5af08142599 linux-4.4.tar.xz dcbc8fe378a676d5d0dd208cf524e144 perf-man-4.4.tar.gz -07e9b2c5d0daf7fc2a1ee26a52adcbc0 patch-4.4.4.xz +edddb33405ea1ab02b90eb9cecaa43f6 patch-4.4.5.xz