Skip to content

Conversation

@PlaidCat
Copy link
Collaborator

Update process (This kernel CentOS base for 6.12.0-55)

  • Kernel History Rebuild Process for all src.rpms hosted by RESF
  • Create rlc-10/6.12.0-55.X.1.el10_0 branch
  • Check if any maintained code is included in the new el release.
  • Cherry-pick all code from previous branch into new branch (skipping unneeded code)
    • Fix conflicts as they arise
  • Build and Test

Removed Commits

None

Rebuild Log

[jmaple@devbox kernel-src-tree-rolling]$ cat ciq/ciq_backports/kernel-6.12.0-55.43.1.el10_0/rebuild.details.txt
Rebuild_History BUILDABLE
Rebuilding Kernel from rpm changelog with Fuzz Limit: 87.50%
Number of commits in upstream range v4.18~1..kernel-mainline: 567757
Number of commits in rpm: 211
Number of commits matched with upstream: 206 (97.63%)
Number of commits in upstream but not in rpm: 567552
Number of commits NOT found in upstream: 5 (2.37%)

Rebuilding Kernel on Branch rocky10_0_rebuild_kernel-6.12.0-55.43.1.el10_0 for kernel-6.12.0-55.43.1.el10_0
Clean Cherry Picks: 188 (91.26%)
Empty Cherry Picks: 17 (8.25%)
_______________________________

__EMPTY COMMITS__________________________
914639464b760a4ec659a46cc2de9a2fdc4eff5a ice: Add in/out PTP pin delays
f003075227864344c14f53302c28acd0174d9225 ice: Implement PTP support for E830 devices
905d1a220e8db4aaf0ccc5cb9f733ac2e5989386 ice: Add E830 checksum offload support
1ad466706671436994ec7e71305f44692fed989a x86/cpufeatures: Add X86_FEATURE_AMD_HETEROGENEOUS_CORES
549435aab49ae83d60a08795de6cf0e866f3b2ec x86/bugs: Move the X86_FEATURE_USE_IBPB check into callers
a48dc42614cad39fac1ef55d690847fd07f0e3c6 x86/mm: Remove X86_FEATURE_USE_IBPB checks in cond_mitigation()
80dacb080461edfc1d854721ee6933a4cfa3b602 x86/bugs: Use a static branch to guard IBPB on vCPU switch
8c4f28cd81fe86033918eec69d5280b532c05842 KVM: nVMX: Always use IBPB to properly virtualize IBRS
8f64eee70cdd3bb8c3ec7d30f0d1f52922aaef7c x86/bugs: Remove X86_FEATURE_USE_IBPB
13235d6d50bba99931c4392c0f813cfae0de3eac x86/bugs: Rename entry_ibpb() to write_ibpb()
b1b19cfcf4656c75088dc06b7499f493e0dec3e5 x86/bugs: Fix RSB clearing in indirect_branch_prediction_barrier()
8754e67ad4ac692c67ff1f99c0d07156f04ae40c x86/its: Add support for ITS-safe indirect thunk
a75bf27fe41abe658c53276a0c486c4bf9adecfc x86/its: Add support for ITS-safe return thunk
f4818881c47fd91fcb6d62373c57c7844e3de1c0 x86/its: Enable Indirect Target Selection mitigation
2665281a07e19550944e8354a2024635a7b2714a x86/its: Add "vmexit" option to skip mitigation on some CPUs
facd226f7e0c8ca936ac114aba43cb3e8b94e41e x86/its: Add support for RSB stuffing mitigation
8122b047dd18ef6e7e1c564e28f3c7067c5a2d71 tools arch x86: Sync the msr-index.h copy with the kernel sources

__CHANGES NOT IN UPSTREAM________________
Porting to Rocky Linux 10, debranding and Rocky Linux branding'
Add partial riscv64 support for build root'
Provide basic VisionFive 2 support'
redhat/configs: Enable CONFIG_MITIGATION_ITS for x86
redhat: configs: enable CONFIG_PACKING

Build

[jmaple@devbox code]$ egrep -B 5 -A 5 "\[TIMER\]|^Starting Build" $(ls -t kbuild* | head -n1)
/mnt/code/kernel-src-tree-build
Running make mrproper...
[TIMER]{MRPROPER}: 6s
x86_64 architecture detected, copying config
'configs/kernel-x86_64-rhel.config' -> '.config'
Setting Local Version for build
CONFIG_LOCALVERSION="-jmaple_rlc-10_6.12.0-55.43.1.el10_0-cab1953548b0"
Making olddefconfig
--
  HOSTCC  scripts/kconfig/util.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
