Commit 0021e71e authored by Haiyang Zhang's avatar Haiyang Zhang Committed by Greg Kroah-Hartman
Browse files

staging: hv: move netvsc_destroy_send_buf() to clean up forward declaration

parent ec91cd09
Loading
Loading
Loading
Loading
+64 −66
Original line number Diff line number Diff line
@@ -51,8 +51,6 @@ static int netvsc_init_send_buf(struct hv_device *device);

static int netvsc_init_recv_buf(struct hv_device *device);

static int netvsc_destroy_send_buf(struct netvsc_device *net_device);

static int netvsc_connect_vsp(struct hv_device *device);

static void netvsc_send_completion(struct hv_device *device,
@@ -343,6 +341,70 @@ static int netvsc_init_recv_buf(struct hv_device *device)
	return ret;
}

static int netvsc_destroy_send_buf(struct netvsc_device *net_device)
{
	struct nvsp_message *revoke_packet;
	int ret = 0;

	/*
	 * If we got a section count, it means we received a
	 *  SendReceiveBufferComplete msg (ie sent
	 *  NvspMessage1TypeSendReceiveBuffer msg) therefore, we need
	 *  to send a revoke msg here
	 */
	if (net_device->send_section_size) {
		/* Send the revoke send buffer */
		revoke_packet = &net_device->revoke_packet;
		memset(revoke_packet, 0, sizeof(struct nvsp_message));

		revoke_packet->hdr.msg_type =
			NVSP_MSG1_TYPE_REVOKE_SEND_BUF;
		revoke_packet->msg.v1_msg.
			revoke_send_buf.id = NETVSC_SEND_BUFFER_ID;

		ret = vmbus_sendpacket(net_device->dev->channel,
				       revoke_packet,
				       sizeof(struct nvsp_message),
				       (unsigned long)revoke_packet,
				       VM_PKT_DATA_INBAND, 0);
		/*
		 * If we failed here, we might as well return and have a leak
		 * rather than continue and a bugchk
		 */
		if (ret != 0) {
			dev_err(&net_device->dev->device, "unable to send "
				"revoke send buffer to netvsp");
			return -1;
		}
	}

	/* Teardown the gpadl on the vsp end */
	if (net_device->send_buf_gpadl_handle) {
		ret = vmbus_teardown_gpadl(net_device->dev->channel,
					   net_device->send_buf_gpadl_handle);

		/*
		 * If we failed here, we might as well return and have a leak
		 * rather than continue and a bugchk
		 */
		if (ret != 0) {
			dev_err(&net_device->dev->device,
				"unable to teardown send buffer's gpadl");
			return -1;
		}
		net_device->send_buf_gpadl_handle = 0;
	}

	if (net_device->send_buf) {
		/* Free up the receive buffer */
		free_pages((unsigned long)net_device->send_buf,
				get_order(net_device->send_buf_size));
		net_device->send_buf = NULL;
	}

	return ret;
}

static int netvsc_init_send_buf(struct hv_device *device)
{
	int ret = 0;
@@ -436,70 +498,6 @@ static int netvsc_init_send_buf(struct hv_device *device)
	return ret;
}

static int netvsc_destroy_send_buf(struct netvsc_device *net_device)
{
	struct nvsp_message *revoke_packet;
	int ret = 0;

	/*
	 * If we got a section count, it means we received a
	 *  SendReceiveBufferComplete msg (ie sent
	 *  NvspMessage1TypeSendReceiveBuffer msg) therefore, we need
	 *  to send a revoke msg here
	 */
	if (net_device->send_section_size) {
		/* Send the revoke send buffer */
		revoke_packet = &net_device->revoke_packet;
		memset(revoke_packet, 0, sizeof(struct nvsp_message));

		revoke_packet->hdr.msg_type =
			NVSP_MSG1_TYPE_REVOKE_SEND_BUF;
		revoke_packet->msg.v1_msg.
			revoke_send_buf.id = NETVSC_SEND_BUFFER_ID;

		ret = vmbus_sendpacket(net_device->dev->channel,
				       revoke_packet,
				       sizeof(struct nvsp_message),
				       (unsigned long)revoke_packet,
				       VM_PKT_DATA_INBAND, 0);
		/*
		 * If we failed here, we might as well return and have a leak
		 * rather than continue and a bugchk
		 */
		if (ret != 0) {
			dev_err(&net_device->dev->device, "unable to send "
				"revoke send buffer to netvsp");
			return -1;
		}
	}

	/* Teardown the gpadl on the vsp end */
	if (net_device->send_buf_gpadl_handle) {
		ret = vmbus_teardown_gpadl(net_device->dev->channel,
					   net_device->send_buf_gpadl_handle);

		/*
		 * If we failed here, we might as well return and have a leak
		 * rather than continue and a bugchk
		 */
		if (ret != 0) {
			dev_err(&net_device->dev->device,
				"unable to teardown send buffer's gpadl");
			return -1;
		}
		net_device->send_buf_gpadl_handle = 0;
	}

	if (net_device->send_buf) {
		/* Free up the receive buffer */
		free_pages((unsigned long)net_device->send_buf,
				get_order(net_device->send_buf_size));
		net_device->send_buf = NULL;
	}

	return ret;
}


static int netvsc_connect_vsp(struct hv_device *device)
{