@@ -24,10 +24,6 @@ static rt_err_t virtio_net_tx(rt_device_t dev, struct pbuf *p)
24
24
struct virtio_device * virtio_dev = & virtio_net_dev -> virtio_dev ;
25
25
struct virtq * queue_tx = & virtio_dev -> queues [VIRTIO_NET_QUEUE_TX ];
26
26
27
- #ifdef RT_USING_SMP
28
- rt_base_t level = rt_spin_lock_irqsave (& virtio_dev -> spinlock );
29
- #endif
30
-
31
27
id = (queue_tx -> avail -> idx * 2 ) % queue_tx -> num ;
32
28
33
29
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)
56
52
virtio_alloc_desc (virtio_dev , VIRTIO_NET_QUEUE_TX );
57
53
virtio_alloc_desc (virtio_dev , VIRTIO_NET_QUEUE_TX );
58
54
59
- #ifdef RT_USING_SMP
60
- rt_spin_unlock_irqrestore (& virtio_dev -> spinlock , level );
61
- #endif
62
-
63
55
return RT_EOK ;
64
56
}
65
57
66
58
static struct pbuf * virtio_net_rx (rt_device_t dev )
67
59
{
68
60
rt_uint16_t id ;
69
61
rt_uint32_t len ;
70
- struct pbuf * p = RT_NULL , * new , * ret = RT_NULL ;
62
+ struct pbuf * p = RT_NULL ;
71
63
struct virtio_net_device * virtio_net_dev = (struct virtio_net_device * )dev ;
72
64
struct virtio_device * virtio_dev = & virtio_net_dev -> virtio_dev ;
73
65
struct virtq * queue_rx = & virtio_dev -> queues [VIRTIO_NET_QUEUE_RX ];
74
66
75
- while (queue_rx -> used_idx != queue_rx -> used -> idx )
67
+ if (queue_rx -> used_idx != queue_rx -> used -> idx )
76
68
{
77
- #ifdef RT_USING_SMP
78
- rt_base_t level = rt_spin_lock_irqsave (& virtio_dev -> spinlock );
79
- #endif
80
69
id = (queue_rx -> used -> ring [queue_rx -> used_idx % queue_rx -> num ].id + 1 ) % queue_rx -> num ;
81
70
len = queue_rx -> used -> ring [queue_rx -> used_idx % queue_rx -> num ].len - VIRTIO_NET_HDR_SIZE ;
82
71
83
- #ifdef RT_USING_SMP
84
- rt_spin_unlock_irqrestore (& virtio_dev -> spinlock , level );
85
- #endif
86
72
if (len > VIRTIO_NET_PAYLOAD_MAX_SIZE )
87
73
{
88
74
rt_kprintf ("%s: Receive buffer's size = %u is too big!\n" , virtio_net_dev -> parent .parent .parent .name , len );
89
75
len = VIRTIO_NET_PAYLOAD_MAX_SIZE ;
90
76
}
91
77
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 );
104
79
105
80
if (p != RT_NULL )
106
81
{
107
- #ifdef RT_USING_SMP
108
- level = rt_spin_lock_irqsave (& virtio_dev -> spinlock );
109
- #endif
110
82
rt_memcpy (p -> payload , (void * )queue_rx -> desc [id ].addr - PV_OFFSET , len );
111
83
112
84
queue_rx -> used_idx ++ ;
113
85
114
86
virtio_submit_chain (virtio_dev , VIRTIO_NET_QUEUE_RX , id - 1 );
115
87
116
88
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 ;
125
89
}
126
90
}
127
91
128
- return ret ;
92
+ return p ;
129
93
}
130
94
131
95
static rt_err_t virtio_net_init (rt_device_t dev )
@@ -214,10 +178,6 @@ static void virtio_net_isr(int irqno, void *param)
214
178
struct virtio_device * virtio_dev = & virtio_net_dev -> virtio_dev ;
215
179
struct virtq * queue_rx = & virtio_dev -> queues [VIRTIO_NET_QUEUE_RX ];
216
180
217
- #ifdef RT_USING_SMP
218
- rt_base_t level = rt_spin_lock_irqsave (& virtio_dev -> spinlock );
219
- #endif
220
-
221
181
virtio_interrupt_ack (virtio_dev );
222
182
rt_hw_dsb ();
223
183
@@ -227,10 +187,6 @@ static void virtio_net_isr(int irqno, void *param)
227
187
228
188
eth_device_ready (& virtio_net_dev -> parent );
229
189
}
230
-
231
- #ifdef RT_USING_SMP
232
- rt_spin_unlock_irqrestore (& virtio_dev -> spinlock , level );
233
- #endif
234
190
}
235
191
236
192
rt_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)
253
209
254
210
virtio_net_dev -> config = (struct virtio_net_config * )virtio_dev -> mmio_config -> config ;
255
211
256
- #ifdef RT_USING_SMP
257
- rt_spin_lock_init (& virtio_dev -> spinlock );
258
- #endif
259
-
260
212
virtio_reset_device (virtio_dev );
261
213
virtio_status_acknowledge_driver (virtio_dev );
262
214
0 commit comments