Starting Build
  GEN     arch/x86/include/generated/asm/orc_hash.h
  WRAP    arch/x86/include/generated/uapi/asm/bpf_perf_event.h
  UPD     include/generated/uapi/linux/version.h
  WRAP    arch/x86/include/generated/uapi/asm/errno.h
  WRAP    arch/x86/include/generated/uapi/asm/fcntl.h
--
  LD [M]  net/qrtr/qrtr.ko
  LD [M]  net/qrtr/qrtr-mhi.ko
  BTF [M] net/hsr/hsr.ko
  BTF [M] net/qrtr/qrtr.ko
  BTF [M] net/qrtr/qrtr-mhi.ko
[TIMER]{BUILD}: 1933s
Making Modules
  SYMLINK /lib/modules/6.12.0-jmaple_rlc-10_6.12.0-55.43.1.el10_0-cab1953548b0+/build
  INSTALL /lib/modules/6.12.0-jmaple_rlc-10_6.12.0-55.43.1.el10_0-cab1953548b0+/modules.order
  INSTALL /lib/modules/6.12.0-jmaple_rlc-10_6.12.0-55.43.1.el10_0-cab1953548b0+/modules.builtin
  INSTALL /lib/modules/6.12.0-jmaple_rlc-10_6.12.0-55.43.1.el10_0-cab1953548b0+/modules.builtin.modinfo
--
  STRIP   /lib/modules/6.12.0-jmaple_rlc-10_6.12.0-55.43.1.el10_0-cab1953548b0+/kernel/net/qrtr/qrtr-mhi.ko
  SIGN    /lib/modules/6.12.0-jmaple_rlc-10_6.12.0-55.43.1.el10_0-cab1953548b0+/kernel/net/hsr/hsr.ko
  SIGN    /lib/modules/6.12.0-jmaple_rlc-10_6.12.0-55.43.1.el10_0-cab1953548b0+/kernel/net/qrtr/qrtr.ko
  SIGN    /lib/modules/6.12.0-jmaple_rlc-10_6.12.0-55.43.1.el10_0-cab1953548b0+/kernel/net/qrtr/qrtr-mhi.ko
  DEPMOD  /lib/modules/6.12.0-jmaple_rlc-10_6.12.0-55.43.1.el10_0-cab1953548b0+
[TIMER]{MODULES}: 8s
Making Install
  INSTALL /boot
[TIMER]{INSTALL}: 19s
Checking kABI
kABI check passed
Setting Default Kernel to /boot/vmlinuz-6.12.0-jmaple_rlc-10_6.12.0-55.43.1.el10_0-cab1953548b0+ and Index to 3
Hopefully Grub2.0 took everything ... rebooting after time metrices
[TIMER]{MRPROPER}: 6s
[TIMER]{BUILD}: 1933s
[TIMER]{MODULES}: 8s
[TIMER]{INSTALL}: 19s
[TIMER]{TOTAL} 1970s
Rebooting in 10 seconds

KSelfTest

[jmaple@devbox code]$ ~/workspace/auto_kernel_history_rebuild/Rocky10/rocky10/code/get_kselftest_diff.sh
kselftest.6.12.0-rocky10_0_rebuild-51495e441e52+.log
507
kselftest.6.12.0-jmaple_rlc-10_6.12.0-55.42.1.el10_0-fc6673a8811f+.log
506
kselftest.6.12.0-rocky10_0_rebuild-11e6cfbb09b9+.log
508
kselftest.6.12.0-jmaple_rlc-10_6.12.0-55.43.1.el10_0-cab1953548b0+.log
507
Before: kselftest.6.12.0-rocky10_0_rebuild-11e6cfbb09b9+.log
After: kselftest.6.12.0-jmaple_rlc-10_6.12.0-55.43.1.el10_0-cab1953548b0+.log
Diff:
-ok 1 selftests: filesystems: devpts_pts # SKIP

PlaidCat and others added 7 commits November 14, 2025 13:53
jira LE-3207
feature tools_hv
commit-author Shradha Gupta <[email protected]>
commit a9c0b33

Allow the KVP daemon to log the KVP updates triggered in the VM
with a new debug flag(-d).
When the daemon is started with this flag, it logs updates and debug
information in syslog with loglevel LOG_DEBUG. This information comes
in handy for debugging issues where the key-value pairs for certain
pools show mismatch/incorrect values.
The distro-vendors can further consume these changes and modify the
respective service files to redirect the logs to specific files as
needed.

	Signed-off-by: Shradha Gupta <[email protected]>
	Reviewed-by: Naman Jain <[email protected]>
	Reviewed-by: Dexuan Cui <[email protected]>
