Skip to content

Commit

Permalink
agp/intel: Destroy the scatterlist on allocation failure
Browse files Browse the repository at this point in the history
A side-effect of being able to use custom page allocations with the
sg_table is that it cannot reap the partially constructed scatterlist if
fails to allocate a page. So we need to call sg_free_table() ourselves
if sg_alloc_table() fails.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc Dave Airlie <airlied@redhat.com>
Signed-off-by: Eric Anholt <eric@anholt.net>
  • Loading branch information
Chris Wilson authored and Eric Anholt committed Aug 2, 2010
1 parent 2bd34f6 commit 831cd44
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions drivers/char/agp/intel-gtt.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ static int intel_agp_map_memory(struct agp_memory *mem)
DBG("try mapping %lu pages\n", (unsigned long)mem->page_count);

if (sg_alloc_table(&st, mem->page_count, GFP_KERNEL))
return -ENOMEM;
goto err;

mem->sg_list = sg = st.sgl;

Expand All @@ -113,11 +113,14 @@ static int intel_agp_map_memory(struct agp_memory *mem)

mem->num_sg = pci_map_sg(intel_private.pcidev, mem->sg_list,
mem->page_count, PCI_DMA_BIDIRECTIONAL);
if (unlikely(!mem->num_sg)) {
intel_agp_free_sglist(mem);
return -ENOMEM;
}
if (unlikely(!mem->num_sg))
goto err;

return 0;

err:
sg_free_table(&st);
return -ENOMEM;
}

static void intel_agp_unmap_memory(struct agp_memory *mem)
Expand Down

0 comments on commit 831cd44

Please sign in to comment.