Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F136754169
D7134.id18445.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D7134.id18445.diff
View Options
Index: head/sys/dev/hyperv/vmbus/hv_channel.c
===================================================================
--- head/sys/dev/hyperv/vmbus/hv_channel.c
+++ head/sys/dev/hyperv/vmbus/hv_channel.c
@@ -616,7 +616,7 @@
uint64_t aligned_data;
uint32_t packet_len_aligned;
boolean_t need_sig;
- hv_vmbus_sg_buffer_list buffer_list[3];
+ struct iovec iov[3];
packet_len = sizeof(hv_vm_packet_descriptor) + buffer_len;
packet_len_aligned = HV_ALIGN_UP(packet_len, sizeof(uint64_t));
@@ -630,17 +630,16 @@
desc.length8 = (uint16_t) (packet_len_aligned >> 3);
desc.transaction_id = request_id;
- buffer_list[0].data = &desc;
- buffer_list[0].length = sizeof(hv_vm_packet_descriptor);
+ iov[0].iov_base = &desc;
+ iov[0].iov_len = sizeof(hv_vm_packet_descriptor);
- buffer_list[1].data = buffer;
- buffer_list[1].length = buffer_len;
+ iov[1].iov_base = buffer;
+ iov[1].iov_len = buffer_len;
- buffer_list[2].data = &aligned_data;
- buffer_list[2].length = packet_len_aligned - packet_len;
+ iov[2].iov_base = &aligned_data;
+ iov[2].iov_len = packet_len_aligned - packet_len;
- ret = hv_ring_buffer_write(&channel->outbound, buffer_list, 3,
- &need_sig);
+ ret = hv_ring_buffer_write(&channel->outbound, iov, 3, &need_sig);
/* TODO: We should determine if this is optional */
if (ret == 0 && need_sig)
@@ -668,7 +667,7 @@
uint32_t packet_len;
uint32_t page_buflen;
uint32_t packetLen_aligned;
- hv_vmbus_sg_buffer_list buffer_list[4];
+ struct iovec iov[4];
hv_vmbus_channel_packet_page_buffer desc;
uint32_t descSize;
uint64_t alignedData = 0;
@@ -694,20 +693,19 @@
desc.transaction_id = request_id;
desc.range_count = page_count;
- buffer_list[0].data = &desc;
- buffer_list[0].length = descSize;
+ iov[0].iov_base = &desc;
+ iov[0].iov_len = descSize;
- buffer_list[1].data = page_buffers;
- buffer_list[1].length = page_buflen;
+ iov[1].iov_base = page_buffers;
+ iov[1].iov_len = page_buflen;
- buffer_list[2].data = buffer;
- buffer_list[2].length = buffer_len;
+ iov[2].iov_base = buffer;
+ iov[2].iov_len = buffer_len;
- buffer_list[3].data = &alignedData;
- buffer_list[3].length = packetLen_aligned - packet_len;
+ iov[3].iov_base = &alignedData;
+ iov[3].iov_len = packetLen_aligned - packet_len;
- ret = hv_ring_buffer_write(&channel->outbound, buffer_list, 4,
- &need_sig);
+ ret = hv_ring_buffer_write(&channel->outbound, iov, 4, &need_sig);
/* TODO: We should determine if this is optional */
if (ret == 0 && need_sig)
@@ -735,7 +733,7 @@
uint32_t packet_len_aligned;
uint32_t pfn_count;
uint64_t aligned_data = 0;
- hv_vmbus_sg_buffer_list buffer_list[3];
+ struct iovec iov[3];
hv_vmbus_channel_packet_multipage_buffer desc;
pfn_count =
@@ -772,17 +770,16 @@
memcpy(desc.range.pfn_array, multi_page_buffer->pfn_array,
pfn_count * sizeof(uint64_t));
- buffer_list[0].data = &desc;
- buffer_list[0].length = desc_size;
+ iov[0].iov_base = &desc;
+ iov[0].iov_len = desc_size;
- buffer_list[1].data = buffer;
- buffer_list[1].length = buffer_len;
+ iov[1].iov_base = buffer;
+ iov[1].iov_len = buffer_len;
- buffer_list[2].data = &aligned_data;
- buffer_list[2].length = packet_len_aligned - packet_len;
+ iov[2].iov_base = &aligned_data;
+ iov[2].iov_len = packet_len_aligned - packet_len;
- ret = hv_ring_buffer_write(&channel->outbound, buffer_list, 3,
- &need_sig);
+ ret = hv_ring_buffer_write(&channel->outbound, iov, 3, &need_sig);
/* TODO: We should determine if this is optional */
if (ret == 0 && need_sig)
Index: head/sys/dev/hyperv/vmbus/hv_ring_buffer.c
===================================================================
--- head/sys/dev/hyperv/vmbus/hv_ring_buffer.c
+++ head/sys/dev/hyperv/vmbus/hv_ring_buffer.c
@@ -252,7 +252,7 @@
static uint32_t copy_to_ring_buffer(
hv_vmbus_ring_buffer_info* ring_info,
uint32_t start_write_offset,
- char* src,
+ const uint8_t *src,
uint32_t src_len);
static uint32_t copy_from_ring_buffer(
@@ -297,8 +297,8 @@
int
hv_ring_buffer_write(
hv_vmbus_ring_buffer_info* out_ring_info,
- hv_vmbus_sg_buffer_list sg_buffers[],
- uint32_t sg_buffer_count,
+ const struct iovec iov[],
+ uint32_t iovlen,
boolean_t *need_sig)
{
int i = 0;
@@ -310,8 +310,8 @@
volatile uint32_t next_write_location;
uint64_t prev_indices = 0;
- for (i = 0; i < sg_buffer_count; i++) {
- total_bytes_to_write += sg_buffers[i].length;
+ for (i = 0; i < iovlen; i++) {
+ total_bytes_to_write += iov[i].iov_len;
}
total_bytes_to_write += sizeof(uint64_t);
@@ -340,10 +340,9 @@
old_write_location = next_write_location;
- for (i = 0; i < sg_buffer_count; i++) {
+ for (i = 0; i < iovlen; i++) {
next_write_location = copy_to_ring_buffer(out_ring_info,
- next_write_location, (char *) sg_buffers[i].data,
- sg_buffers[i].length);
+ next_write_location, iov[i].iov_base, iov[i].iov_len);
}
/*
@@ -482,11 +481,11 @@
*
* Assume there is enough room. Handles wrap-around in dest case only!
*/
-uint32_t
+static uint32_t
copy_to_ring_buffer(
hv_vmbus_ring_buffer_info* ring_info,
uint32_t start_write_offset,
- char* src,
+ const uint8_t *src,
uint32_t src_len)
{
char *ring_buffer = get_ring_buffer(ring_info);
Index: head/sys/dev/hyperv/vmbus/hv_vmbus_priv.h
===================================================================
--- head/sys/dev/hyperv/vmbus/hv_vmbus_priv.h
+++ head/sys/dev/hyperv/vmbus/hv_vmbus_priv.h
@@ -35,16 +35,12 @@
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/sema.h>
+#include <sys/_iovec.h>
#include <dev/hyperv/include/hyperv.h>
struct vmbus_softc;
-typedef struct {
- void* data;
- uint32_t length;
-} hv_vmbus_sg_buffer_list;
-
/*
* The format must be the same as hv_vm_data_gpa_direct
*/
@@ -95,8 +91,8 @@
int hv_ring_buffer_write(
hv_vmbus_ring_buffer_info *ring_info,
- hv_vmbus_sg_buffer_list sg_buffers[],
- uint32_t sg_buff_count,
+ const struct iovec iov[],
+ uint32_t iovlen,
boolean_t *need_sig);
int hv_ring_buffer_peek(
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Nov 20, 7:14 AM (2 h, 25 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25629563
Default Alt Text
D7134.id18445.diff (5 KB)
Attached To
Mode
D7134: hyperv/vmbus: Use iovec for bufring scatter/gather list.
Attached
Detach File
Event Timeline
Log In to Comment