Link: https://lore.kernel.org/r/1744715978-8185-1-git-send-email-shradhagupta@linux.microsoft.com
	Signed-off-by: Wei Liu <[email protected]>
Message-ID: <1744715978-8185-1-git-send-email-shradhagupta@linux.microsoft.com>
(cherry picked from commit a9c0b33)
	Signed-off-by: Jonathan Maple <[email protected]>
Signed-off-by: Jonathan Maple <[email protected]>
jira LE-3546
commit-author Dexuan Cui <[email protected]>
commit b2f9665

Currently storvsc_timeout is only used in storvsc_sdev_configure(), and
5s and 10s are used elsewhere. It turns out that rarely the 5s is not
enough on Azure, so let's use storvsc_timeout everywhere.

In case a timeout happens and storvsc_channel_init() returns an error,
close the VMBus channel so that any host-to-guest messages in the
channel's ringbuffer, which might come late, can be safely ignored.

Add a "const" to storvsc_timeout.

	Cc: [email protected]
	Signed-off-by: Dexuan Cui <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
	Reviewed-by: Long Li <[email protected]>
	Signed-off-by: Martin K. Petersen <[email protected]>
(cherry picked from commit b2f9665)
	Signed-off-by: Sultan Alsawaf <[email protected]>
Signed-off-by: Jonathan Maple <[email protected]>
jira LE-3555
commit-author Michael Kelley <[email protected]>
commit 380b75d

vmbus_sendpacket_mpb_desc() is currently used only by the storvsc driver
and is hardcoded to create a single GPA range. To allow it to also be
used by the netvsc driver to create multiple GPA ranges, no longer
hardcode as having a single GPA range. Allow the calling driver to
specify the rangecount in the supplied descriptor.

Update the storvsc driver to reflect this new approach.

	Cc: <[email protected]> # 6.1.x
	Signed-off-by: Michael Kelley <[email protected]>
Link: https://patch.msgid.link/[email protected]
	Signed-off-by: Jakub Kicinski <[email protected]>
(cherry picked from commit 380b75d)
	Signed-off-by: Shreeya Patel <[email protected]>
Signed-off-by: Jonathan Maple <[email protected]>
jira LE-3555
commit-author Michael Kelley <[email protected]>
commit 4f98616

netvsc currently uses vmbus_sendpacket_pagebuffer() to send VMBus
messages. This function creates a series of GPA ranges, each of which
contains a single PFN. However, if the rndis header in the VMBus
message crosses a page boundary, the netvsc protocol with the host
requires that both PFNs for the rndis header must be in a single "GPA
range" data structure, which isn't possible with
vmbus_sendpacket_pagebuffer(). As the first step in fixing this, add a
new function netvsc_build_mpb_array() to build a VMBus message with
multiple GPA ranges, each of which may contain multiple PFNs. Use
vmbus_sendpacket_mpb_desc() to send this VMBus message to the host.

There's no functional change since higher levels of netvsc don't
maintain or propagate knowledge of contiguous PFNs. Based on its
input, netvsc_build_mpb_array() still produces a separate GPA range
for each PFN and the behavior is the same as with
vmbus_sendpacket_pagebuffer(). But the groundwork is laid for a
subsequent patch to provide the necessary grouping.

	Cc: <[email protected]> # 6.1.x
	Signed-off-by: Michael Kelley <[email protected]>
Link: https://patch.msgid.link/[email protected]
	Signed-off-by: Jakub Kicinski <[email protected]>
(cherry picked from commit 4f98616)
	Signed-off-by: Shreeya Patel <[email protected]>
Signed-off-by: Jonathan Maple <[email protected]>
jira LE-3555
commit-author Michael Kelley <[email protected]>
commit 41a6328

