/* Verify reading from memory and not the cache */
smp_rmb();
node = READ_ONCE(queue->head);
if (!node) return NULL;
next = READ_ONCE(node->next);
WRITE_ONCE(queue->head, next);
if (unlikely(!next)) { /* slowpath for the last element in the queue */
if (atomic_long_cmpxchg(&queue->tail,
(long)&node->next, (long) &queue->head) != (long)&node->next) { /* Updating tail failed wait for new next to appear */ do {
smp_rmb();
} while (unlikely(!(queue->head = READ_ONCE(node->next))));
}
}
atomic_dec(&queue->job_count); return node;
}
#endif/* DRM_SCHEDULER_SPSC_QUEUE_H_ */
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-09-29)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.