[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Ping: [PATCH] x86/xstate: reset cached register values on resume


  • To: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Mon, 18 Oct 2021 10:21:28 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ICn+1vKFaW1xoOwZufQfKZd5z/UH5Lfil54ktYv5ioM=; b=nxMVpquSkrS2GIPrNRFWMJ37S8jObDl7+5+BPgjleLwT7pv9WiWMIujBV0/9wU7uBpIPpV7gLa8jKnC3oJDbwD3Ac6wPSIlgdjyRsW5W3U2Th8J+ZDTVNOpDAiz3sQebYbGirnnqo3jUrR6sEYuWKijCamgfGqbCN1IXtan0lQkvSOxqLGcePCYsm/CFBtVEFMJhMkAgihedUxxZD8Mq13c1uPNdC6id8CtEn9WpOx1kgItsVcqyPe71a9YF5tPjSSOvkNt0L0CNTbAAh1KwqbnI5T9RecsmPMoX4c/bJ5ycX7vX3/t9T7DlE6CCU8nDK4gTttnCv+iIdWTI2fR//g==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RU0NWOufSA7jMnIVHusRVLY9wi33VP9KwevUEJ0xKUYP2c8GAEiyhFV9JOi7W4Ok0weQ+P8PIgz1cUqgUCMtSikaNFbAa9Fg6zsz1T/apYVo0tg76p/vnhQIuRp+99sMHh/Z+z/1UHOpOOM7erQNsYvPBdR2PLFIxHDIomJWuwhIKE3H2kheK/CUz64Cw+fDyELaRwlYS6hpwjuggY9NGPVoKz8tmchQL9hBe2hsRUIJdDJ+VqbpOCExU9TTK7Hx5QOVkzPZRbB/ugBpFOJ3SzkPYUbUEw5+YO+E11+iAXEGl5/rknfYSceRtln+bYk3B4QN+lKZ6Md+5yTVPUgeHg==
  • Authentication-results: xenproject.org; dkim=none (message not signed) header.d=none;xenproject.org; dmarc=none action=none header.from=suse.com;
  • Cc: Roger Pau Monné <roger.pau@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx, Ian Jackson <iwj@xxxxxxxxxxxxxx>
  • Delivery-date: Mon, 18 Oct 2021 08:21:39 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 24.08.2021 23:11, Andrew Cooper wrote:
> On 18/08/2021 13:44, Andrew Cooper wrote:
>> On 18/08/2021 12:30, Marek Marczykowski-Górecki wrote:
>>> set_xcr0() and set_msr_xss() use cached value to avoid setting the
>>> register to the same value over and over. But suspend/resume implicitly
>>> reset the registers and since percpu areas are not deallocated on
>>> suspend anymore, the cache gets stale.
>>> Reset the cache on resume, to ensure the next write will really hit the
>>> hardware. Choose value 0, as it will never be a legitimate write to
>>> those registers - and so, will force write (and cache update).
>>>
>>> Note the cache is used io get_xcr0() and get_msr_xss() too, but:
>>> - set_xcr0() is called few lines below in xstate_init(), so it will
>>>   update the cache with appropriate value
>>> - get_msr_xss() is not used anywhere - and thus not before any
>>>   set_msr_xss() that will fill the cache
>>>
>>> Fixes: aca2a985a55a "xen: don't free percpu areas during suspend"
>>> Signed-off-by: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx>
>> I'd prefer to do this differently.  As I said in the thread, there are
>> other registers such as MSR_TSC_AUX which fall into the same category,
>> and I'd like to make something which works systematically.
> 
> Ok - after some searching, I think we have problems with:
> 
> cpu/common.c:47:DEFINE_PER_CPU(struct cpuidmasks, cpuidmasks);
> cpu/common.c:120:static DEFINE_PER_CPU(uint64_t, msr_misc_features);
> msr.c:35:DEFINE_PER_CPU(uint32_t, tsc_aux);
> xstate.c:36:static DEFINE_PER_CPU(uint64_t, xcr0);
> xstate.c:79:static DEFINE_PER_CPU(uint64_t, xss);
> 
> There is also:
> 
> traps.c:100:DEFINE_PER_CPU(uint64_t, efer);
> 
> which we *almost* handle correctly, but fail to update the cache on the
> BSP out of S3.
> 
> 
> For the APIC, I think we have issues with:
> 
> irq.c:1083:static DEFINE_PER_CPU(struct pending_eoi,
> pending_eoi[NR_DYNAMIC_VECTORS]);
> 
> because we don't defer S3 until all pending EOIs are complete.

As your planned more extensive rework appears to not have made much
progress yet, may I suggest that we go with Marek's fix for 4.16,
with the one adjustment I suggested alongside giving my R-b?

Jan

> I gave up trying to figure out the MCE or power governor logic so we may
> have additional issues there.
> 
> 
> Additionally,
> 
> flushtlb.c:34:DEFINE_PER_CPU(u32, tlbflush_time);
> 
> really does need setting appropriately, although I think the only
> fallout is a few unnecessary TLB flushes.
> 
> ~Andrew
> 




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.