diff options
| author | Jesse Barnes <jbarnes@hobbes.lan> | 2008-06-12 16:51:05 -0400 |
|---|---|---|
| committer | Jesse Barnes <jbarnes@virtuousgeek.org> | 2008-06-12 16:51:05 -0400 |
| commit | 883eed1b3e25fb1d7d8f32c6550cc1ac44888838 (patch) | |
| tree | 387f080f51e4bdd96668ed59130f3439d68d0e64 /arch | |
| parent | 5e70b7f3c24468bb1635b295945edb48ecd9656a (diff) | |
| parent | 45aec1ae72fc592f231e9e73ed9ed4d10cfbc0b5 (diff) | |
Merge branch 'pci-for-jesse' of git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-tip into for-linus
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/x86/kernel/pci-dma.c | 14 | ||||
| -rw-r--r-- | arch/x86/pci/common.c | 8 |
2 files changed, 14 insertions, 8 deletions
diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c index c5ef1af8e79d..dc00a1331ace 100644 --- a/arch/x86/kernel/pci-dma.c +++ b/arch/x86/kernel/pci-dma.c | |||
| @@ -378,6 +378,7 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, | |||
| 378 | struct page *page; | 378 | struct page *page; |
| 379 | unsigned long dma_mask = 0; | 379 | unsigned long dma_mask = 0; |
| 380 | dma_addr_t bus; | 380 | dma_addr_t bus; |
| 381 | int noretry = 0; | ||
| 381 | 382 | ||
| 382 | /* ignore region specifiers */ | 383 | /* ignore region specifiers */ |
| 383 | gfp &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32); | 384 | gfp &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32); |
| @@ -397,20 +398,25 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, | |||
| 397 | if (dev->dma_mask == NULL) | 398 | if (dev->dma_mask == NULL) |
| 398 | return NULL; | 399 | return NULL; |
| 399 | 400 | ||
| 400 | /* Don't invoke OOM killer */ | 401 | /* Don't invoke OOM killer or retry in lower 16MB DMA zone */ |
| 401 | gfp |= __GFP_NORETRY; | 402 | if (gfp & __GFP_DMA) |
| 403 | noretry = 1; | ||
| 402 | 404 | ||
| 403 | #ifdef CONFIG_X86_64 | 405 | #ifdef CONFIG_X86_64 |
| 404 | /* Why <=? Even when the mask is smaller than 4GB it is often | 406 | /* Why <=? Even when the mask is smaller than 4GB it is often |
| 405 | larger than 16MB and in this case we have a chance of | 407 | larger than 16MB and in this case we have a chance of |
| 406 | finding fitting memory in the next higher zone first. If | 408 | finding fitting memory in the next higher zone first. If |
| 407 | not retry with true GFP_DMA. -AK */ | 409 | not retry with true GFP_DMA. -AK */ |
| 408 | if (dma_mask <= DMA_32BIT_MASK && !(gfp & GFP_DMA)) | 410 | if (dma_mask <= DMA_32BIT_MASK && !(gfp & GFP_DMA)) { |
| 409 | gfp |= GFP_DMA32; | 411 | gfp |= GFP_DMA32; |
| 412 | if (dma_mask < DMA_32BIT_MASK) | ||
| 413 | noretry = 1; | ||
| 414 | } | ||
| 410 | #endif | 415 | #endif |
| 411 | 416 | ||
| 412 | again: | 417 | again: |
| 413 | page = dma_alloc_pages(dev, gfp, get_order(size)); | 418 | page = dma_alloc_pages(dev, |
| 419 | noretry ? gfp | __GFP_NORETRY : gfp, get_order(size)); | ||
| 414 | if (page == NULL) | 420 | if (page == NULL) |
| 415 | return NULL; | 421 | return NULL; |
| 416 | 422 | ||
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c index 6e64aaf00d1d..940185ecaeda 100644 --- a/arch/x86/pci/common.c +++ b/arch/x86/pci/common.c | |||
| @@ -328,18 +328,18 @@ static struct dmi_system_id __devinitdata pciprobe_dmi_table[] = { | |||
| 328 | #endif | 328 | #endif |
| 329 | { | 329 | { |
| 330 | .callback = set_bf_sort, | 330 | .callback = set_bf_sort, |
| 331 | .ident = "HP ProLiant DL385 G2", | 331 | .ident = "HP ProLiant DL360", |
| 332 | .matches = { | 332 | .matches = { |
| 333 | DMI_MATCH(DMI_SYS_VENDOR, "HP"), | 333 | DMI_MATCH(DMI_SYS_VENDOR, "HP"), |
| 334 | DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant DL385 G2"), | 334 | DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant DL360"), |
| 335 | }, | 335 | }, |
| 336 | }, | 336 | }, |
| 337 | { | 337 | { |
| 338 | .callback = set_bf_sort, | 338 | .callback = set_bf_sort, |
| 339 | .ident = "HP ProLiant DL585 G2", | 339 | .ident = "HP ProLiant DL380", |
| 340 | .matches = { | 340 | .matches = { |
| 341 | DMI_MATCH(DMI_SYS_VENDOR, "HP"), | 341 | DMI_MATCH(DMI_SYS_VENDOR, "HP"), |
| 342 | DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant DL585 G2"), | 342 | DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant DL380"), |
| 343 | }, | 343 | }, |
| 344 | }, | 344 | }, |
| 345 | {} | 345 | {} |
