Page MenuHomeFreeBSD

umtx: Split do_unlock_pi on two counterparts.
AcceptedPublic

Authored by dchagin on Tue, Jul 20, 2:14 PM.

Details

Reviewers
kib
markj
Summary

umtx_frop_pi will be used by Linux emulation layer.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint OK
Unit
No Unit Test Coverage
Build Status
Buildable 40614
Build 37503: arc lint + arc unit

Event Timeline

sys/kern/kern_umtx.c
1736

If exposing such function as the generic KPI, we should assert there that key is locked and busy. For that, you need to add corresponding primitives.

sys/kern/kern_umtx.c
1743

Shouldn't #endif go before this line? Otherwise uc is not defined.

It might be better to define some helper e.g. UMTXQ_ASSERT_LOCKED_BUSY(key) and expand it into block as you write for INVARIANTS, otherwise keep it empty.

done,
sleep_pi may be should refactored to use this macros

sys/kern/kern_umtx.c
1741

No, pass the key to UMTXQ_LOCKED_ASSERT_BUSY(), so that the INVARIANTS block above is not needed.

sys/kern/kern_umtx.c
92

arg should be key and not uc

98

This is better, but please do

#ifdef INVARIANTS
#define UMTXQ_ASSERT_LOCKED_BUSY(key) <your definition>
#else 
#define UMTXQ_ASSERT_LOCKED_BUSY(key) do {} while (0)
#endif

So that uc is not calculated for !INVARIANTS case. Also note a suggested name change

sys/kern/kern_umtx.c
93

UMTXQ_ASSERT_LOCKED_BUSY

done,
UMTXQ_LOCKED_ASSERT?

UMTXQ_LOCKED_ASSERT?

Are you suggesting to call UMTXQ_ASSERT_LOCKED_BUSY() by UMTXQ_LOCKED_ASSERT() instead? The assert does both lock and busy checks, so IMO the longer name is more correct.

This revision is now accepted and ready to land.Wed, Jul 21, 10:10 PM
In D31238#704112, @kib wrote:

UMTXQ_LOCKED_ASSERT?

Are you suggesting to call UMTXQ_ASSERT_LOCKED_BUSY() by UMTXQ_LOCKED_ASSERT() instead? The assert does both lock and busy checks, so IMO the longer name is more correct.

no, I prefer to follow to the same style in code, naming, etc, that's why i named the macro like UMTXQ_LOCKED_ASSERT_BUSY. Thank you for your patience ))