Messages in this thread | | | Date | Wed, 27 Aug 2014 09:58:50 +0200 | From | Jürgen Groß <> | Subject | Re: sync_set_bit() vs set_bit() -- what's the difference? |
| |
On 08/27/2014 09:50 AM, Dexuan Cui wrote: >> -----Original Message----- >> From: Jan Beulich >> Sent: Wednesday, August 27, 2014 15:39 PM >>>>> On 27.08.14 at 09:30, <decui@microsoft.com> wrote: >>> I'm curious about the difference. :-) >>> >>> sync_set_bit() is only used in drivers/hv/ and drivers/xen/ while set_bit() >>> is used in all other places. What makes hv/xen special? >> >> I guess this would really want to be used by anything communicating >> with a hypervisor or a remote driver: set_bit() gets its LOCK prefix >> discarded when the local kernel determines it runs on a single CPU >> only. Obviously having knowledge of the CPU count inside a VM does >> not imply anything about the number of CPUs available to the host, >> i.e. stripping LOCK prefixes in that case would be unsafe. >> >> Jan > > Thank you, Juergen and Jan for your quick answers! > > I didn't realize LOCK_PREFIX is "" for UP. :-)
Even worse: it is patched away dynamically when you disable all but one processor and activated again when a second processor is becoming active.
Juergen
| |