diff options
author | David Woodhouse <David.Woodhouse@intel.com> | 2009-07-29 03:49:12 -0400 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2009-08-03 04:04:55 -0400 |
commit | 91b8e3056bf9107b688eb076c9b804171364db71 (patch) | |
tree | 0df6aded4e83ea84258f45d0187715be732408a9 | |
parent | c2980d8c2961113f24863f70d8ad016f55224c81 (diff) |
intel-agp: Move repeated sglist free into separate function
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
-rw-r--r-- | drivers/char/agp/intel-agp.c | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c index 148d7e38fddf..b9d9886ff3c3 100644 --- a/drivers/char/agp/intel-agp.c +++ b/drivers/char/agp/intel-agp.c | |||
@@ -196,6 +196,18 @@ static void intel_agp_unmap_page(struct page *page, dma_addr_t dma) | |||
196 | PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); | 196 | PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); |
197 | } | 197 | } |
198 | 198 | ||
199 | static void intel_agp_free_sglist(struct agp_memory *mem) | ||
200 | { | ||
201 | |||
202 | if (mem->sg_vmalloc_flag) | ||
203 | vfree(mem->sg_list); | ||
204 | else | ||
205 | kfree(mem->sg_list); | ||
206 | mem->sg_vmalloc_flag = 0; | ||
207 | mem->sg_list = NULL; | ||
208 | mem->num_sg = 0; | ||
209 | } | ||
210 | |||
199 | static int intel_agp_map_memory(struct agp_memory *mem) | 211 | static int intel_agp_map_memory(struct agp_memory *mem) |
200 | { | 212 | { |
201 | struct scatterlist *sg; | 213 | struct scatterlist *sg; |
@@ -224,13 +236,8 @@ static int intel_agp_map_memory(struct agp_memory *mem) | |||
224 | 236 | ||
225 | mem->num_sg = pci_map_sg(intel_private.pcidev, mem->sg_list, | 237 | mem->num_sg = pci_map_sg(intel_private.pcidev, mem->sg_list, |
226 | mem->page_count, PCI_DMA_BIDIRECTIONAL); | 238 | mem->page_count, PCI_DMA_BIDIRECTIONAL); |
227 | if (!mem->num_sg) { | 239 | if (unlikely(!mem->num_sg)) { |
228 | if (mem->sg_vmalloc_flag) | 240 | intel_agp_free_sglist(mem); |
229 | vfree(mem->sg_list); | ||
230 | else | ||
231 | kfree(mem->sg_list); | ||
232 | mem->sg_list = NULL; | ||
233 | mem->sg_vmalloc_flag = 0; | ||
234 | return -ENOMEM; | 241 | return -ENOMEM; |
235 | } | 242 | } |
236 | return 0; | 243 | return 0; |
@@ -242,13 +249,7 @@ static void intel_agp_unmap_memory(struct agp_memory *mem) | |||
242 | 249 | ||
243 | pci_unmap_sg(intel_private.pcidev, mem->sg_list, | 250 | pci_unmap_sg(intel_private.pcidev, mem->sg_list, |
244 | mem->page_count, PCI_DMA_BIDIRECTIONAL); | 251 | mem->page_count, PCI_DMA_BIDIRECTIONAL); |
245 | if (mem->sg_vmalloc_flag) | 252 | intel_agp_free_sglist(mem); |
246 | vfree(mem->sg_list); | ||
247 | else | ||
248 | kfree(mem->sg_list); | ||
249 | mem->sg_vmalloc_flag = 0; | ||
250 | mem->sg_list = NULL; | ||
251 | mem->num_sg = 0; | ||
252 | } | 253 | } |
253 | 254 | ||
254 | static void intel_agp_insert_sg_entries(struct agp_memory *mem, | 255 | static void intel_agp_insert_sg_entries(struct agp_memory *mem, |