Re: [PATCH v6 8/8] nouveau/svm: Implement atomic SVM access

From: Christoph Hellwig
Date: Mon Mar 15 2021 - 03:53:45 EST


> - /*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(&notifier->notifier,
> + notifier_seq)) {
> + mutex_unlock(&svmm->mutex);
> + continue;
> + }
> + break;
> + }

This looks good, why not:

mutex_lock(&svmm->mutex);
if (!mmu_interval_read_retry(&notifier->notifier,
notifier_seq))
break;
mutex_unlock(&svmm->mutex);
}