[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <bcc3a465dde24f8dab469b4260753e40@intel.com>
Date: Wed, 10 Nov 2021 19:16:12 +0000
From: "Luck, Tony" <tony.luck@...el.com>
To: "Chatre, Reinette" <reinette.chatre@...el.com>,
Jarkko Sakkinen <jarkko@...nel.org>,
"dave.hansen@...ux.intel.com" <dave.hansen@...ux.intel.com>,
"tglx@...utronix.de" <tglx@...utronix.de>,
"bp@...en8.de" <bp@...en8.de>,
"mingo@...hat.com" <mingo@...hat.com>,
"linux-sgx@...r.kernel.org" <linux-sgx@...r.kernel.org>,
"x86@...nel.org" <x86@...nel.org>
CC: "seanjc@...gle.com" <seanjc@...gle.com>,
"hpa@...or.com" <hpa@...or.com>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
"stable@...r.kernel.org" <stable@...r.kernel.org>
Subject: RE: [PATCH V2] x86/sgx: Fix free page accounting
>>> The consequence of sgx_nr_free_pages not being protected is that
>>> its value may not accurately reflect the actual number of free
>>> pages on the system, impacting the availability of free pages in
>>> support of many flows. The problematic scenario isu when the
>>
> > In non-atomicity is not a problem, when it is not a problem :-)
This is most definitely a problem.
start with sgx_nr_free_pages == 100
Now have a cpu on node0 allocate a page at the same time as another
cpu on node1 allcoates a page. Each holds the relevent per-node lock,
but that doesn't stop both CPUs from accessing the global together:
CPU on node0 CPU on node1
sgx_nr_free_pages--; sgx_nr_free_pages--;
What is the value of sgx_nr_free_pages now? We want it to be 98,
but it could be 99.
Rinse, repeat thousands of times. Eventually the value of sgx_nr_free_pages
has not even a close connection to the number of free pages.
-Tony
Powered by blists - more mailing lists