On Thu, Dec 10, 2009 at 12:50:38AM +0100, Domenico Andreoli wrote: > On Tue, Dec 08, 2009 at 12:44:04AM +0100, Domenico Andreoli wrote: > > On Sat, Dec 05, 2009 at 09:35:11AM +0100, Domenico Andreoli wrote: > > > On Fri, Dec 04, 2009 at 07:50:10PM +0100, Helge Deller wrote: > > > > > > > I just want to make sure, that you have more or less a correct kernel > > > > configuration setup (.config).... > > > > > > there is at least a configuration glitch which makes my kernel hang > > > and the debian one continue in degraded mode. i attached also the > > > configuration, just in case i forgot something important. > > > > i found the configuration glitch, it is CONFIG_DEBUG_MUTEXES. if it is > > set, 64bit hangs right after "Releasing cpu 1 now, hpa=...", otherwise > > the 64bit boot continues with a "SMP: CPU:1 is stuck." > > i was wrong, it's again CONFIG_DEBUG_SPINLOCK. if it is set, the > boot hangs. i bisected something, commit 44048d700bcbfaf4bcca6e2e0a73d89d01ec0878 breaks my SMP parisc64. before it, kernel boots with 2 CPUs (as did 2.6.22). after it, it hangs at "Releasing cpu 1 now, hpa=fffffffffffa2000" but CONFIG_DEBUG_SPINLOCK is _not_ set, the opposite i reported in this thread at 64bit and consistently with current 2.6.32 at 32bit. i'm pretty confused by the whole thing but i'm sure about this bisection, i double-checked it. here is the diff. --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -749,23 +749,6 @@ int move_freepages_block(struct zone *zone, struct page *page, int migratetype) return move_freepages(zone, start_page, end_page, migratetype); } -/* Return the page with the lowest PFN in the list */ -static struct page *min_page(struct list_head *list) -{ - unsigned long min_pfn = -1UL; - struct page *min_page = NULL, *page;; - - list_for_each_entry(page, list, lru) { - unsigned long pfn = page_to_pfn(page); - if (pfn < min_pfn) { - min_pfn = pfn; - min_page = page; - } - } - - return min_page; -} - /* Remove an element from the buddy allocator from the fallback list */ static struct page *__rmqueue_fallback(struct zone *zone, int order, int start_migratetype) @@ -789,11 +772,8 @@ static struct page *__rmqueue_fallback(struct zone *zone, int order, if (list_empty(&area->free_list[migratetype])) continue; - /* Bias kernel allocations towards low pfns */ page = list_entry(area->free_list[migratetype].next, struct page, lru); - if (unlikely(start_migratetype != MIGRATE_MOVABLE)) - page = min_page(&area->free_list[migratetype]); area->nr_free--; /* -----[ Domenico Andreoli, aka cavok --[ http://www.dandreoli.com/gpgkey.asc ---[ 3A0F 2F80 F79C 678A 8936 4FEE 0677 9033 A20E BC50 -- To unsubscribe from this list: send the line "unsubscribe linux-parisc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html