Starting with commit dca5161 ("hv_netvsc: Check status in
SEND_RNDIS_PKT completion message") in the 6.3 kernel, the Linux
driver for Hyper-V synthetic networking (netvsc) occasionally reports
"nvsp_rndis_pkt_complete error status: 2".[1] This error indicates
that Hyper-V has rejected a network packet transmit request from the
guest, and the outgoing network packet is dropped. Higher level
network protocols presumably recover and resend the packet so there is
no functional error, but performance is slightly impacted. Commit
dca5161 is not the cause of the error -- it only added reporting
of an error that was already happening without any notice. The error
has presumably been present since the netvsc driver was originally
introduced into Linux.

The root cause of the problem is that the netvsc driver in Linux may
send an incorrectly formatted VMBus message to Hyper-V when
transmitting the network packet. The incorrect formatting occurs when
the rndis header of the VMBus message crosses a page boundary due to
how the Linux skb head memory is aligned. In such a case, two PFNs are
required to describe the location of the rndis header, even though
they are contiguous in guest physical address (GPA) space. Hyper-V
requires that two rndis header PFNs be in a single "GPA range" data
struture, but current netvsc code puts each PFN in its own GPA range,
which Hyper-V rejects as an error.

The incorrect formatting occurs only for larger packets that netvsc
must transmit via a VMBus "GPA Direct" message. There's no problem
when netvsc transmits a smaller packet by copying it into a pre-
allocated send buffer slot because the pre-allocated slots don't have
page crossing issues.

After commit 14ad6ed ("net: allow small head cache usage with
large MAX_SKB_FRAGS values") in the 6.14-rc4 kernel, the error occurs
much more frequently in VMs with 16 or more vCPUs. It may occur every
few seconds, or even more frequently, in an ssh session that outputs a
lot of text. Commit 14ad6ed subtly changes how skb head memory is
allocated, making it much more likely that the rndis header will cross
a page boundary when the vCPU count is 16 or more. The changes in
commit 14ad6ed are perfectly valid -- they just had the side
effect of making the netvsc bug more prominent.

Current code in init_page_array() creates a separate page buffer array
entry for each PFN required to identify the data to be transmitted.
Contiguous PFNs get separate entries in the page buffer array, and any
information about contiguity is lost.

Fix the core issue by having init_page_array() construct the page
buffer array to represent contiguous ranges rather than individual
pages. When these ranges are subsequently passed to
netvsc_build_mpb_array(), it can build GPA ranges that contain
multiple PFNs, as required to avoid the error "nvsp_rndis_pkt_complete
error status: 2". If instead the network packet is sent by copying
into a pre-allocated send buffer slot, the copy proceeds using the
contiguous ranges rather than individual pages, but the result of the
copying is the same. Also fix rndis_filter_send_request() to construct
a contiguous range, since it has its own page buffer array.

This change has a side benefit in CoCo VMs in that netvsc_dma_map()
calls dma_map_single() on each contiguous range instead of on each
page. This results in fewer calls to dma_map_single() but on larger
chunks of memory, which should reduce contention on the swiotlb.

Since the page buffer array now contains one entry for each contiguous
range instead of for each individual page, the number of entries in
the array can be reduced, saving 208 bytes of stack space in
netvsc_xmit() when MAX_SKG_FRAGS has the default value of 17.

[1] https://bugzilla.kernel.org/show_bug.cgi?id=217503

Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217503
	Cc: <[email protected]> # 6.1.x
	Signed-off-by: Michael Kelley <[email protected]>
Link: https://patch.msgid.link/[email protected]
	Signed-off-by: Jakub Kicinski <[email protected]>
(cherry picked from commit 41a6328)
	Signed-off-by: Shreeya Patel <[email protected]>
Signed-off-by: Jonathan Maple <[email protected]>
jira LE-3555
commit-author Michael Kelley <[email protected]>
commit 5bbc644

init_page_array() now always creates a single page buffer array entry
for the rndis message, even if the rndis message crosses a page
boundary. As such, the number of page buffer array entries used for
the rndis message must no longer be tracked -- it is always just 1.
Remove the rmsg_pgcnt field and use "1" where the value is needed.

	Cc: <[email protected]> # 6.1.x
	Signed-off-by: Michael Kelley <[email protected]>
Link: https://patch.msgid.link/[email protected]
	Signed-off-by: Jakub Kicinski <[email protected]>
(cherry picked from commit 5bbc644)
	Signed-off-by: Shreeya Patel <[email protected]>
Signed-off-by: Jonathan Maple <[email protected]>
jira LE-3555
commit-author Michael Kelley <[email protected]>
commit 45a442f

With the netvsc driver changed to use vmbus_sendpacket_mpb_desc()
instead of vmbus_sendpacket_pagebuffer(), the latter has no remaining
callers. Remove it.

	Cc: <[email protected]> # 6.1.x
	Signed-off-by: Michael Kelley <[email protected]>
Link: https://patch.msgid.link/[email protected]
	Signed-off-by: Jakub Kicinski <[email protected]>
(cherry picked from commit 45a442f)
	Signed-off-by: Shreeya Patel <[email protected]>
Signed-off-by: Jonathan Maple <[email protected]>
@PlaidCat PlaidCat requested a review from a team November 14, 2025 23:53
@PlaidCat PlaidCat self-assigned this Nov 14, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

4 participants