* Re: 2.6.22-rc6 bad page error [not found] <20070705195835.AAB19DBA1@gherkin.frus.com> @ 2007-07-07 13:48 ` Michal Piotrowski 2007-07-07 14:56 ` Bob Tracy 0 siblings, 1 reply; 10+ messages in thread From: Michal Piotrowski @ 2007-07-07 13:48 UTC (permalink / raw) To: Bob Tracy; +Cc: linux-kernel, linux-alpha Hi Bob, On 05/07/07, Bob Tracy <rct@gherkin.frus.com> wrote: > This happened on an Alpha computer (433au) running 2.6.22-rc6. Can you reproduce this bug on 2.6.22-rc7-git6? > The > error was triggered when I started up a NX KDE session, which I've > done successfully on all occasions prior to this one. In other words, > I wasn't doing anything out of the ordinary... The machine is still up > and running as I type this, and can't/won't be rebooted for a few hours > if there's any other troubleshooting information I need to retrieve that > might be helpful. > > >Bad page state in process 'gnome-terminal' > >page:fffffc0000a407f0 flags:0x000000000000000c mapping:0000000000000000 mapcount:1 count:1 > >Trying to fix it up, but a reboot is needed > >Backtrace: > >fffffc000960bc00 0000000000000000 0000000000000001 0000000000000001 > > fffffc0000356e40 fffffc0000a407f0 fffffc0000356ee8 fffffc002399b0a0 > > fffffc000f784a68 00000000000280d2 0000000000000000 000000012029a3c8 > > fffffc00006fb6c0 fffffc001b0667a0 0000000000000000 0000000000000000 > > fffffc00006fb6c8 00000000000280d2 0000000000000000 0000000000000044 > > fffffc00006fb1f0 0000000000000000 0000000000000000 0000000000000001 > >Trace: > >[<fffffc0000356e40>] get_page_from_freelist+0x420/0x430 > >[<fffffc0000356ee8>] __alloc_pages+0x98/0x3b0 > >[<fffffc00003638fc>] __handle_mm_fault+0x65c/0xb50 > >[<fffffc0000353554>] filemap_nopage+0x1a4/0x3d0 > >[<fffffc0000363534>] __handle_mm_fault+0x294/0xb50 > >[<fffffc000031e904>] do_page_fault+0x2d4/0x490 > >[<fffffc0000310bdc>] entMM+0x9c/0xc0 > >[<fffffc000032b0c0>] __do_softirq+0x90/0x120 > >[<fffffc000032b1b4>] do_softirq+0x64/0x70 > >[<fffffc000032b1b4>] do_softirq+0x64/0x70 > >[<fffffc0000315d94>] handle_irq+0x74/0xc0 > > > >Bad page state in process 'syslogd' > >page:fffffc0000a40828 flags:0x000000000000000c mapping:0000000000000000 mapcount:1 count:1 > >Trying to fix it up, but a reboot is needed > >Backtrace: > >fffffc002242fa98 0000000000000000 0000000000000001 0000000000000001 > > fffffc0000356e40 fffffc0000a40828 fffffc0000356ee8 fffffc0023f6e0c0 > > 0000000000000003 00000000000000d0 0000000000000000 00000000000000d0 > > fffffc00006fb6c0 0000000000000020 0000000000000000 0000000000000000 > > fffffc00006fb6c8 00000000000200d0 0000000000000000 0000000000000044 > > fffffc00006fb1f0 0000000000000000 0000000000000000 0000000000000001 > >Trace: > >[<fffffc0000356e40>] get_page_from_freelist+0x420/0x430 > >[<fffffc0000356ee8>] __alloc_pages+0x98/0x3b0 > >[<fffffc0000375b30>] cache_alloc_refill+0x390/0x690 > >[<fffffc0000387018>] __link_path_walk+0x8a8/0x10b0 > >[<fffffc0000387374>] __link_path_walk+0xc04/0x10b0 > >[<fffffc0000375798>] kmem_cache_alloc+0x78/0x80 > >[<fffffc0000322e04>] copy_process+0xb4/0x11a0 > >[<fffffc0000323f88>] do_fork+0x98/0x330 > >[<fffffc0000323f40>] do_fork+0x50/0x330 > >[<fffffc0000313340>] alpha_clone+0x40/0x60 > >[<fffffc0000388f5c>] open_namei+0xbc/0x820 > >[<fffffc0000311480>] sys_clone+0x10/0x20 > >[<fffffc0000310f84>] entSys+0xa4/0xc0 > > -- > ----------------------------------------------------------------------- > Bob Tracy | "Eagles may soar, but weasels don't get > rct@frus.com | sucked into jet engines." --Anon > ----------------------------------------------------------------------- > - > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > Regards, Michal -- LOG http://www.stardust.webpages.pl/log/ ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: 2.6.22-rc6 bad page error 2007-07-07 13:48 ` 2.6.22-rc6 bad page error Michal Piotrowski @ 2007-07-07 14:56 ` Bob Tracy 2007-07-07 18:38 ` Hugh Dickins 0 siblings, 1 reply; 10+ messages in thread From: Bob Tracy @ 2007-07-07 14:56 UTC (permalink / raw) To: Michal Piotrowski; +Cc: linux-kernel, linux-alpha Michal Piotrowski wrote: > Hi Bob, > > On 05/07/07, Bob Tracy <rct@gherkin.frus.com> wrote: > > This happened on an Alpha computer (433au) running 2.6.22-rc6. > > Can you reproduce this bug on 2.6.22-rc7-git6? > > > The > > error was triggered when I started up a NX KDE session, which I've > > done successfully on all occasions prior to this one. In other words, > > I wasn't doing anything out of the ordinary... The machine is still up > > and running as I type this, and can't/won't be rebooted for a few hours > > if there's any other troubleshooting information I need to retrieve that > > might be helpful. ACK on the suggestion to try -rc7-git6, but I'll probably wait until Monday to give it a try. The client side of my NX "test fixture" is at my day job location :-). -- ----------------------------------------------------------------------- Bob Tracy | "Eagles may soar, but weasels don't get rct@frus.com | sucked into jet engines." --Anon ----------------------------------------------------------------------- ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: 2.6.22-rc6 bad page error 2007-07-07 14:56 ` Bob Tracy @ 2007-07-07 18:38 ` Hugh Dickins 2007-07-08 21:05 ` Bob Tracy 2007-07-09 18:53 ` Bob Tracy 0 siblings, 2 replies; 10+ messages in thread From: Hugh Dickins @ 2007-07-07 18:38 UTC (permalink / raw) To: Bob Tracy; +Cc: Michal Piotrowski, Ivan Kokshaysky, linux-kernel, linux-alpha On Sat, 7 Jul 2007, Bob Tracy wrote: > Michal Piotrowski wrote: > > On 05/07/07, Bob Tracy <rct@gherkin.frus.com> wrote: > > > This happened on an Alpha computer (433au) running 2.6.22-rc6. > > > > Can you reproduce this bug on 2.6.22-rc7-git6? My guess is that you'll find yes. > > > > > The > > > error was triggered when I started up a NX KDE session, which I've > > > done successfully on all occasions prior to this one. In other words, > > > I wasn't doing anything out of the ordinary... The machine is still up > > > and running as I type this, and can't/won't be rebooted for a few hours > > > if there's any other troubleshooting information I need to retrieve that > > > might be helpful. > > ACK on the suggestion to try -rc7-git6, but I'll probably wait until > Monday to give it a try. The client side of my NX "test fixture" is > at my day job location :-). Fair enough: and I'm expecting this to be a regression we introduced in 2.6.15, rather than recently in 2.6.22 (now, that's better isn't it ;-?) Helpful bad page state messages from your original post: >Bad page state in process 'gnome-terminal' >page:fffffc0000a407f0 flags:0x000000000000000c mapping:0000000000000000 mapcount:1 count:1 >Bad page state in process 'syslogd' >page:fffffc0000a40828 flags:0x000000000000000c mapping:0000000000000000 mapcount:1 count:1 And very helpful info from your followup: > Same type of "stuff" happening with 2.6.22-rc7. I've managed to narrow > it down somewhat. The page corruption happens only when I've got the sound > driver loaded: might be a DMA kind of thing that's killing me. Anyone got > any ideas how I might narrow it down further? The sound modules loaded > include ALSA's "snd_es18xx" with all the various OSS-compatibility modules. I think sound/isa/es18xx.c's snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, will take it to sound/core/memalloc.c's res = dma_alloc_coherent(dev, PAGE_SIZE << pg, dma, gfp_flags); where we've carefully included __GFP_COMP in gfp_flags to avoid this kind of problem (replacing the pre-2.6.15 use of PageReserved). > At the risk of making an inflammatory comment, I don't recall this kind of > thing happening when I was using the equivalent OSS driver. N.B.: the ALSA > driver only recently (in the past few months) became usable on the Alpha, > and I made the switch to ALSA as soon as it was feasible to do so. I may > try going back to the OSS driver (if it's still available) to see if the > problem goes away. That would at least confirm my suspicions as to where > the problem lies. No, don't blame ALSA for this. Blame me or Nick for removing the special PageReserved usage, or Alpha for ignoring our gfp_flags: #define dma_alloc_coherent(dev, size, addr, gfp) \ pci_alloc_consistent(alpha_gendev_to_pci(dev), size, addr) When you get a chance, please would you try patch below? It's not ideal: trying to satisfy a high-order allocation with GFP_ATOMIC is difficult once you get beyond system startup, but apparently that part worked for you before; and I don't think it'll do any harm - there were reasons we couldn't just add __GFP_COMP behaviour everywhere, but I don't think those could apply to the Alpha pci_alloc_consistent. It would be a lot better if an Alpha (CONFIG_PCI=y) dma_alloc_coherent were written to respect the dma flags passed in (masking off __GFP_DMA and __GFP_HIGHMEM? other arches seem to do that). And I wonder if its pci_alloc_consistent couldn't use GFP_KERNEL rather than GFP_ATOMIC, other arches seem to manage that. But I've no Alpha nor Alpha experience, I wouldn't dare to offer more than this one-liner. Thanks for reporting: please let us all know whether this patch does fix your problem: I may be guessing wrong. Hugh --- 2.6.22-rc7/arch/alpha/kernel/pci_iommu.c 2007-06-05 06:19:19.000000000 +0100 +++ linux/arch/alpha/kernel/pci_iommu.c 2007-07-07 15:00:04.000000000 +0100 @@ -402,7 +402,7 @@ pci_alloc_consistent(struct pci_dev *pde { void *cpu_addr; long order = get_order(size); - gfp_t gfp = GFP_ATOMIC; + gfp_t gfp = GFP_ATOMIC|__GFP_COMP; try_again: cpu_addr = (void *)__get_free_pages(gfp, order); ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: 2.6.22-rc6 bad page error 2007-07-07 18:38 ` Hugh Dickins @ 2007-07-08 21:05 ` Bob Tracy 2007-07-09 18:53 ` Bob Tracy 1 sibling, 0 replies; 10+ messages in thread From: Bob Tracy @ 2007-07-08 21:05 UTC (permalink / raw) To: Hugh Dickins Cc: Michal Piotrowski, Ivan Kokshaysky, linux-kernel, linux-alpha Hugh Dickins wrote: > (...) I'm expecting this to be a regression we introduced in > 2.6.15, rather than recently in 2.6.22 (now, that's better isn't it ;-?) I was reasonably certain this wasn't a recent regression. I share a set of speakers between two machines, and I hadn't used sound on the Alpha in quite a while. > Thanks for reporting: please let us all know whether this > patch does fix your problem: I may be guessing wrong. ACK. I'll build the kernel today, and fire up the test fixture tomorrow. -- ----------------------------------------------------------------------- Bob Tracy | "Eagles may soar, but weasels don't get rct@frus.com | sucked into jet engines." --Anon ----------------------------------------------------------------------- ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: 2.6.22-rc6 bad page error 2007-07-07 18:38 ` Hugh Dickins 2007-07-08 21:05 ` Bob Tracy @ 2007-07-09 18:53 ` Bob Tracy 2007-07-10 20:25 ` Hugh Dickins 1 sibling, 1 reply; 10+ messages in thread From: Bob Tracy @ 2007-07-09 18:53 UTC (permalink / raw) To: Hugh Dickins Cc: Michal Piotrowski, Ivan Kokshaysky, linux-kernel, linux-alpha Hugh Dickins wrote: > (...) I'm expecting this to be a regression we introduced in > 2.6.15, rather than recently in 2.6.22 (now, that's better isn't it ;-?) > (...) > I think sound/isa/es18xx.c's > snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, > will take it to sound/core/memalloc.c's > res = dma_alloc_coherent(dev, PAGE_SIZE << pg, dma, gfp_flags); > where we've carefully included __GFP_COMP in gfp_flags to avoid this > kind of problem (replacing the pre-2.6.15 use of PageReserved). > (...) > Blame me or Nick for removing the > special PageReserved usage, or Alpha for ignoring our gfp_flags: > > #define dma_alloc_coherent(dev, size, addr, gfp) \ > pci_alloc_consistent(alpha_gendev_to_pci(dev), size, addr) > > When you get a chance, please would you try patch below? > > --- 2.6.22-rc7/arch/alpha/kernel/pci_iommu.c 2007-06-05 06:19:19.000000000 +0100 > +++ linux/arch/alpha/kernel/pci_iommu.c 2007-07-07 15:00:04.000000000 +0100 That seems to have done the trick. Normally, I get the "bad page" errors on the second NX session, but I'm on the third session of the day (thus far), and everything seems to be ok as far as I can tell. -- ----------------------------------------------------------------------- Bob Tracy | "Eagles may soar, but weasels don't get rct@frus.com | sucked into jet engines." --Anon ----------------------------------------------------------------------- ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: 2.6.22-rc6 bad page error 2007-07-09 18:53 ` Bob Tracy @ 2007-07-10 20:25 ` Hugh Dickins 2007-07-11 13:02 ` Ivan Kokshaysky 0 siblings, 1 reply; 10+ messages in thread From: Hugh Dickins @ 2007-07-10 20:25 UTC (permalink / raw) To: Bob Tracy; +Cc: Michal Piotrowski, Ivan Kokshaysky, linux-kernel, linux-alpha On Mon, 9 Jul 2007, Bob Tracy wrote: > > > > --- 2.6.22-rc7/arch/alpha/kernel/pci_iommu.c 2007-06-05 06:19:19.000000000 +0100 > > +++ linux/arch/alpha/kernel/pci_iommu.c 2007-07-07 15:00:04.000000000 +0100 > > That seems to have done the trick. Normally, I get the "bad page" > errors on the second NX session, but I'm on the third session of the > day (thus far), and everything seems to be ok as far as I can tell. Thanks a lot for the feedback, that tells us we've made the right guesses, and my __GFP_COMP patch should be a good bandaid for you; but for the right patch, let's wait to hear from Ivan. Hugh ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: 2.6.22-rc6 bad page error 2007-07-10 20:25 ` Hugh Dickins @ 2007-07-11 13:02 ` Ivan Kokshaysky 2007-07-11 17:07 ` Hugh Dickins 0 siblings, 1 reply; 10+ messages in thread From: Ivan Kokshaysky @ 2007-07-11 13:02 UTC (permalink / raw) To: Hugh Dickins Cc: Bob Tracy, Michal Piotrowski, linux-kernel, linux-alpha, Andrew Morton On Tue, Jul 10, 2007 at 09:25:50PM +0100, Hugh Dickins wrote: > On Mon, 9 Jul 2007, Bob Tracy wrote: > > That seems to have done the trick. Normally, I get the "bad page" > > errors on the second NX session, but I'm on the third session of the > > day (thus far), and everything seems to be ok as far as I can tell. > > Thanks a lot for the feedback, that tells us we've made the right > guesses, and my __GFP_COMP patch should be a good bandaid for you; > but for the right patch, let's wait to hear from Ivan. Here it is. Bob, can you test this one? --- Take care of DMA flags passed to dma_alloc_coherent(). Particularly ALSA needs that. Signed-off-by: Ivan Kokshaysky <ink@jurassic.park.msu.ru> Ivan. --- 2.6.22/arch/alpha/kernel/pci_iommu.c Mon Jul 9 03:32:17 2007 +++ linux/arch/alpha/kernel/pci_iommu.c Wed Jul 11 14:40:37 2007 @@ -398,11 +398,13 @@ EXPORT_SYMBOL(pci_unmap_page); else DMA_ADDRP is undefined. */ void * -pci_alloc_consistent(struct pci_dev *pdev, size_t size, dma_addr_t *dma_addrp) +__pci_alloc_consistent(struct pci_dev *pdev, size_t size, + dma_addr_t *dma_addrp, gfp_t gfp) { void *cpu_addr; long order = get_order(size); - gfp_t gfp = GFP_ATOMIC; + + gfp &= ~GFP_DMA; try_again: cpu_addr = (void *)__get_free_pages(gfp, order); @@ -432,7 +434,7 @@ try_again: return cpu_addr; } -EXPORT_SYMBOL(pci_alloc_consistent); +EXPORT_SYMBOL(__pci_alloc_consistent); /* Free and unmap a consistent DMA buffer. CPU_ADDR and DMA_ADDR must be values that were returned from pci_alloc_consistent. SIZE must --- 2.6.22/include/asm-alpha/pci.h Mon Jul 9 03:32:17 2007 +++ linux/include/asm-alpha/pci.h Wed Jul 11 14:40:37 2007 @@ -75,7 +75,13 @@ extern inline void pcibios_penalize_isa_ successful and sets *DMA_ADDRP to the pci side dma address as well, else DMA_ADDRP is undefined. */ -extern void *pci_alloc_consistent(struct pci_dev *, size_t, dma_addr_t *); +extern void *__pci_alloc_consistent(struct pci_dev *, size_t, + dma_addr_t *, gfp_t); +static inline void * +pci_alloc_consistent(struct pci_dev *dev, size_t size, dma_addr_t *dma) +{ + return __pci_alloc_consistent(dev, size, dma, GFP_ATOMIC); +} /* Free and unmap a consistent DMA buffer. CPU_ADDR and DMA_ADDR must be values that were returned from pci_alloc_consistent. SIZE must --- 2.6.22/include/asm-alpha/dma-mapping.h Mon Jul 9 03:32:17 2007 +++ linux/include/asm-alpha/dma-mapping.h Wed Jul 11 14:40:37 2007 @@ -11,7 +11,7 @@ #define dma_unmap_single(dev, addr, size, dir) \ pci_unmap_single(alpha_gendev_to_pci(dev), addr, size, dir) #define dma_alloc_coherent(dev, size, addr, gfp) \ - pci_alloc_consistent(alpha_gendev_to_pci(dev), size, addr) + __pci_alloc_consistent(alpha_gendev_to_pci(dev), size, addr, gfp) #define dma_free_coherent(dev, size, va, addr) \ pci_free_consistent(alpha_gendev_to_pci(dev), size, va, addr) #define dma_map_page(dev, page, off, size, dir) \ ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: 2.6.22-rc6 bad page error 2007-07-11 13:02 ` Ivan Kokshaysky @ 2007-07-11 17:07 ` Hugh Dickins 2007-07-12 9:46 ` Ivan Kokshaysky 0 siblings, 1 reply; 10+ messages in thread From: Hugh Dickins @ 2007-07-11 17:07 UTC (permalink / raw) To: Ivan Kokshaysky Cc: Bob Tracy, Michal Piotrowski, linux-kernel, linux-alpha, Andrew Morton On Wed, 11 Jul 2007, Ivan Kokshaysky wrote: > On Tue, Jul 10, 2007 at 09:25:50PM +0100, Hugh Dickins wrote: > > On Mon, 9 Jul 2007, Bob Tracy wrote: > > > That seems to have done the trick. Normally, I get the "bad page" > > > errors on the second NX session, but I'm on the third session of the > > > day (thus far), and everything seems to be ok as far as I can tell. > > > > Thanks a lot for the feedback, that tells us we've made the right > > guesses, and my __GFP_COMP patch should be a good bandaid for you; > > but for the right patch, let's wait to hear from Ivan. > > Here it is. Bob, can you test this one? > > --- > > Take care of DMA flags passed to dma_alloc_coherent(). > Particularly ALSA needs that. > > Signed-off-by: Ivan Kokshaysky <ink@jurassic.park.msu.ru> Yes, I agree that's the right way to go. Aside from fixing Bob's crash, it also liberates ALSA from needing GFP_ATOMIC there on Alpha. Couple of GFP_ notes below. Hugh > > Ivan. > > --- 2.6.22/arch/alpha/kernel/pci_iommu.c Mon Jul 9 03:32:17 2007 > +++ linux/arch/alpha/kernel/pci_iommu.c Wed Jul 11 14:40:37 2007 > @@ -398,11 +398,13 @@ EXPORT_SYMBOL(pci_unmap_page); > else DMA_ADDRP is undefined. */ > > void * > -pci_alloc_consistent(struct pci_dev *pdev, size_t size, dma_addr_t *dma_addrp) > +__pci_alloc_consistent(struct pci_dev *pdev, size_t size, > + dma_addr_t *dma_addrp, gfp_t gfp) > { > void *cpu_addr; > long order = get_order(size); > - gfp_t gfp = GFP_ATOMIC; > + > + gfp &= ~GFP_DMA; The canonical form for this masking, even on arches without HIGHMEM, appears to be: gfp &= ~(__GFP_DMA | __GFP_HIGHMEM); But I guess that won't make any actual difference. > > try_again: > cpu_addr = (void *)__get_free_pages(gfp, order); > @@ -432,7 +434,7 @@ try_again: > > return cpu_addr; > } > -EXPORT_SYMBOL(pci_alloc_consistent); > +EXPORT_SYMBOL(__pci_alloc_consistent); > > /* Free and unmap a consistent DMA buffer. CPU_ADDR and DMA_ADDR must > be values that were returned from pci_alloc_consistent. SIZE must > --- 2.6.22/include/asm-alpha/pci.h Mon Jul 9 03:32:17 2007 > +++ linux/include/asm-alpha/pci.h Wed Jul 11 14:40:37 2007 > @@ -75,7 +75,13 @@ extern inline void pcibios_penalize_isa_ > successful and sets *DMA_ADDRP to the pci side dma address as well, > else DMA_ADDRP is undefined. */ > > -extern void *pci_alloc_consistent(struct pci_dev *, size_t, dma_addr_t *); > +extern void *__pci_alloc_consistent(struct pci_dev *, size_t, > + dma_addr_t *, gfp_t); > +static inline void * > +pci_alloc_consistent(struct pci_dev *dev, size_t size, dma_addr_t *dma) > +{ > + return __pci_alloc_consistent(dev, size, dma, GFP_ATOMIC); I was going to ask you why that needs to be GFP_ATOMIC on Alpha. But find you're following the example of asm-generic and others. So really should be asking Sparc how it gets away with GFP_KERNEL. > +} > > /* Free and unmap a consistent DMA buffer. CPU_ADDR and DMA_ADDR must > be values that were returned from pci_alloc_consistent. SIZE must > --- 2.6.22/include/asm-alpha/dma-mapping.h Mon Jul 9 03:32:17 2007 > +++ linux/include/asm-alpha/dma-mapping.h Wed Jul 11 14:40:37 2007 > @@ -11,7 +11,7 @@ > #define dma_unmap_single(dev, addr, size, dir) \ > pci_unmap_single(alpha_gendev_to_pci(dev), addr, size, dir) > #define dma_alloc_coherent(dev, size, addr, gfp) \ > - pci_alloc_consistent(alpha_gendev_to_pci(dev), size, addr) > + __pci_alloc_consistent(alpha_gendev_to_pci(dev), size, addr, gfp) > #define dma_free_coherent(dev, size, va, addr) \ > pci_free_consistent(alpha_gendev_to_pci(dev), size, va, addr) > #define dma_map_page(dev, page, off, size, dir) \ ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: 2.6.22-rc6 bad page error 2007-07-11 17:07 ` Hugh Dickins @ 2007-07-12 9:46 ` Ivan Kokshaysky 2007-07-12 16:13 ` Hugh Dickins 0 siblings, 1 reply; 10+ messages in thread From: Ivan Kokshaysky @ 2007-07-12 9:46 UTC (permalink / raw) To: Hugh Dickins Cc: Bob Tracy, Michal Piotrowski, linux-kernel, linux-alpha, Andrew Morton On Wed, Jul 11, 2007 at 06:07:59PM +0100, Hugh Dickins wrote: > > + gfp &= ~GFP_DMA; > > The canonical form for this masking, even on arches without HIGHMEM, > appears to be: > gfp &= ~(__GFP_DMA | __GFP_HIGHMEM); > But I guess that won't make any actual difference. As far as I can see, none of 64-bit architectures masks the HIGHMEM (or any other) bits. It's just not obvious because most of their "alloc_coherent" routines are hidden in iommu_ops or something like that. > > + return __pci_alloc_consistent(dev, size, dma, GFP_ATOMIC); > > I was going to ask you why that needs to be GFP_ATOMIC on Alpha. > But find you're following the example of asm-generic and others. > So really should be asking Sparc how it gets away with GFP_KERNEL. According to DMA-mapping.txt GFP_ATOMIC is mandatory for pci_alloc_consistent() since it can be called from interrupt context. So sparc code is probably incorrect... Ivan. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: 2.6.22-rc6 bad page error 2007-07-12 9:46 ` Ivan Kokshaysky @ 2007-07-12 16:13 ` Hugh Dickins 0 siblings, 0 replies; 10+ messages in thread From: Hugh Dickins @ 2007-07-12 16:13 UTC (permalink / raw) To: Bill Irwin Cc: Ivan Kokshaysky, Bob Tracy, Michal Piotrowski, linux-kernel, linux-alpha, Andrew Morton On Thu, 12 Jul 2007, Ivan Kokshaysky wrote: > On Wed, Jul 11, 2007 at 06:07:59PM +0100, Hugh Dickins wrote: > > > > + return __pci_alloc_consistent(dev, size, dma, GFP_ATOMIC); > > > > I was going to ask you why that needs to be GFP_ATOMIC on Alpha. > > But find you're following the example of asm-generic and others. > > So really should be asking Sparc how it gets away with GFP_KERNEL. > > According to DMA-mapping.txt GFP_ATOMIC is mandatory for > pci_alloc_consistent() since it can be called from interrupt context. > So sparc code is probably incorrect... Hi Bill, we've veered away from the original topic, and are wondering how the sparc32 pci_alloc_consistent() gets away with using GFP_KERNEL, when GFP_ATOMIC seems to be required? Hugh ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2007-07-12 16:13 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20070705195835.AAB19DBA1@gherkin.frus.com>
2007-07-07 13:48 ` 2.6.22-rc6 bad page error Michal Piotrowski
2007-07-07 14:56 ` Bob Tracy
2007-07-07 18:38 ` Hugh Dickins
2007-07-08 21:05 ` Bob Tracy
2007-07-09 18:53 ` Bob Tracy
2007-07-10 20:25 ` Hugh Dickins
2007-07-11 13:02 ` Ivan Kokshaysky
2007-07-11 17:07 ` Hugh Dickins
2007-07-12 9:46 ` Ivan Kokshaysky
2007-07-12 16:13 ` Hugh Dickins
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).