Hi thomas, >It can be a driver problem, but as you haven't posted your code source, >nobody is able to tell. Are you doing the correct things at module >exit ?
These are some parts of my code. within probe funcion -------------------------------------------------------------------------------------------------------------------------------------- { gdma.dma_buf = (char*)kmalloc( GAIAPCI_DMABUF_SIZE, GFP_KERNEL|__GFP_DMA ); if( gdma.dma_buf==0 ){ printk( KERN_ALERT "@ ERROR - unable to allocate memory\n" ); ret=-1; } else{ /* clear RM7965 interrupt */ gaiapci_int_clear( PCIDT_RM7965INTCLR ); /* unmask RM7965 interrupt */ gaiapci_int_enable( PCIDT_RM7965INTMSK ); ret = 0; } } -------------------------------------------------------------------------------------------------------------------------------------- within remove function -------------------------------------------------------------------------------------------------------------------------------------- { kfree(gdma.dma_buf); gdma.dma_buf = 0; free_irq(irq_no, irq_id); if( pciVmOffset ){ iounmap((void*)(pciVmOffset & PAGE_MASK)); } pci_release_region(dev, 0); pci_disable_device(dev); gaiapci_unregister_chr(); } write function -------------------------------------------------------------------------------------------------------------------------------------- { gdma.dma_dir = DMA_TO_DEVICE; bus_addr = dma_map_single( &gdev.pdev->dev, (void*)gdma.dma_buf, GAIAPCI_DMABUF_SIZE, gdma.dma_dir ); gdma.dma_bus = bus_addr; /* set data size */ /* set address */ /* enable dma interrupt */ /* dma start command */ } -------------------------------------------------------------------------------------------------------------------------------------- interrupt routine -------------------------------------------------------------------------------------------------------------------------------------- { gaiapci_int_clear( PCIDT_MDMAENDCLR ); gaiapci_int_mask( PCIDT_MDMAENDMSK ); dma_unmap_single(&gdev.pdev->dev, gdma.dma_bus, GAIAPCI_DMABUF_SIZE, gdma.dma_dir ); ret = IRQ_HANDLED; } -------------------------------------------------------------------------------------------------------------------------------------- I think this gives you an idea how I hv done it. Is there anything wrong with this method. Thanx in advance. Sumudu