@@ -24,7 +24,7 @@ impl<H: Hal, T: Transport> VirtIoSocketDev<H, T> {
2424 pub fn try_new ( transport : T ) -> DevResult < Self > {
2525 let virtio_socket = VirtIOSocket :: < H , _ > :: new ( transport) . map_err ( as_dev_err) ?;
2626 Ok ( Self {
27- inner : InnerDev :: new ( virtio_socket) ,
27+ inner : InnerDev :: new_with_capacity ( virtio_socket, 32 * 1024 ) , // 32KB buffer
2828 } )
2929 }
3030}
@@ -73,9 +73,12 @@ impl<H: Hal, T: Transport> VsockDriverOps for VirtIoSocketDev<H, T> {
7373
7474 fn recv ( & mut self , cid : VsockConnId , buf : & mut [ u8 ] ) -> DevResult < usize > {
7575 let ( peer_addr, src_port) = map_conn_id ( cid) ;
76- self . inner
76+ let res = self
77+ . inner
7778 . recv ( peer_addr, src_port, buf)
78- . map_err ( as_dev_err)
79+ . map_err ( as_dev_err) ;
80+ self . inner . update_credit ( peer_addr, src_port) ;
81+ res
7982 }
8083
8184 fn recv_avail ( & mut self , cid : VsockConnId ) -> DevResult < usize > {
@@ -97,15 +100,15 @@ impl<H: Hal, T: Transport> VsockDriverOps for VirtIoSocketDev<H, T> {
97100 . map_err ( as_dev_err)
98101 }
99102
100- fn poll_event ( & mut self , buf : & mut [ u8 ] ) -> DevResult < Option < VsockDriverEvent > > {
103+ fn poll_event ( & mut self ) -> DevResult < Option < VsockDriverEvent > > {
101104 match self . inner . poll ( ) {
102105 Ok ( None ) => {
103106 // no event
104107 Ok ( None )
105108 }
106109 Ok ( Some ( event) ) => {
107110 // translate event
108- let result = convert_vsock_event ( event, & mut self . inner , buf ) ?;
111+ let result = convert_vsock_event ( event, & mut self . inner ) ?;
109112 Ok ( Some ( result) )
110113 }
111114 Err ( e) => {
@@ -119,7 +122,6 @@ impl<H: Hal, T: Transport> VsockDriverOps for VirtIoSocketDev<H, T> {
119122fn convert_vsock_event < H : Hal , T : Transport > (
120123 event : VsockEvent ,
121124 inner : & mut InnerDev < H , T > ,
122- buf : & mut [ u8 ] ,
123125) -> DevResult < VsockDriverEvent > {
124126 let cid = VsockConnId {
125127 peer_addr : axdriver_vsock:: VsockAddr {
@@ -133,10 +135,8 @@ fn convert_vsock_event<H: Hal, T: Transport>(
133135 VsockEventType :: ConnectionRequest => Ok ( VsockDriverEvent :: ConnectionRequest ( cid) ) ,
134136 VsockEventType :: Connected => Ok ( VsockDriverEvent :: Connected ( cid) ) ,
135137 VsockEventType :: Received { length } => {
136- let read = inner
137- . recv ( event. source , event. destination . port , & mut buf[ ..length] )
138- . map_err ( as_dev_err) ?;
139- Ok ( VsockDriverEvent :: Received ( cid, read) )
138+ // Do not read data here, let the upper layer decide when to read.
139+ Ok ( VsockDriverEvent :: Received ( cid, length) )
140140 }
141141 VsockEventType :: Disconnected { reason : _ } => Ok ( VsockDriverEvent :: Disconnected ( cid) ) ,
142142 _ => Ok ( VsockDriverEvent :: Unknown ) ,
0 commit comments