Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 368f2b59 authored by Mitko Haralanov's avatar Mitko Haralanov Committed by Doug Ledford
Browse files

IB/hfi1: Remove the use of add/remove RB function pointers



The usage of function pointers for RB node insertion
and removal in the expected receive code path was
meant to be a small performance optimization. However,
maintaining it, especially with the new MMU API, would
become more troublesome as the API is extended.

Since the performance optimization is minor, remove the
function pointers and replace with direct calls.

Reviewed-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Reviewed-by: default avatarDean Luick <dean.luick@intel.com>
Signed-off-by: default avatarMitko Haralanov <mitko.haralanov@intel.com>
Signed-off-by: default avatarJubin John <jubin.john@intel.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent eef9c896
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -1199,8 +1199,6 @@ struct hfi1_filedata {
	u32 invalid_tid_idx;
	/* protect invalid_tids array and invalid_tid_idx */
	spinlock_t invalid_lock;
	int (*mmu_rb_insert)(struct rb_root *, struct mmu_rb_node *);
	void (*mmu_rb_remove)(struct rb_root *, struct mmu_rb_node *);
};

extern struct list_head hfi1_dev_list;
+14 −11
Original line number Diff line number Diff line
@@ -223,14 +223,6 @@ int hfi1_user_exp_rcv_init(struct file *fp)
		}
	}

	if (HFI1_CAP_IS_USET(TID_UNMAP)) {
		fd->mmu_rb_insert = mmu_rb_insert;
		fd->mmu_rb_remove = mmu_rb_remove;
	} else {
		fd->mmu_rb_insert = hfi1_mmu_rb_insert;
		fd->mmu_rb_remove = hfi1_mmu_rb_remove;
	}

	/*
	 * PSM does not have a good way to separate, count, and
	 * effectively enforce a limit on RcvArray entries used by
@@ -861,7 +853,10 @@ static int set_rcvarray_entry(struct file *fp, unsigned long vaddr,
	node->freed = false;
	memcpy(node->pages, pages, sizeof(struct page *) * npages);

	ret = fd->mmu_rb_insert(root, &node->mmu);
	if (HFI1_CAP_IS_USET(TID_UNMAP))
		ret = mmu_rb_insert(root, &node->mmu);
	else
		ret = hfi1_mmu_rb_insert(root, &node->mmu);

	if (ret) {
		hfi1_cdbg(TID, "Failed to insert RB node %u 0x%lx, 0x%lx %d",
@@ -901,7 +896,10 @@ static int unprogram_rcvarray(struct file *fp, u32 tidinfo,
	node = fd->entry_to_rb[rcventry];
	if (!node || node->rcventry != (uctxt->expected_base + rcventry))
		return -EBADF;
	fd->mmu_rb_remove(&fd->tid_rb_root, &node->mmu);
	if (HFI1_CAP_IS_USET(TID_UNMAP))
		mmu_rb_remove(&fd->tid_rb_root, &node->mmu);
	else
		hfi1_mmu_rb_remove(&fd->tid_rb_root, &node->mmu);

	if (grp)
		*grp = node->grp;
@@ -962,7 +960,12 @@ static void unlock_exp_tids(struct hfi1_ctxtdata *uctxt,
							  uctxt->expected_base];
				if (!node || node->rcventry != rcventry)
					continue;
				fd->mmu_rb_remove(root, &node->mmu);
				if (HFI1_CAP_IS_USET(TID_UNMAP))
					mmu_rb_remove(&fd->tid_rb_root,
						      &node->mmu);
				else
					hfi1_mmu_rb_remove(&fd->tid_rb_root,
							   &node->mmu);
				clear_tid_node(fd, -1, node);
			}
		}