Lines Matching defs:pf_queue
283 static bool get_pagefault(struct pf_queue *pf_queue, struct pagefault *pf)
288 spin_lock_irq(&pf_queue->lock);
289 if (pf_queue->tail != pf_queue->head) {
291 (pf_queue->data + pf_queue->tail);
309 pf_queue->tail = (pf_queue->tail + PF_MSG_LEN_DW) %
313 spin_unlock_irq(&pf_queue->lock);
318 static bool pf_queue_full(struct pf_queue *pf_queue)
320 lockdep_assert_held(&pf_queue->lock);
322 return CIRC_SPACE(pf_queue->head, pf_queue->tail, PF_QUEUE_NUM_DW) <=
330 struct pf_queue *pf_queue;
344 pf_queue = gt->usm.pf_queue + (asid % NUM_PF_QUEUE);
346 spin_lock_irqsave(&pf_queue->lock, flags);
347 full = pf_queue_full(pf_queue);
349 memcpy(pf_queue->data + pf_queue->head, msg, len * sizeof(u32));
350 pf_queue->head = (pf_queue->head + len) % PF_QUEUE_NUM_DW;
351 queue_work(gt->usm.pf_wq, &pf_queue->worker);
355 spin_unlock_irqrestore(&pf_queue->lock, flags);
364 struct pf_queue *pf_queue = container_of(w, struct pf_queue, worker);
365 struct xe_gt *gt = pf_queue->gt;
374 while (get_pagefault(pf_queue, &pf)) {
396 pf_queue->tail != pf_queue->head) {
414 gt->usm.pf_queue[i].gt = gt;
415 spin_lock_init(>->usm.pf_queue[i].lock);
416 INIT_WORK(>->usm.pf_queue[i].worker, pf_queue_work_func);
447 spin_lock_irq(>->usm.pf_queue[i].lock);
448 gt->usm.pf_queue[i].head = 0;
449 gt->usm.pf_queue[i].tail = 0;
450 spin_unlock_irq(>->usm.pf_queue[i].lock);