Lines Matching refs:qi

1187 	if (iommu->qi) {
1188 free_page((unsigned long)iommu->qi->desc);
1189 kfree(iommu->qi->desc_status);
1190 kfree(iommu->qi);
1203 static inline void reclaim_free_desc(struct q_inval *qi)
1205 while (qi->desc_status[qi->free_tail] == QI_DONE ||
1206 qi->desc_status[qi->free_tail] == QI_ABORT) {
1207 qi->desc_status[qi->free_tail] = QI_FREE;
1208 qi->free_tail = (qi->free_tail + 1) % QI_LENGTH;
1209 qi->free_cnt++;
1243 struct qi_desc *desc = iommu->qi->desc + head;
1262 desc = iommu->qi->desc + head;
1274 struct q_inval *qi = iommu->qi;
1277 if (qi->desc_status[wait_index] == QI_ABORT)
1292 struct qi_desc *desc = qi->desc + head;
1299 memcpy(desc, qi->desc + (wait_index << shift),
1322 if (qi->desc_status[head] == QI_IN_USE)
1323 qi->desc_status[head] = QI_ABORT;
1327 if (qi->desc_status[wait_index] == QI_ABORT)
1349 struct q_inval *qi = iommu->qi;
1360 if (!qi)
1380 raw_spin_lock_irqsave(&qi->q_lock, flags);
1386 while (qi->free_cnt < count + 2) {
1387 raw_spin_unlock_irqrestore(&qi->q_lock, flags);
1389 raw_spin_lock_irqsave(&qi->q_lock, flags);
1392 index = qi->free_head;
1398 memcpy(qi->desc + offset, &desc[i], 1 << shift);
1399 qi->desc_status[(index + i) % QI_LENGTH] = QI_IN_USE;
1403 qi->desc_status[wait_index] = QI_IN_USE;
1409 wait_desc.qw1 = virt_to_phys(&qi->desc_status[wait_index]);
1414 memcpy(qi->desc + offset, &wait_desc, 1 << shift);
1416 qi->free_head = (qi->free_head + count + 1) % QI_LENGTH;
1417 qi->free_cnt -= count + 1;
1423 writel(qi->free_head << shift, iommu->reg + DMAR_IQT_REG);
1425 while (qi->desc_status[wait_index] != QI_DONE) {
1437 raw_spin_unlock(&qi->q_lock);
1439 raw_spin_lock(&qi->q_lock);
1443 qi->desc_status[(index + i) % QI_LENGTH] = QI_DONE;
1445 reclaim_free_desc(qi);
1446 raw_spin_unlock_irqrestore(&qi->q_lock, flags);
1697 struct q_inval *qi = iommu->qi;
1698 u64 val = virt_to_phys(qi->desc);
1700 qi->free_head = qi->free_tail = 0;
1701 qi->free_cnt = QI_LENGTH;
1733 struct q_inval *qi;
1742 if (iommu->qi)
1745 iommu->qi = kmalloc(sizeof(*qi), GFP_ATOMIC);
1746 if (!iommu->qi)
1749 qi = iommu->qi;
1758 kfree(qi);
1759 iommu->qi = NULL;
1763 qi->desc = page_address(desc_page);
1765 qi->desc_status = kcalloc(QI_LENGTH, sizeof(int), GFP_ATOMIC);
1766 if (!qi->desc_status) {
1767 free_page((unsigned long) qi->desc);
1768 kfree(qi);
1769 iommu->qi = NULL;
1773 raw_spin_lock_init(&qi->q_lock);
2138 if (!iommu->qi)