Unverified Commit 0dc80a61 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!2306 [RoCE] Fix the WC cannot be polled occasionally after reseting

parents 56672746 d08f90ea
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -2740,6 +2740,8 @@ static void free_dip_list(struct hns_roce_dev *hr_dev)

static int hns_roce_v2_get_reset_page(struct hns_roce_dev *hr_dev)
{
	struct hns_roce_v2_reset_state *state;

	hr_dev->reset_page = alloc_page(GFP_KERNEL | __GFP_ZERO);
	if (!hr_dev->reset_page)
		return -ENOMEM;
@@ -2748,6 +2750,9 @@ static int hns_roce_v2_get_reset_page(struct hns_roce_dev *hr_dev)
	if (!hr_dev->reset_kaddr)
		goto err_with_vmap;

	state = hr_dev->reset_kaddr;
	state->hw_ready = ~state->hw_ready;

	return 0;

err_with_vmap:
@@ -7425,6 +7430,7 @@ static void hns_roce_v2_reset_notify_user(struct hns_roce_dev *hr_dev)
	state = (struct hns_roce_v2_reset_state *)hr_dev->reset_kaddr;

	state->reset_state = HNS_ROCE_IS_RESETTING;
	state->hw_ready = 0;
	/* Ensure reset state was flushed in memory */
	wmb();
}
+1 −0
Original line number Diff line number Diff line
@@ -1314,6 +1314,7 @@ struct hns_roce_link_table {

struct hns_roce_v2_reset_state {
	u32 reset_state; /* stored to use in user space */
	u32 hw_ready;
};

struct hns_roce_v2_free_mr {
+3 −4
Original line number Diff line number Diff line
@@ -675,10 +675,9 @@ static int hns_roce_mmap(struct ib_ucontext *uctx, struct vm_area_struct *vma)
			goto out;
		}

		ret = remap_pfn_range(vma, vma->vm_start,
				      page_to_pfn(hr_dev->reset_page),
				      PAGE_SIZE, vma->vm_page_prot);
		goto out;
		prot = vma->vm_page_prot;
		pfn = page_to_pfn(hr_dev->reset_page);
		break;
	default:
		ret = -EINVAL;
		goto out;