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

Re: [Xen-devel] [PATCH 0/5] use mask operations instead of test_bit()



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@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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