On 2010.07.24 18:29:37 +0100, Chris Wilson wrote: > 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. Why? Doesn't sg_alloc_table() handle the failure case to call sg_free_table() already? > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Cc Dave Airlie <airlied@xxxxxxxxxx> > --- > drivers/char/agp/intel-gtt.c | 13 ++++++++----- > 1 files changed, 8 insertions(+), 5 deletions(-) > > diff --git a/drivers/char/agp/intel-gtt.c b/drivers/char/agp/intel-gtt.c > index f97122a..5615d70 100644 > --- a/drivers/char/agp/intel-gtt.c > +++ b/drivers/char/agp/intel-gtt.c > @@ -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; > > @@ -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) > -- > 1.7.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/dri-devel -- Open Source Technology Center, Intel ltd. $gpg --keyserver wwwkeys.pgp.net --recv-keys 4D781827
Attachment:
signature.asc
Description: Digital signature
_______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel