SQ_EXCL
{ SF(SQ_EXCL), "Exclusive access to inner perimeter" },
sq->sq_flags = flags | SQ_EXCL;
ASSERT(flags & (SQ_EXCL|SQ_CIPUT));
sq->sq_flags = flags & ~SQ_EXCL;
sq->sq_flags = flags | SQ_EXCL;
ASSERT(flags & (SQ_EXCL|SQ_CIPUT));
sq->sq_flags = flags & ~SQ_EXCL;
ASSERT(flags & SQ_EXCL);
flags &= ~SQ_EXCL;
ASSERT(flags & SQ_EXCL);
flags &= ~SQ_EXCL;
ASSERT(flags & SQ_EXCL);
flags &= ~SQ_EXCL;
(sq->sq_flags & (SQ_STAYAWAY|SQ_EXCL|SQ_EVENTS))) {
if ((flags & (SQ_STAYAWAY|SQ_EXCL|SQ_EVENTS)) ||
ASSERT((sq->sq_flags & SQ_EXCL) == 0);
sq->sq_flags |= SQ_EXCL;
ASSERT((sq->sq_flags & (SQ_EXCL|SQ_CIPUT)));
if (sq->sq_flags & (SQ_EXCL)) {
if ((flags & (SQ_EXCL|SQ_TAIL)) || sq->sq_needexcl) {
ASSERT((sq->sq_flags & (SQ_EXCL|SQ_CIPUT)) || queued);
ASSERT((flags & (SQ_EXCL|SQ_CIPUT)) || queued);
sq->sq_flags = flags & ~SQ_EXCL;
(sq->sq_flags & (SQ_STAYAWAY|SQ_EXCL|SQ_EVENTS))) {
if ((flags & (SQ_STAYAWAY|SQ_EXCL|SQ_EVENTS)) ||
ASSERT((sq->sq_flags & SQ_EXCL) == 0);
sq->sq_flags |= SQ_EXCL;
ASSERT((sq->sq_flags & (SQ_EXCL|SQ_CIPUT)));
if (sq->sq_flags & (SQ_EXCL)) {
if ((flags & (SQ_EXCL|SQ_TAIL)) || sq->sq_needexcl) {
ASSERT((sq->sq_flags & (SQ_EXCL|SQ_CIPUT)) || queued);
ASSERT((flags & (SQ_EXCL|SQ_CIPUT)) || queued);
sq->sq_flags = flags & ~SQ_EXCL;
if ((flags & SQ_QUEUED) && !(flags & (SQ_STAYAWAY|SQ_EXCL))) {
if ((flags & SQ_QUEUED) && !(flags & (SQ_STAYAWAY|SQ_EXCL))) {
uint16_t waitflags = SQ_STAYAWAY | SQ_EVENTS | SQ_EXCL;
while ((flags & (SQ_EXCL|SQ_BLOCKED|SQ_FROZEN)) ||
sq->sq_flags |= SQ_EXCL;
ASSERT((flags & SQ_EXCL) || (type & c_inner));
sq->sq_flags = flags & ~SQ_EXCL;
ASSERT((flags & SQ_EXCL) || (type & c_inner));
sq->sq_flags = flags & ~SQ_EXCL;
if ((flags & SQ_QUEUED) && !(flags & (SQ_STAYAWAY|SQ_EXCL))) {
ASSERT(flags & SQ_EXCL);
ASSERT(flags & SQ_EXCL);
ASSERT((sq->sq_flags & SQ_EXCL) == 0);
sq->sq_flags |= SQ_EXCL;
sq->sq_flags &= ~SQ_EXCL;
ASSERT(!(sq->sq_flags & SQ_EXCL));
if (flags & SQ_EXCL) {
sq->sq_flags |= SQ_EXCL;
ASSERT((flags & SQ_EXCL) == 0);
sq->sq_flags = flags | SQ_EXCL;
ASSERT(sq->sq_flags & SQ_EXCL);
sq->sq_flags &= ~SQ_EXCL;
ASSERT((sq->sq_flags & SQ_EXCL) || (type & SQ_CIPUT));
flags &= ~SQ_EXCL;
ASSERT((flags & SQ_EXCL) == 0);
ASSERT((sq->sq_flags & (SQ_EXCL|SQ_CIPUT)));
ASSERT(!((sq->sq_type & SQ_CIPUT) && (sq->sq_flags & SQ_EXCL)));
ASSERT((sq->sq_type & SQ_CIPUT) || (sq->sq_flags & SQ_EXCL));
if ((sq->sq_type & SQ_CIPUT) && (sq->sq_flags & SQ_EXCL)) {
sq->sq_flags &= ~SQ_EXCL;
sq->sq_flags |= SQ_EXCL;
uint16_t waitflags = SQ_STAYAWAY | SQ_EVENTS | SQ_EXCL;
sq->sq_flags |= SQ_EXCL;
if (passflags & SQ_EXCL) {
flags &= ~SQ_EXCL;
if (!(flags & (SQ_STAYAWAY|SQ_EXCL))) {
#define PERIM_EXCL(q) ((q)->q_syncq->sq_flags & SQ_EXCL)
#define SQ_GOAWAY (SQ_EXCL|SQ_BLOCKED|SQ_FROZEN|SQ_WRITER|\
printf("#define\tSQ_EXCL 0x%x\n", SQ_EXCL);