[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] minios: more assertions
minios: more assertions - assert that we never allocate or free the same grant twice - assert that network packets do not exceed a page - assert that incoming network event IDs make sense Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxxx> diff -r 0e671fa31534 extras/mini-os/gnttab.c --- a/extras/mini-os/gnttab.c Wed Mar 26 11:24:52 2008 +0000 +++ b/extras/mini-os/gnttab.c Wed Mar 26 11:25:54 2008 +0000 @@ -32,6 +32,9 @@ static grant_entry_t *gnttab_table; static grant_ref_t gnttab_list[NR_GRANT_ENTRIES]; +#ifdef GNT_DEBUG +static char inuse[NR_GRANT_ENTRIES]; +#endif static __DECLARE_SEMAPHORE_GENERIC(gnttab_sem, NR_GRANT_ENTRIES); static void @@ -39,6 +42,10 @@ put_free_entry(grant_ref_t ref) { unsigned long flags; local_irq_save(flags); +#ifdef GNT_DEBUG + BUG_ON(!inuse[ref]); + inuse[ref] = 0; +#endif gnttab_list[ref] = gnttab_list[0]; gnttab_list[0] = ref; local_irq_restore(flags); @@ -54,6 +61,10 @@ get_free_entry(void) local_irq_save(flags); ref = gnttab_list[0]; gnttab_list[0] = gnttab_list[ref]; +#ifdef GNT_DEBUG + BUG_ON(inuse[ref]); + inuse[ref] = 1; +#endif local_irq_restore(flags); return ref; } @@ -92,10 +103,12 @@ gnttab_end_access(grant_ref_t ref) { u16 flags, nflags; + BUG_ON(ref >= NR_GRANT_ENTRIES || ref < NR_RESERVED_ENTRIES); + nflags = gnttab_table[ref].flags; do { if ((flags = nflags) & (GTF_reading|GTF_writing)) { - printk("WARNING: g.e. still in use!\n"); + printk("WARNING: g.e. still in use! (%x)\n", flags); stack_walk(); return 0; } @@ -111,6 +124,8 @@ gnttab_end_transfer(grant_ref_t ref) { unsigned long frame; u16 flags; + + BUG_ON(ref >= NR_GRANT_ENTRIES || ref < NR_RESERVED_ENTRIES); while (!((flags = gnttab_table[ref].flags) & GTF_transfer_committed)) { if (synch_cmpxchg(&gnttab_table[ref].flags, flags, 0) == flags) { @@ -165,6 +180,9 @@ init_gnttab(void) unsigned long frames[NR_GRANT_FRAMES]; int i; +#ifdef GNT_DEBUG + memset(inuse, 1, sizeof(inuse)); +#endif for (i = NR_RESERVED_ENTRIES; i < NR_GRANT_ENTRIES; i++) put_free_entry(i); diff -r 0e671fa31534 extras/mini-os/minios.mk --- a/extras/mini-os/minios.mk Wed Mar 26 11:24:52 2008 +0000 +++ b/extras/mini-os/minios.mk Wed Mar 26 11:25:54 2008 +0000 @@ -16,6 +16,10 @@ DEF_LDFLAGS = ifeq ($(debug),y) DEF_CFLAGS += -g +#DEF_CFLAGS += MM_DEBUG +#DEF_CFLAGS += FS_DEBUG +#DEF_CFLAGS += LIBC_DEBUG +#DEF_CFLAGS += GNT_DEBUG else DEF_CFLAGS += -O3 endif diff -r 0e671fa31534 extras/mini-os/netfront.c --- a/extras/mini-os/netfront.c Wed Mar 26 11:24:52 2008 +0000 +++ b/extras/mini-os/netfront.c Wed Mar 26 11:25:54 2008 +0000 @@ -120,6 +120,7 @@ moretodo: if (rx->status == NETIF_RSP_NULL) continue; int id = rx->id; + BUG_ON(id >= NET_TX_RING_SIZE); buf = &dev->rx_buffers[id]; page = (unsigned char*)buf->page; @@ -204,6 +205,7 @@ void network_tx_buf_gc(struct netfront_d printk("packet error\n"); id = txrsp->id; + BUG_ON(id >= NET_TX_RING_SIZE); struct net_buffer* buf = &dev->tx_buffers[id]; gnttab_end_access(buf->gref); buf->gref=GRANT_INVALID_REF; @@ -510,6 +512,8 @@ void netfront_xmit(struct netfront_dev * struct net_buffer* buf; void* page; + BUG_ON(len > PAGE_SIZE); + down(&dev->tx_sem); local_irq_save(flags); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |