* Re: [PATCH] hibernate / memory hotplug: always use for_each_populated_zone() [not found] ` <4A64E1D6.8090102@crca.org.au> @ 2009-07-21 7:15 ` Heiko Carstens 2009-07-21 7:21 ` Nick Piggin 2009-07-21 7:38 ` KAMEZAWA Hiroyuki 0 siblings, 2 replies; 9+ messages in thread From: Heiko Carstens @ 2009-07-21 7:15 UTC (permalink / raw) To: Nigel Cunningham Cc: Gerald Schaefer, Rafael J. Wysocki, Andrew Morton, linux-kernel, Martin Schwidefsky, KOSAKI Motohiro, KAMEZAWA Hiroyuki, Yasunori Goto, Nick Piggin, linux-mm On Tue, Jul 21, 2009 at 07:29:58AM +1000, Nigel Cunningham wrote: > Hi. > > Gerald Schaefer wrote: > > From: Gerald Schaefer <gerald.schaefer@de.ibm.com> > > > > Use for_each_populated_zone() instead of for_each_zone() in hibernation > > code. This fixes a bug on s390, where we allow both config options > > HIBERNATION and MEMORY_HOTPLUG, so that we also have a ZONE_MOVABLE > > here. We only allow hibernation if no memory hotplug operation was > > performed, so in fact both features can only be used exclusively, but > > this way we don't need 2 differently configured (distribution) kernels. > > > > If we have an unpopulated ZONE_MOVABLE, we allow hibernation but run > > into a BUG_ON() in memory_bm_test/set/clear_bit() because hibernation > > code iterates through all zones, not only the populated zones, in > > several places. For example, swsusp_free() does for_each_zone() and > > then checks for pfn_valid(), which is true even if the zone is not > > populated, resulting in a BUG_ON() later because the pfn cannot be > > found in the memory bitmap. > > I agree with your logic and patch, but doesn't this also imply that the > s390 implementation pfn_valid should be changed to return false for > those pages? For CONFIG_SPARSEMEM, which s390 uses, there is no architecture specific pfn_valid() implementation. Also it looks like the semantics of pfn_valid() aren't clear. At least for sparsemem it means nothing but "the memmap for the section this page belongs to exists". So it just means the struct page for the pfn exists. We still have pfn_present() for CONFIG_SPARSEMEM. But that just means "some pages in the section this pfn belongs to are present." So it looks like checking for pfn_valid() and afterwards checking for PG_Reserved (?) might give what one would expect. Looks all a bit confusing to me. Or maybe it's just me who is confused? :) -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] hibernate / memory hotplug: always use for_each_populated_zone() 2009-07-21 7:15 ` [PATCH] hibernate / memory hotplug: always use for_each_populated_zone() Heiko Carstens @ 2009-07-21 7:21 ` Nick Piggin 2009-07-21 7:38 ` KAMEZAWA Hiroyuki 1 sibling, 0 replies; 9+ messages in thread From: Nick Piggin @ 2009-07-21 7:21 UTC (permalink / raw) To: Heiko Carstens Cc: Nigel Cunningham, Gerald Schaefer, Rafael J. Wysocki, Andrew Morton, linux-kernel, Martin Schwidefsky, KOSAKI Motohiro, KAMEZAWA Hiroyuki, Yasunori Goto, linux-mm On Tue, Jul 21, 2009 at 09:15:08AM +0200, Heiko Carstens wrote: > On Tue, Jul 21, 2009 at 07:29:58AM +1000, Nigel Cunningham wrote: > > Hi. > > > > Gerald Schaefer wrote: > > > From: Gerald Schaefer <gerald.schaefer@de.ibm.com> > > > > > > Use for_each_populated_zone() instead of for_each_zone() in hibernation > > > code. This fixes a bug on s390, where we allow both config options > > > HIBERNATION and MEMORY_HOTPLUG, so that we also have a ZONE_MOVABLE > > > here. We only allow hibernation if no memory hotplug operation was > > > performed, so in fact both features can only be used exclusively, but > > > this way we don't need 2 differently configured (distribution) kernels. > > > > > > If we have an unpopulated ZONE_MOVABLE, we allow hibernation but run > > > into a BUG_ON() in memory_bm_test/set/clear_bit() because hibernation > > > code iterates through all zones, not only the populated zones, in > > > several places. For example, swsusp_free() does for_each_zone() and > > > then checks for pfn_valid(), which is true even if the zone is not > > > populated, resulting in a BUG_ON() later because the pfn cannot be > > > found in the memory bitmap. > > > > I agree with your logic and patch, but doesn't this also imply that the > > s390 implementation pfn_valid should be changed to return false for > > those pages? > > For CONFIG_SPARSEMEM, which s390 uses, there is no architecture specific > pfn_valid() implementation. > Also it looks like the semantics of pfn_valid() aren't clear. > At least for sparsemem it means nothing but "the memmap for the section > this page belongs to exists". So it just means the struct page for the > pfn exists. > We still have pfn_present() for CONFIG_SPARSEMEM. But that just means > "some pages in the section this pfn belongs to are present." > So it looks like checking for pfn_valid() and afterwards checking > for PG_Reserved (?) might give what one would expect. > Looks all a bit confusing to me. > Or maybe it's just me who is confused? :) It would be nice to remove PG_reserved (most architectures also set it I think for kernel text and IIRC bootmem), it could then be used as a PG_arch_2 bit, and we could ask architectures to impement pfn_is_ram (or whatever's going to be most useful). -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] hibernate / memory hotplug: always use for_each_populated_zone() 2009-07-21 7:15 ` [PATCH] hibernate / memory hotplug: always use for_each_populated_zone() Heiko Carstens 2009-07-21 7:21 ` Nick Piggin @ 2009-07-21 7:38 ` KAMEZAWA Hiroyuki 2009-07-21 14:11 ` Rafael J. Wysocki 1 sibling, 1 reply; 9+ messages in thread From: KAMEZAWA Hiroyuki @ 2009-07-21 7:38 UTC (permalink / raw) To: Heiko Carstens Cc: Nigel Cunningham, Gerald Schaefer, Rafael J. Wysocki, Andrew Morton, linux-kernel, Martin Schwidefsky, KOSAKI Motohiro, Yasunori Goto, Nick Piggin, linux-mm On Tue, 21 Jul 2009 09:15:08 +0200 Heiko Carstens <heiko.carstens@de.ibm.com> wrote: > On Tue, Jul 21, 2009 at 07:29:58AM +1000, Nigel Cunningham wrote: > > Hi. > > > > Gerald Schaefer wrote: > > > From: Gerald Schaefer <gerald.schaefer@de.ibm.com> > > > > > > Use for_each_populated_zone() instead of for_each_zone() in hibernation > > > code. This fixes a bug on s390, where we allow both config options > > > HIBERNATION and MEMORY_HOTPLUG, so that we also have a ZONE_MOVABLE > > > here. We only allow hibernation if no memory hotplug operation was > > > performed, so in fact both features can only be used exclusively, but > > > this way we don't need 2 differently configured (distribution) kernels. > > > > > > If we have an unpopulated ZONE_MOVABLE, we allow hibernation but run > > > into a BUG_ON() in memory_bm_test/set/clear_bit() because hibernation > > > code iterates through all zones, not only the populated zones, in > > > several places. For example, swsusp_free() does for_each_zone() and > > > then checks for pfn_valid(), which is true even if the zone is not > > > populated, resulting in a BUG_ON() later because the pfn cannot be > > > found in the memory bitmap. > > > > I agree with your logic and patch, but doesn't this also imply that the > > s390 implementation pfn_valid should be changed to return false for > > those pages? > > For CONFIG_SPARSEMEM, which s390 uses, there is no architecture specific > pfn_valid() implementation. > Also it looks like the semantics of pfn_valid() aren't clear. > At least for sparsemem it means nothing but "the memmap for the section > this page belongs to exists". So it just means the struct page for the > pfn exists. Historically, pfn_valid() just means "there is a memmap." no other meanings in any configs/archs. > We still have pfn_present() for CONFIG_SPARSEMEM. But that just means > "some pages in the section this pfn belongs to are present." It just exists for sparsemem internal purpose IIUC. > So it looks like checking for pfn_valid() and afterwards checking > for PG_Reserved (?) might give what one would expect. I think so, too. If memory is offline, PG_reserved is always set. In general, it's expected that "page is contiguous in MAX_ORDER range" and no memory holes in MAX_ORDER. In most case, PG_reserved is checked for skipping not-existing memory. > Looks all a bit confusing to me. > Or maybe it's just me who is confused? :) > IIRC, there are no generic interface to know whether there is a physical page. pfn_valid() is only for memmap and people have used if (pfn_valid(pfn) && !PageReserved(page)) check. But, hmm, If hibernation have to save PG_reserved memory, general solution is use copy_user_page() and handle fault. Alternative is making use of walk_memory_resource() as memory hotplug does. It checks resource information registered. Thanks, -Kame -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] hibernate / memory hotplug: always use for_each_populated_zone() 2009-07-21 7:38 ` KAMEZAWA Hiroyuki @ 2009-07-21 14:11 ` Rafael J. Wysocki 2009-07-22 0:25 ` KAMEZAWA Hiroyuki 2009-07-29 11:20 ` Gerald Schaefer 0 siblings, 2 replies; 9+ messages in thread From: Rafael J. Wysocki @ 2009-07-21 14:11 UTC (permalink / raw) To: KAMEZAWA Hiroyuki Cc: Heiko Carstens, Nigel Cunningham, Gerald Schaefer, Andrew Morton, linux-kernel, Martin Schwidefsky, KOSAKI Motohiro, Yasunori Goto, Nick Piggin, linux-mm On Tuesday 21 July 2009, KAMEZAWA Hiroyuki wrote: > On Tue, 21 Jul 2009 09:15:08 +0200 > Heiko Carstens <heiko.carstens@de.ibm.com> wrote: > > > On Tue, Jul 21, 2009 at 07:29:58AM +1000, Nigel Cunningham wrote: > > > Hi. > > > > > > Gerald Schaefer wrote: > > > > From: Gerald Schaefer <gerald.schaefer@de.ibm.com> > > > > > > > > Use for_each_populated_zone() instead of for_each_zone() in hibernation > > > > code. This fixes a bug on s390, where we allow both config options > > > > HIBERNATION and MEMORY_HOTPLUG, so that we also have a ZONE_MOVABLE > > > > here. We only allow hibernation if no memory hotplug operation was > > > > performed, so in fact both features can only be used exclusively, but > > > > this way we don't need 2 differently configured (distribution) kernels. > > > > > > > > If we have an unpopulated ZONE_MOVABLE, we allow hibernation but run > > > > into a BUG_ON() in memory_bm_test/set/clear_bit() because hibernation > > > > code iterates through all zones, not only the populated zones, in > > > > several places. For example, swsusp_free() does for_each_zone() and > > > > then checks for pfn_valid(), which is true even if the zone is not > > > > populated, resulting in a BUG_ON() later because the pfn cannot be > > > > found in the memory bitmap. > > > > > > I agree with your logic and patch, but doesn't this also imply that the > > > s390 implementation pfn_valid should be changed to return false for > > > those pages? > > > > For CONFIG_SPARSEMEM, which s390 uses, there is no architecture specific > > pfn_valid() implementation. > > Also it looks like the semantics of pfn_valid() aren't clear. > > At least for sparsemem it means nothing but "the memmap for the section > > this page belongs to exists". So it just means the struct page for the > > pfn exists. > > Historically, pfn_valid() just means "there is a memmap." no other meanings > in any configs/archs. Is this documented anywhere actually? > > We still have pfn_present() for CONFIG_SPARSEMEM. But that just means > > "some pages in the section this pfn belongs to are present." > > It just exists for sparsemem internal purpose IIUC. > > > > So it looks like checking for pfn_valid() and afterwards checking > > for PG_Reserved (?) might give what one would expect. > I think so, too. If memory is offline, PG_reserved is always set. > > In general, it's expected that "page is contiguous in MAX_ORDER range" > and no memory holes in MAX_ORDER. In most case, PG_reserved is checked > for skipping not-existing memory. PG_reserved is also set for kernel text, at least on some architectures, and for some other areas that we want to save. > > Looks all a bit confusing to me. > > Or maybe it's just me who is confused? :) > > > IIRC, there are no generic interface to know whether there is a physical page. We need to know that for hibernation, though. Well, there is a mechanism for marking making address ranges that are never to be saved, but they need to be known during initialisation already. > pfn_valid() is only for memmap and people have used > if (pfn_valid(pfn) && !PageReserved(page)) > check. > But, hmm, If hibernation have to save PG_reserved memory, general solution is > use copy_user_page() and handle fault. That's not exactly straightforward IMHO. > Alternative is making use of walk_memory_resource() as memory hotplug does. > It checks resource information registered. I'd be fine with any _simple_ mechanism allowing us to check whether there's a physical page frame for given page (or given PFN). Best, Rafael -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] hibernate / memory hotplug: always use for_each_populated_zone() 2009-07-21 14:11 ` Rafael J. Wysocki @ 2009-07-22 0:25 ` KAMEZAWA Hiroyuki 2009-07-22 0:38 ` KAMEZAWA Hiroyuki 2009-07-22 17:49 ` Rafael J. Wysocki 2009-07-29 11:20 ` Gerald Schaefer 1 sibling, 2 replies; 9+ messages in thread From: KAMEZAWA Hiroyuki @ 2009-07-22 0:25 UTC (permalink / raw) To: Rafael J. Wysocki Cc: Heiko Carstens, Nigel Cunningham, Gerald Schaefer, Andrew Morton, linux-kernel, Martin Schwidefsky, KOSAKI Motohiro, Yasunori Goto, Nick Piggin, linux-mm On Tue, 21 Jul 2009 16:11:08 +0200 "Rafael J. Wysocki" <rjw@sisk.pl> wrote: > On Tuesday 21 July 2009, KAMEZAWA Hiroyuki wrote: > > On Tue, 21 Jul 2009 09:15:08 +0200 > > Heiko Carstens <heiko.carstens@de.ibm.com> wrote: > > > > > On Tue, Jul 21, 2009 at 07:29:58AM +1000, Nigel Cunningham wrote: > > > > Hi. > > > > > > > > Gerald Schaefer wrote: > > > > > From: Gerald Schaefer <gerald.schaefer@de.ibm.com> > > > > > > > > > > Use for_each_populated_zone() instead of for_each_zone() in hibernation > > > > > code. This fixes a bug on s390, where we allow both config options > > > > > HIBERNATION and MEMORY_HOTPLUG, so that we also have a ZONE_MOVABLE > > > > > here. We only allow hibernation if no memory hotplug operation was > > > > > performed, so in fact both features can only be used exclusively, but > > > > > this way we don't need 2 differently configured (distribution) kernels. > > > > > > > > > > If we have an unpopulated ZONE_MOVABLE, we allow hibernation but run > > > > > into a BUG_ON() in memory_bm_test/set/clear_bit() because hibernation > > > > > code iterates through all zones, not only the populated zones, in > > > > > several places. For example, swsusp_free() does for_each_zone() and > > > > > then checks for pfn_valid(), which is true even if the zone is not > > > > > populated, resulting in a BUG_ON() later because the pfn cannot be > > > > > found in the memory bitmap. > > > > > > > > I agree with your logic and patch, but doesn't this also imply that the > > > > s390 implementation pfn_valid should be changed to return false for > > > > those pages? > > > > > > For CONFIG_SPARSEMEM, which s390 uses, there is no architecture specific > > > pfn_valid() implementation. > > > Also it looks like the semantics of pfn_valid() aren't clear. > > > At least for sparsemem it means nothing but "the memmap for the section > > > this page belongs to exists". So it just means the struct page for the > > > pfn exists. > > > > Historically, pfn_valid() just means "there is a memmap." no other meanings > > in any configs/archs. > > Is this documented anywhere actually? > When I helped developping SPARSEMEM, I goodled, I found Linus said that ;) But, from implementaion, it's a very clear fact. See CONFIG_FLATMEM, the simplest implemenation of memmap. It use a coutinous mem_map regardless of memory holes and pfn_valid() returns true if pfn < max_mapnr. #define pfn_valid(pfn) ((pfn) < max_mapnr) > > > We still have pfn_present() for CONFIG_SPARSEMEM. But that just means > > > "some pages in the section this pfn belongs to are present." > > > > It just exists for sparsemem internal purpose IIUC. > > > > > > > So it looks like checking for pfn_valid() and afterwards checking > > > for PG_Reserved (?) might give what one would expect. > > I think so, too. If memory is offline, PG_reserved is always set. > > > > In general, it's expected that "page is contiguous in MAX_ORDER range" > > and no memory holes in MAX_ORDER. In most case, PG_reserved is checked > > for skipping not-existing memory. > > PG_reserved is also set for kernel text, at least on some architectures, and > for some other areas that we want to save. > yes. > > > Looks all a bit confusing to me. > > > Or maybe it's just me who is confused? :) > > > > > IIRC, there are no generic interface to know whether there is a physical page. > > We need to know that for hibernation, though. > > Well, there is a mechanism for marking making address ranges that are never > to be saved, but they need to be known during initialisation already. > > > pfn_valid() is only for memmap and people have used > > if (pfn_valid(pfn) && !PageReserved(page)) > > check. > > But, hmm, If hibernation have to save PG_reserved memory, general solution is > > use copy_user_page() and handle fault. > > That's not exactly straightforward IMHO. > See ia64's ia64_pfn_valid(). It uses get_user() very effectively. (I think this cost cost is small in any arch...) 523 ia64_pfn_valid (unsigned long pfn) 524 { 525 char byte; 526 struct page *pg = pfn_to_page(pfn); 527 528 return (__get_user(byte, (char __user *) pg) == 0) 529 && ((((u64)pg & PAGE_MASK) == (((u64)(pg + 1) - 1) & PAGE_MASK)) 530 || (__get_user(byte, (char __user *) (pg + 1) - 1) == 0)); 531 } Adding function like this is not very hard. bool can_access_physmem(unsigned long pfn) { char byte; char *pg = __va(pfn << PAGE_SHIFT); return (__get_user(byte, pg) == 0) } and enough simple. But this may allow you to access remapped device's memory... Then, some range check will be required anyway. Can we detect io-remapped range from memmap or any ? (I think we'll have to skip PG_reserved page...) > > Alternative is making use of walk_memory_resource() as memory hotplug does. > > It checks resource information registered. > > I'd be fine with any _simple_ mechanism allowing us to check whether there's > a physical page frame for given page (or given PFN). > walk_memory_resource() is enough _simple_, IMHO. Now, I'm removing #ifdef CONFIG_MEMORY_HOTPLUG for walk_memory_resource() to rewrite /proc/kcore. Thanks, -Kame -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] hibernate / memory hotplug: always use for_each_populated_zone() 2009-07-22 0:25 ` KAMEZAWA Hiroyuki @ 2009-07-22 0:38 ` KAMEZAWA Hiroyuki 2009-07-22 17:49 ` Rafael J. Wysocki 1 sibling, 0 replies; 9+ messages in thread From: KAMEZAWA Hiroyuki @ 2009-07-22 0:38 UTC (permalink / raw) To: KAMEZAWA Hiroyuki Cc: Rafael J. Wysocki, Heiko Carstens, Nigel Cunningham, Gerald Schaefer, Andrew Morton, linux-kernel, Martin Schwidefsky, KOSAKI Motohiro, Yasunori Goto, Nick Piggin, linux-mm On Wed, 22 Jul 2009 09:25:35 +0900 KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> wrote: > See ia64's ia64_pfn_valid(). It uses get_user() very effectively. > (I think this cost cost is small in any arch...) > > 523 ia64_pfn_valid (unsigned long pfn) > 524 { > 525 char byte; > 526 struct page *pg = pfn_to_page(pfn); > 527 > 528 return (__get_user(byte, (char __user *) pg) == 0) > 529 && ((((u64)pg & PAGE_MASK) == (((u64)(pg + 1) - 1) & PAGE_MASK)) > 530 || (__get_user(byte, (char __user *) (pg + 1) - 1) == 0)); > 531 } > Just an explanation. This code is for checking "there is memmap or not" for CONFIG_VIRTUAL_MEMMAP+CONFIG_DISCONTIGMEM, which allocates memmap in virtually contiguous area. Because ia64 tends to have very sparse memory map, memmap cannot be allocated in continuous area and memmap has holes. This code checkes first byte and last byte of "struct page" is valid. Thanks, -Kame -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] hibernate / memory hotplug: always use for_each_populated_zone() 2009-07-22 0:25 ` KAMEZAWA Hiroyuki 2009-07-22 0:38 ` KAMEZAWA Hiroyuki @ 2009-07-22 17:49 ` Rafael J. Wysocki 2009-07-22 23:46 ` KAMEZAWA Hiroyuki 1 sibling, 1 reply; 9+ messages in thread From: Rafael J. Wysocki @ 2009-07-22 17:49 UTC (permalink / raw) To: KAMEZAWA Hiroyuki Cc: Heiko Carstens, Nigel Cunningham, Gerald Schaefer, Andrew Morton, linux-kernel, Martin Schwidefsky, KOSAKI Motohiro, Yasunori Goto, Nick Piggin, linux-mm On Wednesday 22 July 2009, KAMEZAWA Hiroyuki wrote: > On Tue, 21 Jul 2009 16:11:08 +0200 > "Rafael J. Wysocki" <rjw@sisk.pl> wrote: [...] > Adding function like this is not very hard. > > bool can_access_physmem(unsigned long pfn) > { > char byte; > char *pg = __va(pfn << PAGE_SHIFT); > return (__get_user(byte, pg) == 0) > } Unfortunately we can't use __get_user() for hibernation, because it may sleep. Some other mechanism would be necessary, it seems. > and enough simple. But this may allow you to access remapped device's memory... > Then, some range check will be required anyway. > Can we detect io-remapped range from memmap or any ? > (I think we'll have to skip PG_reserved page...) > > > > Alternative is making use of walk_memory_resource() as memory hotplug does. > > > It checks resource information registered. > > > > I'd be fine with any _simple_ mechanism allowing us to check whether there's > > a physical page frame for given page (or given PFN). > > > > walk_memory_resource() is enough _simple_, IMHO. > Now, I'm removing #ifdef CONFIG_MEMORY_HOTPLUG for walk_memory_resource() to > rewrite /proc/kcore. Hmm. Which architectures set CONFIG_ARCH_HAS_WALK_MEMORY ? Best, Rafael -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] hibernate / memory hotplug: always use for_each_populated_zone() 2009-07-22 17:49 ` Rafael J. Wysocki @ 2009-07-22 23:46 ` KAMEZAWA Hiroyuki 0 siblings, 0 replies; 9+ messages in thread From: KAMEZAWA Hiroyuki @ 2009-07-22 23:46 UTC (permalink / raw) To: Rafael J. Wysocki Cc: Heiko Carstens, Nigel Cunningham, Gerald Schaefer, Andrew Morton, linux-kernel, Martin Schwidefsky, KOSAKI Motohiro, Yasunori Goto, Nick Piggin, linux-mm On Wed, 22 Jul 2009 19:49:55 +0200 "Rafael J. Wysocki" <rjw@sisk.pl> wrote: > > and enough simple. But this may allow you to access remapped device's memory... > > Then, some range check will be required anyway. > > Can we detect io-remapped range from memmap or any ? > > (I think we'll have to skip PG_reserved page...) > > > > > > Alternative is making use of walk_memory_resource() as memory hotplug does. > > > > It checks resource information registered. > > > > > > I'd be fine with any _simple_ mechanism allowing us to check whether there's > > > a physical page frame for given page (or given PFN). > > > > > > > walk_memory_resource() is enough _simple_, IMHO. > > Now, I'm removing #ifdef CONFIG_MEMORY_HOTPLUG for walk_memory_resource() to > > rewrite /proc/kcore. > > Hmm. Which architectures set CONFIG_ARCH_HAS_WALK_MEMORY ? > ppc only. It has its own. I'm now prepareing a patch to remove #ifdef CONFIG_MEMORY_HOTPLUG for /proc/kcore and rename it to walk_system_ram_range(). plz see "kcore:...." patches currently posted to lkml if you are interested in. Thanks, -Kame Thanks, -Kame > Best, > Rafael -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] hibernate / memory hotplug: always use for_each_populated_zone() 2009-07-21 14:11 ` Rafael J. Wysocki 2009-07-22 0:25 ` KAMEZAWA Hiroyuki @ 2009-07-29 11:20 ` Gerald Schaefer 1 sibling, 0 replies; 9+ messages in thread From: Gerald Schaefer @ 2009-07-29 11:20 UTC (permalink / raw) To: Rafael J. Wysocki Cc: KAMEZAWA Hiroyuki, Heiko Carstens, Nigel Cunningham, Andrew Morton, linux-kernel, Martin Schwidefsky, KOSAKI Motohiro, Yasunori Goto, Nick Piggin, linux-mm Rafael J. Wysocki wrote: >>> So it looks like checking for pfn_valid() and afterwards checking >>> for PG_Reserved (?) might give what one would expect. >> I think so, too. If memory is offline, PG_reserved is always set. >> >> In general, it's expected that "page is contiguous in MAX_ORDER range" >> and no memory holes in MAX_ORDER. In most case, PG_reserved is checked >> for skipping not-existing memory. > > PG_reserved is also set for kernel text, at least on some architectures, and > for some other areas that we want to save. How about checking for PG_reserved && ZONE_MOVABLE? I think we don't have any special cases for PG_reserved inside ZONE_MOVABLE, but I'm not sure if this is true for all architectures and NUMA systems. If this would work, it could be a simple way to determine which hotplug memory should be saved. -- Regards, Gerald -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2009-07-29 11:21 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1248103551.23961.0.camel@localhost.localdomain>
[not found] ` <4A64E1D6.8090102@crca.org.au>
2009-07-21 7:15 ` [PATCH] hibernate / memory hotplug: always use for_each_populated_zone() Heiko Carstens
2009-07-21 7:21 ` Nick Piggin
2009-07-21 7:38 ` KAMEZAWA Hiroyuki
2009-07-21 14:11 ` Rafael J. Wysocki
2009-07-22 0:25 ` KAMEZAWA Hiroyuki
2009-07-22 0:38 ` KAMEZAWA Hiroyuki
2009-07-22 17:49 ` Rafael J. Wysocki
2009-07-22 23:46 ` KAMEZAWA Hiroyuki
2009-07-29 11:20 ` Gerald Schaefer
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).