On 10/02/2015 11:03 AM, Dario Faggioli wrote:
On Fri, 2015-10-02 at 06:40 +0200, Juergen Gross wrote:
Instead of using test_bit() which is an atomic operation and limits
the compiler's choices to do optimization, use logical ANDs with
bitmasks where possible.
That's a good idea, I think.
It's a fallout from a cleanup patch:
http://lists.xen.org/archives/html/xen-devel/2015-09/msg03184.html
The possible candidates have been detected by searching definitions
of bitmasks in the form:
#define MASK 1 << _MASK
Right.
On x86 the resulting code is slightly smaller (about 2 bytes for each
case, checked via disassembly in few examples).
I'm quite sure I didn't replace a test_bit() call required to be
atomic, but I'd be grateful for a thorough review especially in the
scheduler.
I'll have a deep look.
Thanks.
One question, can we introduce a __test_bit() macro/inline function,
like Jan did with __set_bit?
In the thread mentioned above you'll find a discussion about exactly
this idea between Jan and me.
I've quickly-&-dirtily tested this:
#define __test_bit(nr, addr) ({ \
unsigned _flags = 1 << nr; \
addr & _flags; \
})
and the result (I've checked a couple of cases) seems the same to me.
The problem is the limited scope where this scheme is really working and
is a better solution at the same time (nr must be a constant less than
the numbers of bits of *addr).
Juergen
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel