Chapter 28. Hardware Enablement

Primary bond interface no longer takes over active interfaces that did not fail

The primary_reselect=failure bond parameter previously worked incorrectly. The primary interface was always taking over even if others did not fail. With this update, the parameter works as expected and the primary bond interface only takes over if the current non-primary active interface fails. (BZ#1301451)

Memory corruption is prevented on a failed updatepp operation on the little-endian variant of IBM Power Systems

Previously, a failed updatepp operation on the little-endian variant of IBM Power Systems sometimes caused a wrong hash value to be used for the next hash insert operation in the page table. This could cause an update hash page table entry (PTE) operation or an invalidate hash PTE operation to be missed, potentially resulting in memory corruption. With this update, the hash value is always recalculated after a failed updatepp operation, which prevents the potential memory corruption. (BZ#1264920)

Removing a USB device no longer causes a race condition

Previously, removing a USB device caused a problem in synchronization, which could lead to a race condition. Consequently, the memory became corrupted, which caused the USB host controller to fail. With this update, the timer is initialized early enough, which prevents the possibility of a race condition, and the USB host controller no longer fails. (BZ#1290202)

The kernel now boots on AMD Turion II systems

Previously, because of a livelock in the tick broadcast code, AMD Turion II systems in some cases locked up and became unresponsive during boot. With this update, the livelock is fixed, and the kernel now boots more reliably on AMD Turion II systems. (BZ#1265283)

Real-time systems with many CPUs no longer have large latencies due to run-queue lock contention

Previously, on real-time systems, multiple CPUs tried to take an rq lock, which resulted in lock contention and latency. The latency was multiplied by the number of CPUs, which caused the systems with many CPUs to have large latencies. With this update, systems with more than 32 cores use the push approach rather than pull, which prevents long lists of CPUs in critical areas. As a result, real-time systems with many CPUs no longer have large latencies due to run-queue lock contention. (BZ#1209987)

The kernel no longer crashes at boot when enabling multi-queue support with NVM Express device driver

Due to a bug in the core block device code, the kernel in some cases terminated unexpectedly at boot, when enabling multi-queue support on the Nonvolatile Memory Express (NVMe) device driver. The problem was observed with the nvme driver, but other block devices were also potentially affected. With this update, this bug has been fixed, and the kernel no longer crashes in the described circumstances. (BZ#1303255)

The CPU frequency now reaches the requested value

Previously, the CPU frequency values were rounded incorrectly by the intel_pstate driver. Consequently, the CPU frequency was lower than the user requested. With this update, the rounding errors have been fixed, and the CPU frequency now reaches the requested value. (BZ#1279617)

Real-time kernel scheduling code for FCoE code has been fixed

The real-time kernel's Fibre Channel over Ethernet (FCoE) driver was changed to use the get_cpu_light() and put_cpu_light() functions, rather than the more common get_cpu() and put_cpu() functions. However, one occurrence of get_cpu() was not changed to get_cpu_light(). Consequently, preemption was disabled, and the BUG: scheduling while atomic bug occured in the FCoE code. With this update, the code has been fixed and the bug no longer occurs. (BZ#1258295)

The performance of IBM Power Systems is no longer decreased by NUMA nodes not being reported for PCI adapters

Previously, due to a regression, the Non-Uniform Memory Access (NUMA) node was not reported for PCI adapters. This caused significant decrease in the performance of every IBM Power System deployed with Red Hat Enterprise Linux 7. With this update, the regression has been fixed, and the system performance is no longer decreased in this situation. (BZ#1273978)

The system no longer crashes while setting up the DMA transfer

Due to the inconsistencies in the page size of Input/Output Memory Management Unit (IOMMU), the Non-volatile Memory Express (NVMe) device, and the kernel, the BUG_ON signal previously occurred in the nvme_setup_prps() function. This could lead to an unexpected termination of the system while setting up the Direct Memory Access (DMA) transfer. With this update, the default NVMe page size is set to 4 kilobytes, and the system crash no longer occurs. (BZ#1245140)

Kernel no longer hangs during hot-unplug

Due to retry-able command errors, the NVMe driver previously leaked I/O descriptors and DMA mappings. As a consequence, the kernel could become unresponsive during the hot-unplug operation if a drive was removed. This update fixes the driver memory leak on command retries, and the kernel no longer hangs in this situation. (BZ#1271860)

Disabling the Large Receive Offload (LRO) flag now propagates correctly

Previously, disabling the Large Receive Offload (LRO) flag was not propagated downwards from above devices in vlan and bond hierarchy. Consequently, the flow of traffic broke. With this update, the problem has been fixed and disabling of LRO flags now propagates correctly. (BZ#1266578)

Switching P-states on Intel Xeon v5 platforms now succeeds

Previously, on Intel Xeon v5 platforms, the processor frequency was always tied to the highest possible frequency. As a consequence, switching P-states on these client platforms failed. This update sets the idle frequency, busy frequency, and processor frequency values by determining the range and adjusting the minimum and maximum percent limits values. As a result, switching P-states on these client platforms now succeeds. (BZ#1264990)

The cpuscaling test no longer fails

Previously, the cpuscaling test of the Red Hat Hardware Certification Test Suite incorrectly failed due to a number-rounding bug in the intel-pstate driver. This bug has been fixed and the cpuscaling test now passes on sufficiently powerful hardware. (BZ#1263866)

The genwqe driver can allocate memory during memory pressure

The genwqe device driver was previously using the GFP_ATOMIC flag for allocating consecutive memory pages from the kernel's atomic memory pool - even in non-atomic situations. This could lead to allocation failures during memory pressure. With this update, the genwqe driver's memory allocations use the GFP_KERNEL flag, and the driver can allocate memory even during memory pressure situations. (BZ#1270244)

The console no longer hangs when disabling CPU

Previously, when disabling a CPU using the CPU hotplug interface in the real-time kernel, the hotplug lock and the console semaphore could be acquired in an incorrect order. This could lead to a deadlock causing the system console to become unresponsive. With this update, the locks are acquired in the correct order, and console no longer hangs. (BZ#1269647)

LRO is now disabled by default in the ixgbe driver

Because Large Receive Offload (LRO) is incompatible with forwarding and bridging and can cause performance problems and instability, it is now disabled by default in the ixgbe driver.
To enable LRO:
# ethtool -K ethX lro on
Replace ethX with the name of the interface. (BZ#1266948)

The nx842 co-processor for IBM Power Systems no longer provides corrupted data

Previously, the nx842 co-processor for IBM Power Systems could in some circumstances provided invalid data. This was caused by a data corruption bug that occured during uncompression. With this update, all compression and uncompression calls to the nx842 co-processor contain a cyclic redundancy check (CRC) flag. This forces all compression and uncompression operations to check data integrity and prevents the co-processor from providing corrupted data. (BZ#1264905)

The system no longer crashes when calling the mlx4_en_recover_from_oom() function

Previously, when the mlx4_en_recover_from_oom() function was invoked under heavy TCP stream by the mlx4_en drive, the operating system terminated unexpectedly. This update fixes the bug, and the system no longer crashes in this scenario. (BZ#1258136)

iw displays regulatory information correctly

Previously, the iw utility did not correctly display the regulatory country after it was set with the iw reg set command. This update adjusts the iw code to match the Red Hat Enterprise Linux wireless code more closely. As a result, iw displays the regulatory country information as expected. (BZ#1324096)

i40e no longer issues warn_slowpath warnings during boot

Previously, the i40e driver was issuing warn_slowpath warnings during a ring size change because the code was cloning the rx_ring struct but not zeroing out the pointers before allocating new memory. With this update, the bug is fixed, and the warnings are no longer shown. (BZ#1272833)

The netprio_cgroups module is now mounted at boot

Previously, systemd mounted the /sys/fs/cgroup/ directory as read-only, which prevented mounting of the /sys/fs/cgroup/net_prio/ directory during the initial system setup. Consequently, the netprio_cgroups module was not mounted at boot. With this update, this problem has been fixed, and the netprio_cgroups module is now mounted at boot. (BZ#1262204)

Setting up bonding with qlcnic no longer fails

Prior to this update, certain bonding modes, such as balance-tlb or balance-alb, set a MAC address that was not properly stored. This MAC address was not restored when tearing down the bond, leaving a duplicate MAC in place. Consequently, re-establishing a bond failed, because the original MAC address was not present. This update improves the code to properly restore the MAC addresses when the bonding is taken down. As a result, bonding with qlcnic devices works as expected. (BZ#1265058)