|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 2/5] tools: add routine to get CMT L3 event mask
On 07/01/15 16:37, Ian Jackson wrote:
> Andrew Cooper writes ("Re: [Xen-devel] [PATCH v2 2/5] tools: add routine to
> get CMT L3 event mask"):
>> On 07/01/15 11:12, Chao Peng wrote:
>>> +int xc_psr_cmt_get_l3_event_mask(xc_interface *xch, uint32_t *event_mask)
>>> +{
>>> + static int val = 0;
>> This should be uint32_t rather than int.
>>
>> I am somewhat concerned about multithreaded use of libxc, but this is
>> not the first issue in libxc, and probably shouldn't be held against
>> this patch.
> On the contrary, this is quite bad. libxc should be properly
> reentrant and I think it generally is. If you are aware of other
> global variables of this kind please do ...
>
> ... I have just seen that the existing version of xc_psr.c has this
> problem already.
>
> IMO this is a serious bug. Why was it made static before ?
The idea is to caching a constant value from Xen.
From a quick grep (and not very thorough):
Other culprits are xc_get_max_nodes(), xc_get_max_cpus(), 4 instances in
xc_psr.c and most things in xc_offline_page.c which appears to have
static structures for domain context. The "pluggable loader"
infrastructure in xc_dom.c also appears to be thread-unsafe.
xc_dom_decompress_unsafe.c also uses static data, but "unsafe" in the
name might be a sufficient guard?
There are quite a few files which have static data structures which
appear to be able to get away with being static const, and should
probably move in that direction.
>
>> As the result of the hypercall is going to be the same, the
>> worse that a race could achieve is a wasted hypercall.
> This kind of analysis is unfounded in the presence of modern compilers
> with aggressive optimisations. At the very least, if you're going to
> do some caching like this, it needs a lock around it.
No aggressively optimising compiler is going to perform partial writes
on a naturally aligned integer, so I stand by my comment when applied to
the common case.
A dumb compiler on the other hand might, and C/POSIX make no guarantees
in this regard, so the issue is indeed more serious than my initial
analysis.
~Andrew
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |