From 1c0c172695a42a11ca7206283b4f1d6a486d05ac Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Wed, 28 Nov 2007 12:40:57 +0000 Subject: [Mini-OS] Make gnttab allocation/free safe Add a semaphore to protect gnttab_list from exhaustion, and disable callbacks during allocation/free. Fix the network frontend accordingly. Signed-off-by: Samuel Thibault --- extras/mini-os/netfront.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'extras/mini-os/netfront.c') diff --git a/extras/mini-os/netfront.c b/extras/mini-os/netfront.c index fc1e9ab357..4341168652 100644 --- a/extras/mini-os/netfront.c +++ b/extras/mini-os/netfront.c @@ -147,6 +147,7 @@ moretodo: struct net_buffer* buf = &rx_buffers[id]; void* page = buf->page; + /* We are sure to have free gnttab entries since they got released above */ buf->gref = req->gref = gnttab_grant_access(0,virt_to_mfn(page),0); @@ -436,8 +437,9 @@ void netfront_xmit(unsigned char* data,int len) down(&tx_sem); local_irq_save(flags); - id = get_id_from_freelist(tx_freelist); + local_irq_restore(flags); + buf = &tx_buffers[id]; page = buf->page; @@ -461,7 +463,7 @@ void netfront_xmit(unsigned char* data,int len) if(notify) notify_remote_via_evtchn(info->evtchn); + local_irq_save(flags); network_tx_buf_gc(); - local_irq_restore(flags); } -- cgit v1.2.3