Chris Wright
2005-Aug-10 07:02 UTC
[Xen-devel] [PATCH] make sure dma_map_single doesn''t sleep
dma_map_single can''t sleep since it may be called with locks held, or
interrupts off, etc. Thus it shouldn''t make sleeping allocations.
Signed-off-by: Chris Wright <chrisw@osdl.org>
diff -r 38c7c25b3cb9 linux-2.6-xen-sparse/arch/xen/i386/kernel/pci-dma.c
--- a/linux-2.6-xen-sparse/arch/xen/i386/kernel/pci-dma.c Tue Aug 9 13:53:15
2005
+++ b/linux-2.6-xen-sparse/arch/xen/i386/kernel/pci-dma.c Wed Aug 10 01:35:28
2005
@@ -182,8 +182,8 @@
if ((((unsigned int)ptr & ~PAGE_MASK) + size) <= PAGE_SIZE) {
dma = virt_to_bus(ptr);
} else {
- BUG_ON((bnc = dma_alloc_coherent(dev, size, &dma, 0)) == NULL);
- BUG_ON((ent = kmalloc(sizeof(*ent), GFP_KERNEL)) == NULL);
+ BUG_ON((bnc = dma_alloc_coherent(dev, size, &dma, GFP_ATOMIC)) == NULL);
+ BUG_ON((ent = kmalloc(sizeof(*ent), GFP_ATOMIC)) == NULL);
if (direction != DMA_FROM_DEVICE)
memcpy(bnc, ptr, size);
ent->dma = dma;
diff -r 38c7c25b3cb9 linux-2.6-xen-sparse/arch/xen/x86_64/kernel/pci-dma.c
--- a/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/pci-dma.c Tue Aug 9 13:53:15
2005
+++ b/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/pci-dma.c Wed Aug 10 01:35:28
2005
@@ -234,8 +234,8 @@
if (((((unsigned long)ptr) & ~PAGE_MASK) + size) <= PAGE_SIZE) {
dma = virt_to_bus(ptr);
} else {
- BUG_ON((bnc = dma_alloc_coherent(dev, size, &dma, 0)) == NULL);
- BUG_ON((ent = kmalloc(sizeof(*ent), GFP_KERNEL)) == NULL);
+ BUG_ON((bnc = dma_alloc_coherent(dev, size, &dma, GFP_ATOMIC)) == NULL);
+ BUG_ON((ent = kmalloc(sizeof(*ent), GFP_ATOMIC)) == NULL);
if (direction != DMA_FROM_DEVICE)
memcpy(bnc, ptr, size);
ent->dma = dma;
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel