Lines Matching defs:qpt
307 static void get_map_page(struct rvt_qpn_table *qpt,
316 spin_lock(&qpt->lock);
321 spin_unlock(&qpt->lock);
326 * @qpt: the QPN table
328 static int init_qpn_table(struct rvt_dev_info *rdi, struct rvt_qpn_table *qpt)
337 spin_lock_init(&qpt->lock);
339 qpt->last = rdi->dparms.qpn_start;
340 qpt->incr = rdi->dparms.qpn_inc << rdi->dparms.qos_shift;
350 qpt->nmaps = rdi->dparms.qpn_res_start / RVT_BITS_PER_PAGE;
356 map = &qpt->map[qpt->nmaps];
362 get_map_page(qpt, map);
372 qpt->nmaps++;
382 * @qpt: the QPN table
384 static void free_qpn_table(struct rvt_qpn_table *qpt)
388 for (i = 0; i < ARRAY_SIZE(qpt->map); i++)
389 free_page((unsigned long)qpt->map[i].page);
514 static inline unsigned mk_qpn(struct rvt_qpn_table *qpt,
517 return (map - qpt->map) * RVT_BITS_PER_PAGE + off;
524 * @qpt: queue pair number table pointer
530 static int alloc_qpn(struct rvt_dev_info *rdi, struct rvt_qpn_table *qpt,
540 return rdi->driver_f.alloc_qpn(rdi, qpt, type, port_num);
547 spin_lock(&qpt->lock);
548 if (qpt->flags & n)
551 qpt->flags |= n;
552 spin_unlock(&qpt->lock);
556 qpn = qpt->last + qpt->incr;
558 qpn = qpt->incr | ((qpt->last & 1) ^ 1);
561 map = &qpt->map[qpn / RVT_BITS_PER_PAGE];
562 max_scan = qpt->nmaps - !offset;
565 get_map_page(qpt, map);
571 qpt->last = qpn;
575 offset += qpt->incr;
580 qpn = mk_qpn(qpt, map, offset);
588 if (qpt->nmaps == RVT_QPNMAP_ENTRIES)
590 map = &qpt->map[qpt->nmaps++];
592 offset = qpt->incr | (offset & 1);
593 } else if (map < &qpt->map[qpt->nmaps]) {
596 offset = qpt->incr | (offset & 1);
598 map = &qpt->map[0];
600 offset = qpt->incr | ((offset & 1) ^ 1);
605 qpn = mk_qpn(qpt, map, offset);
982 * @qpt: QP table
985 static void rvt_free_qpn(struct rvt_qpn_table *qpt, u32 qpn)
992 map = qpt->map + (qpn & RVT_QPN_MASK) / RVT_BITS_PER_PAGE;