From nobody Mon Sep 28 09:59:44 2026 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5EC38329C48; Mon, 24 Aug 2026 01:37:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.177.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787535479; cv=none; b=hvNr7zM67qMUmcq6FHjNVQQJW/Cidtw0zdEKEBujELEFKbKM85JqxFQ9A8Og01GHLf8FmK7VXCHW0dYo0/QbF1/YEuNK3tpTmC/IpCspZV3yEba7bQeU2eiFkGAjg6MfCmJm710AmUc/M7ootQ/uqM8UglqxQVsnQ+3kfJLvkoI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787535479; c=relaxed/simple; bh=BdyXgcqP4UT0Nvy6YZMngGsfc4X0wGM2CB4QODXqVQA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aZ+JB3wA97sMUdYULwULJyQxZ/ojlAYQPoRk8dj3P2qb0OzxapQc9+hhWDgu38fkZC1pbsmv7T/ZFCCxuysABLl9SRNeknpnp0yCx2fSTRlwuZW8EGhDzVeINo8PwalrfO112Hk2yVXSy+E5ciDIhnO0tQ+6R9r7aoScfhMw+pA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=ONjs1LZT; arc=none smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="ONjs1LZT" Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67NNVRGC4028287; Mon, 24 Aug 2026 01:32:45 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=AM1Cf wJ8g05SV7IdUa82tGBN4xGZcLFUEGyyk/09Iqw=; b=ONjs1LZT85rRWpHgCW626 v/kPOEcUtsev7KZEQl9pQ8aLewdDGpfwNm9T6KDokGfCZLdSOCigjXi+A31LDOD2 iPJ4TM573XQxCyY6V8y6m/bmiM4sZj/nhEcP7H+TSLvgT6lceaT5I0JuEtrz2FaI HBY9mwYMBsQVZhBLAgYPs0YyG5/dHUELiSnjBKIqghxQ1NMwuQ2U3MBElxseyWIe Ods5kXhcWZw/OW7Y8a/+f4kzs9wv7FwCrxFtFDLU12ByEDLm/eIlnFSMt67UP5EJ ru4NDQUyESoYPSRykDvTkZhzJjEf+7SdJdwc4QoipdVbePJ4pakQX0YmNDNxfZrd g== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4g73csscv9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 24 Aug 2026 01:32:45 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 67O1PSb9036711; Mon, 24 Aug 2026 01:32:44 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4g84kh750x-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 24 Aug 2026 01:32:44 +0000 (GMT) Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.18.1.12/8.18.1.12) with ESMTP id 67O1Wgn3010282; Mon, 24 Aug 2026 01:32:43 GMT Received: from localhost.localdomain (ca-dev80.us.oracle.com [10.211.9.80]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTP id 4g84kh7504-2; Mon, 24 Aug 2026 01:32:43 +0000 (GMT) From: Dongli Zhang To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: seanjc@google.com, pbonzini@redhat.com, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org, dietmar.eggemann@arm.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, vschneid@redhat.com, kprateek.nayak@amd.com, dwmw2@infradead.org, joe.jin@oracle.com Subject: [PATCH RFC 1/2] KVM: x86: Update stealtime before clearing preempted state Date: Sun, 23 Aug 2026 18:26:25 -0700 Message-ID: <20260824012716.753022-2-dongli.zhang@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260824012716.753022-1-dongli.zhang@oracle.com> References: <20260824012716.753022-1-dongli.zhang@oracle.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-24_01,2026-08-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 suspectscore=0 mlxlogscore=999 spamscore=0 adultscore=0 malwarescore=0 lowpriorityscore=0 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2608240010 X-Authority-Analysis: v=2.4 cv=D+h37PRj c=1 sm=1 tr=0 ts=6a8b9f3d b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=3I1J8UUJPc9JN9BFgKH3:22 a=yPCof4ZbAAAA:8 a=cD1_jheChcHno68YmwQA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:13521 X-Proofpoint-Spam-Info: AW1haW4tMjYwODI0MDAxMiBTYWx0ZWRfXwNovBrfga5r8 X3Kq2z+IHrjESB55W93H7FgfqkiNIV3kMmFiEoXtX4bVm3ilRULuBErWc/gSflXLjBdiYgpRwHb LlYGDpiq4+2aOu8xDCLNgNjVdUeTIxutjOCFTOvWEgDnOfgrVO7i X-Proofpoint-ORIG-GUID: mtIS0-21H4It3hCK6_GiUyNTsWsxC7pk X-Proofpoint-GUID: mtIS0-21H4It3hCK6_GiUyNTsWsxC7pk X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI0MDAxMiBTYWx0ZWRfX2QYoUwGeTgn1 axlAnN6F/3lypRbVW4UhX8xCKAStodjKly/BfW8ZBGlEiNFdZlaz2b6zupK3Pmhy26CkSmZ5d5o H7GlJDwupzS/6ut/ToY8AfEQVUjTY8dsOq9bwQUqum6jcYjCatVc5AxrLGuFFueZnzv5HRWaDAt oJjcmROxZUwuqLSk6N/5ypXEkfFmhgtUzG19+T0R9vpD/D6HUaK0FP5f9qPCwck3bNfKcnrtgEH GvIJxiScvM7HbeyYqvtZhKdvrRnKAC2984UyVXSdApNRADt9O+hCIosEwbvOWRrr6OHoi4/sI1s 9LLaD+SlrAs/NN1zLQ8ektHPcmOVDvNsbYfcodb/dvsxhIiPWqhhZ2LeOxpznG0/V0yRB/MCKxn DPHeOkZ8O727fBRB4ApuT2xl1/UoJrMKAz0G8P7WBGZq8M9QFDY3RpKEcCTYwwCuZMKb20zKOjj w7KJpy1STluTmrBdsLizjNAcdcetNHd7/BOMXCWA= Content-Type: text/plain; charset="utf-8" The guest Linux scheduler may rely on KVM stealtime to determine whether elapsed time should be deducted from task runtime. However, when vCPU A reads vCPU B's stealtime for scheduler accounting, the value may not be up to date. KVM updates stealtime only when the vCPU is about to enter the guest. Update stealtime before clearing the preempted state, so a remote vCPU that observes vcpu_is_preempted() as false also observes the new stealtime. Otherwise, reading a vCPU's stealtime from another vCPU is not reliable. The remote vCPU should wait until vcpu_is_preempted() returns false for the target vCPU. Signed-off-by: Dongli Zhang --- arch/x86/kvm/x86.c | 58 +++++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 69469bbdc84a..525a1448195e 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -3751,6 +3751,35 @@ static void record_steal_time(struct kvm_vcpu *vcpu) } =20 st =3D (struct kvm_steal_time __user *)ghc->hva; + + if (!user_access_begin(st, sizeof(*st))) + return; + + unsafe_get_user(version, &st->version, out); + if (version & 1) + version +=3D 1; /* first time write, random junk */ + + version +=3D 1; + unsafe_put_user(version, &st->version, out); + + /* Pairs with the guest side virt_rmb() in kvm_steal_clock(). */ + smp_wmb(); + + unsafe_get_user(steal, &st->steal, out); + steal +=3D current->sched_info.run_delay - + vcpu->arch.st.last_steal; + vcpu->arch.st.last_steal =3D current->sched_info.run_delay; + unsafe_put_user(steal, &st->steal, out); + + version +=3D 1; + unsafe_put_user(version, &st->version, out); + + /* + * Publish the stealtime before making the vCPU look runnable to + * the guest. + */ + smp_wmb(); + /* * Doing a TLB flush here, on the guest's behalf, can avoid * expensive IPIs. @@ -3759,9 +3788,6 @@ static void record_steal_time(struct kvm_vcpu *vcpu) u8 st_preempted =3D 0; int err =3D -EFAULT; =20 - if (!user_access_begin(st, sizeof(*st))) - return; - asm volatile("1: xchgb %0, %2\n" "xor %1, %1\n" "2:\n" @@ -3781,37 +3807,17 @@ static void record_steal_time(struct kvm_vcpu *vcpu) if (st_preempted & KVM_VCPU_FLUSH_TLB) kvm_vcpu_flush_tlb_guest(vcpu); =20 - if (!user_access_begin(st, sizeof(*st))) - goto dirty; } else { - if (!user_access_begin(st, sizeof(*st))) - return; - unsafe_put_user(0, &st->preempted, out); vcpu->arch.st.preempted =3D 0; + user_access_end(); } =20 - unsafe_get_user(version, &st->version, out); - if (version & 1) - version +=3D 1; /* first time write, random junk */ - - version +=3D 1; - unsafe_put_user(version, &st->version, out); - - smp_wmb(); - - unsafe_get_user(steal, &st->steal, out); - steal +=3D current->sched_info.run_delay - - vcpu->arch.st.last_steal; - vcpu->arch.st.last_steal =3D current->sched_info.run_delay; - unsafe_put_user(steal, &st->steal, out); - - version +=3D 1; - unsafe_put_user(version, &st->version, out); + mark_page_dirty_in_slot(vcpu->kvm, ghc->memslot, gpa_to_gfn(ghc->gpa)); + return; =20 out: user_access_end(); - dirty: mark_page_dirty_in_slot(vcpu->kvm, ghc->memslot, gpa_to_gfn(ghc->gpa)); } =20 --=20 2.43.5 From nobody Mon Sep 28 09:59:44 2026 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5D29226ED41; Mon, 24 Aug 2026 01:37:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.177.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787535478; cv=none; b=krKsmVmwKtOn9hppQUqAnwmO8dT8ZsGTU4qnl6w02Rt+TYsa0SJuYNpWH+oEcsNq4iB/Hw+T+/rMrSUXEgmWlNU0LbYzptOMVVppoZLLePQjE3SK/X/VVzvHvLW6w2froeCcrCCsmflpSTrlpfjEFfVUflpTXuEvTRxR7/kKSEM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787535478; c=relaxed/simple; bh=xYk3G5n3q7HUXpL8T9+x/Ddjslxw8flt7jYNR6jZH0Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cz40O6N+mEsQSgAT12HFBLm42Aqmmz+0W1ppRkbXHLV/9Bz5IZ0hRQOp4aMvnt4sXHbAOMu5MK57+UQ9GHGfrLHmUSIr1O/zJRTNbz35M9emu2587fadoR8S8gPtflMgyUIi5V11sO03L6i4pbVroRFpxNCvFRAlVXK6Wa+Ugd8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=UGswGmTe; arc=none smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="UGswGmTe" Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67O002fK4065363; Mon, 24 Aug 2026 01:32:47 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=Ln1PN JEgaFgPv0EWZjy3H7QVOvoVxTYd/wN3smUWm38=; b=UGswGmTex8DG3GOR0JV0g muzgyEhmSTTGTzvKxbSESjhVCjiMJaaU0iOoCp58twKW+o97mN4ZeHnXK9pPZR46 q7CClQeihteLKYqe0XaBFqjPqOB7BjWeJC58gvH6orIMk3+SJser90zvmhN+PSBX dtVSJJxngnqs3MCXIQPM5aox7lk6UUQ1JQ/AF3+vdx6d4fUwymU9gO4WUle/7zk+ qzQi2fM05bBe2Rr4eiA+8Olho1jZIUnUwBFkhkGOYVcrbMX+1dGrKZQeolCVqIAU l+xJPYj6HkSbwjGZKuxpBh7wY7V/WO95Ux5rKeFuTqh0J6zQN5M8G+BHR+sEQU7Z g== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4g72j1sdqq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 24 Aug 2026 01:32:46 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.7/8.18.1.7) with ESMTP id 67O1PTFS036807; Mon, 24 Aug 2026 01:32:46 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4g84kh751c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 24 Aug 2026 01:32:46 +0000 (GMT) Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.18.1.12/8.18.1.12) with ESMTP id 67O1Wgn5010282; Mon, 24 Aug 2026 01:32:45 GMT Received: from localhost.localdomain (ca-dev80.us.oracle.com [10.211.9.80]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTP id 4g84kh7504-3; Mon, 24 Aug 2026 01:32:45 +0000 (GMT) From: Dongli Zhang To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: seanjc@google.com, pbonzini@redhat.com, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org, dietmar.eggemann@arm.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, vschneid@redhat.com, kprateek.nayak@amd.com, dwmw2@infradead.org, joe.jin@oracle.com Subject: [PATCH RFC 2/2] sched/core: Defer preempted remote vCPU task clock updates Date: Sun, 23 Aug 2026 18:26:26 -0700 Message-ID: <20260824012716.753022-3-dongli.zhang@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260824012716.753022-1-dongli.zhang@oracle.com> References: <20260824012716.753022-1-dongli.zhang@oracle.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-24_01,2026-08-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 suspectscore=0 mlxlogscore=999 spamscore=0 adultscore=0 malwarescore=0 lowpriorityscore=0 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2606160000 definitions=main-2608240010 X-Proofpoint-Spam-Info: AW1haW4tMjYwODI0MDAxMiBTYWx0ZWRfX+jO7vn5pWmHP XSRSBbh2fLierY2DhUr8yIxip8oYuVe5acZsuE0jWGtXtRsaZ3ufFVP+GuBpFMnwSVTR9+gncax A7jsZmwCfPRk8FpxErue/Z6QEP0tfaor1mOKOijcGzJvwoOy5VQ/ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODI0MDAxMiBTYWx0ZWRfX946IGNcRgsJm O6maGifenmp9t23/2Mus90biwhVLT/jr7QZGDAlmpRA1gMGTLRZsallJCZI3ioZAiqg0SXJzdxv VifkPrgJYEBrtiQ+2PPgSH0EWX0DK+zICNzNjKBOX3EdFFzdvmyGgcnfaUqIHNLF7I8BAFMdtyF +oBXN/CZJLdh8i2j/eTUFIxqX1Wkp8IPAunxbNapXE4sFBy/0ytauQ+PVpD5dPrDYYnoq/I+524 dEXaHU2fXbmWs3+YdB8cixzasWjxUCEYsB8xfDOJ0NGFndubpqrQQQT5O7MJKgrvXihklXqT9lo 1uTviD25fsk2juKLBLHiXjbO0VYIeJJ7bkmirobyqH3x37velVxOz4Sv9eYgCeHhSZkC8+LhTJq ixzWdnzWC3duDID5UInzIlHuVx3H/09or765gOvVWex3Pmedy2a94ECdAUVrWasP0dTI+ZwEu+0 6HgtURh6NZZwNtdtcBpi+SExj3TwyATD2Rs1X/NE= X-Proofpoint-GUID: Wd_m6mv8r9seKVD9tv9_LILeFdTdhQTF X-Authority-Analysis: v=2.4 cv=Wek8rUhX c=1 sm=1 tr=0 ts=6a8b9f3e b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22 a=o5oIOnhZENCTenyL_yNV:22 a=yPCof4ZbAAAA:8 a=ayYQXfPqRRTaTnvsy0wA:9 a=5yU3S35YU4bGjq-dph-N:22 a=Bho9c0fBagfJEIQBS7DQ:22 cc=ntf awl=host:13521 X-Proofpoint-ORIG-GUID: Wd_m6mv8r9seKVD9tv9_LILeFdTdhQTF Content-Type: text/plain; charset="utf-8" A remote update of a runqueue can advance rq->clock while the owner vCPU is still preempted by the host. KVM publishes the matching stealtime when the vCPU is about to re-enter the guest, so the remote CPU can otherwise charge the stolen interval to rq->clock_task. Defer clock_task updates made by a remote CPU while the owner vCPU is reported preempted. Fold the deferred delta back into the next update that can proceed so IRQ and steal accounting process it together. This requires the hypervisor to publish up-to-date stealtime before clearing the preempted data. Assisted-by: Codex:GPT-5.5 Signed-off-by: Dongli Zhang --- kernel/sched/core.c | 24 ++++++++++++++++++++++++ kernel/sched/sched.h | 1 + 2 files changed, 25 insertions(+) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index f78275192036..56aa439182c7 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -816,6 +816,30 @@ static void update_rq_clock_task(struct rq *rq, s64 de= lta) */ s64 __maybe_unused steal =3D 0, irq_delta =3D 0; =20 +#ifdef CONFIG_PARAVIRT_TIME_ACCOUNTING + if (static_key_false((¶virt_steal_rq_enabled))) { + int rq_cpu =3D cpu_of(rq); + + /* + * A remote CPU can update this rq before the owner vCPU + * has re-entered the guest and refreshed its stealtime + * state. Do not charge that elapsed time to the current + * task until stealtime can be sampled after the vCPU is + * no longer preempted. + */ + if (rq_cpu !=3D raw_smp_processor_id() && + vcpu_is_preempted(rq_cpu)) { + rq->deferred_clock_task +=3D delta; + return; + } + + if (rq->deferred_clock_task) { + delta +=3D rq->deferred_clock_task; + rq->deferred_clock_task =3D 0; + } + } +#endif + #ifdef CONFIG_IRQ_TIME_ACCOUNTING if (irqtime_enabled()) { irq_delta =3D irq_time_read(cpu_of(rq)) - rq->prev_irq_time; diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index e656c7059bf8..4fd00228afef 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -1325,6 +1325,7 @@ struct rq { #endif #ifdef CONFIG_PARAVIRT_TIME_ACCOUNTING u64 prev_steal_time_rq; + u64 deferred_clock_task; #endif =20 /* calc_load related fields */ --=20 2.43.5