@@ -24,10 +24,6 @@ static rt_err_t virtio_net_tx(rt_device_t dev, struct pbuf *p)
2424 struct virtio_device * virtio_dev = & virtio_net_dev -> virtio_dev ;
2525 struct virtq * queue_tx = & virtio_dev -> queues [VIRTIO_NET_QUEUE_TX ];
2626
27- #ifdef RT_USING_SMP
28- rt_base_t level = rt_spin_lock_irqsave (& virtio_dev -> spinlock );
29- #endif
30-
3127 id = (queue_tx -> avail -> idx * 2 ) % queue_tx -> num ;
3228
3329 virtio_net_dev -> info [id ].hdr .flags = 0 ;
@@ -56,76 +52,44 @@ static rt_err_t virtio_net_tx(rt_device_t dev, struct pbuf *p)
5652 virtio_alloc_desc (virtio_dev , VIRTIO_NET_QUEUE_TX );
5753 virtio_alloc_desc (virtio_dev , VIRTIO_NET_QUEUE_TX );
5854
59- #ifdef RT_USING_SMP
60- rt_spin_unlock_irqrestore (& virtio_dev -> spinlock , level );
61- #endif
62-
6355 return RT_EOK ;
6456}
6557
6658static struct pbuf * virtio_net_rx (rt_device_t dev )
6759{
6860 rt_uint16_t id ;
6961 rt_uint32_t len ;
70- struct pbuf * p = RT_NULL , * new , * ret = RT_NULL ;
62+ struct pbuf * p = RT_NULL ;
7163 struct virtio_net_device * virtio_net_dev = (struct virtio_net_device * )dev ;
7264 struct virtio_device * virtio_dev = & virtio_net_dev -> virtio_dev ;
7365 struct virtq * queue_rx = & virtio_dev -> queues [VIRTIO_NET_QUEUE_RX ];
7466
75- while (queue_rx -> used_idx != queue_rx -> used -> idx )
67+ if (queue_rx -> used_idx != queue_rx -> used -> idx )
7668 {
77- #ifdef RT_USING_SMP
78- rt_base_t level = rt_spin_lock_irqsave (& virtio_dev -> spinlock );
79- #endif
8069 id = (queue_rx -> used -> ring [queue_rx -> used_idx % queue_rx -> num ].id + 1 ) % queue_rx -> num ;
8170 len = queue_rx -> used -> ring [queue_rx -> used_idx % queue_rx -> num ].len - VIRTIO_NET_HDR_SIZE ;
8271
83- #ifdef RT_USING_SMP
84- rt_spin_unlock_irqrestore (& virtio_dev -> spinlock , level );
85- #endif
8672 if (len > VIRTIO_NET_PAYLOAD_MAX_SIZE )
8773 {
8874 rt_kprintf ("%s: Receive buffer's size = %u is too big!\n" , virtio_net_dev -> parent .parent .parent .name , len );
8975 len = VIRTIO_NET_PAYLOAD_MAX_SIZE ;
9076 }
9177
92- new = pbuf_alloc (PBUF_RAW , len , PBUF_RAM );
93-
94- if (p != RT_NULL )
95- {
96- p -> next = new ;
97- p = p -> next ;
98- }
99- else
100- {
101- p = new ;
102- ret = p ;
103- }
78+ p = pbuf_alloc (PBUF_RAW , len , PBUF_RAM );
10479
10580 if (p != RT_NULL )
10681 {
107- #ifdef RT_USING_SMP
108- level = rt_spin_lock_irqsave (& virtio_dev -> spinlock );
109- #endif
11082 rt_memcpy (p -> payload , (void * )queue_rx -> desc [id ].addr - PV_OFFSET , len );
11183
11284 queue_rx -> used_idx ++ ;
11385
11486 virtio_submit_chain (virtio_dev , VIRTIO_NET_QUEUE_RX , id - 1 );
11587
11688 virtio_queue_notify (virtio_dev , VIRTIO_NET_QUEUE_RX );
117-
118- #ifdef RT_USING_SMP
119- rt_spin_unlock_irqrestore (& virtio_dev -> spinlock , level );
120- #endif
121- }
122- else
123- {
124- break ;
12589 }
12690 }
12791
128- return ret ;
92+ return p ;
12993}
13094
13195static rt_err_t virtio_net_init (rt_device_t dev )
@@ -214,10 +178,6 @@ static void virtio_net_isr(int irqno, void *param)
214178 struct virtio_device * virtio_dev = & virtio_net_dev -> virtio_dev ;
215179 struct virtq * queue_rx = & virtio_dev -> queues [VIRTIO_NET_QUEUE_RX ];
216180
217- #ifdef RT_USING_SMP
218- rt_base_t level = rt_spin_lock_irqsave (& virtio_dev -> spinlock );
219- #endif
220-
221181 virtio_interrupt_ack (virtio_dev );
222182 rt_hw_dsb ();
223183
@@ -227,10 +187,6 @@ static void virtio_net_isr(int irqno, void *param)
227187
228188 eth_device_ready (& virtio_net_dev -> parent );
229189 }
230-
231- #ifdef RT_USING_SMP
232- rt_spin_unlock_irqrestore (& virtio_dev -> spinlock , level );
233- #endif
234190}
235191
236192rt_err_t rt_virtio_net_init (rt_ubase_t * mmio_base , rt_uint32_t irq )
@@ -253,10 +209,6 @@ rt_err_t rt_virtio_net_init(rt_ubase_t *mmio_base, rt_uint32_t irq)
253209
254210 virtio_net_dev -> config = (struct virtio_net_config * )virtio_dev -> mmio_config -> config ;
255211
256- #ifdef RT_USING_SMP
257- rt_spin_lock_init (& virtio_dev -> spinlock );
258- #endif
259-
260212 virtio_reset_device (virtio_dev );
261213 virtio_status_acknowledge_driver (virtio_dev );
262214
0 commit comments