> - /*XXX: atomic? */ > - return (fa->access == 0 || fa->access == 3) - > - (fb->access == 0 || fb->access == 3); > + /* Atomic access (2) has highest priority */ > + return (-1*(fa->access == 2) + (fa->access == 0 || fa->access == 3)) - > + (-1*(fb->access == 2) + (fb->access == 0 || fb->access == 3)); This looks really unreabable. If the magic values 0, 2 and 3 had names it might become a little more understadable, then factor the duplicated calculation of the priority value into a helper and we'll have code that mere humans can understand.. > + mutex_lock(&svmm->mutex); > + if (mmu_interval_read_retry(¬ifier->notifier, > + notifier_seq)) { > + mutex_unlock(&svmm->mutex); > + continue; > + } > + break; > + } This looks good, why not: mutex_lock(&svmm->mutex); if (!mmu_interval_read_retry(¬ifier->notifier, notifier_seq)) break; mutex_unlock(&svmm->mutex); }