aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--extras/mini-os/fs-front.c10
-rw-r--r--extras/mini-os/netfront.c6
2 files changed, 8 insertions, 8 deletions
diff --git a/extras/mini-os/fs-front.c b/extras/mini-os/fs-front.c
index 0b27df361b..3320b879f0 100644
--- a/extras/mini-os/fs-front.c
+++ b/extras/mini-os/fs-front.c
@@ -136,8 +136,8 @@ static inline void add_id_to_freelist(unsigned int id,unsigned short* freelist)
again:
old_id = freelist[0];
/* Note: temporal inconsistency, since freelist[0] can be changed by someone
- * else, but we are a sole owner of freelist[id], it's OK. */
- freelist[id] = old_id;
+ * else, but we are a sole owner of freelist[id + 1], it's OK. */
+ freelist[id + 1] = old_id;
new_id = id;
if(cmpxchg(&freelist[0], old_id, new_id) != old_id)
{
@@ -154,7 +154,7 @@ static inline unsigned short get_id_from_freelist(unsigned short* freelist)
again:
old_id = freelist[0];
- new_id = freelist[old_id];
+ new_id = freelist[old_id + 1];
if(cmpxchg(&freelist[0], old_id, new_id) != old_id)
{
printk("Cmpxchg on freelist remove failed.\n");
@@ -785,8 +785,8 @@ static void alloc_request_table(struct fs_import *import)
printk("Allocating request array for import %d, nr_entries = %d.\n",
import->import_id, import->nr_entries);
requests = xmalloc_array(struct fs_request, import->nr_entries);
- import->freelist = xmalloc_array(unsigned short, import->nr_entries);
- memset(import->freelist, 0, sizeof(unsigned short) * import->nr_entries);
+ import->freelist = xmalloc_array(unsigned short, import->nr_entries + 1);
+ memset(import->freelist, 0, sizeof(unsigned short) * (import->nr_entries + 1));
for(i=0; i<import->nr_entries; i++)
{
/* TODO: that's a lot of memory */
diff --git a/extras/mini-os/netfront.c b/extras/mini-os/netfront.c
index d01ce6927b..3fff0accdd 100644
--- a/extras/mini-os/netfront.c
+++ b/extras/mini-os/netfront.c
@@ -38,7 +38,7 @@ struct net_buffer {
struct netfront_dev {
domid_t dom;
- unsigned short tx_freelist[NET_TX_RING_SIZE];
+ unsigned short tx_freelist[NET_TX_RING_SIZE + 1];
struct semaphore tx_sem;
struct net_buffer rx_buffers[NET_RX_RING_SIZE];
@@ -70,14 +70,14 @@ void init_rx_buffers(struct netfront_dev *dev);
static inline void add_id_to_freelist(unsigned int id,unsigned short* freelist)
{
- freelist[id] = freelist[0];
+ freelist[id + 1] = freelist[0];
freelist[0] = id;
}
static inline unsigned short get_id_from_freelist(unsigned short* freelist)
{
unsigned int id = freelist[0];
- freelist[0] = freelist[id];
+ freelist[0] = freelist[id + 1];
return id;
}