Hi all, Changes since next-20080603: New trees: embedded and firmware. The hid tree picked up some conflicts with Linus' tree. The v4l-dvb tree needed a fixup patch due to some struct member renames that were missed. The rr tree fixed its conflicts. The semaphore-removal tree has gained another merge conflict, this time with the wireless tree. The ldp tree suffered from the v4l-dvb struct members renaming. The firmware tree has various conflicts and also a couple of build failures. I have applied the following temporary patch for known build problems: "Fix various 8390 builds" - the net tree broke builds on various architectures - hopefully this patch will go into the net tree shortly. ---------------------------------------------------------------------------- I have created today's linux-next tree at git://git.kernel.org/pub/scm/linux/kernel/git/sfr/linux-next.git (patches at http://www.kernel.org/pub/linux/kernel/people/sfr/linux-next/). If you are tracking the linux-next tree using git, you should not use "git pull" to do so as that will try to merge the new linux-next release with the old one. You should use "git fetch" as mentioned in the FAQ on the wiki (see below). You can see which trees have been included by looking in the Next/Trees file in the source. There are also quilt-import.log and merge.log files in the Next directory. Between each merge, the tree was built with a ppc64_defconfig for powerpc and an allmodconfig for x86_64. After the final fixups, it is also built with powerpc allnoconfig, 44x_defconfig and allyesconfig and i386, sparc and sparc64 defconfig. Below is a summary of the state of the merge. We are up to 87 trees (counting Linus' and 13 trees of patches pending for Linus' tree), more are welcome (even if they are currently empty). Thanks to those who have contributed, and to those who haven't, please do. Status of my local build tests will be at http://kisskb.ellerman.id.au/linux-next . If maintainers want to ...
Hi Stephen, The next-20080604 kernel build fails on the x86_64 machine make: *** No rule to make target `/usr/local/autobench/autotest/tmp/build/linux/$(dir)', needed by `firmware/keyspan/mpr.fw.gen.S'. Stop. make: *** [firmware] Error 2 -- Thanks & Regards, Kamalesh Babulal, Linux Technology Center, IBM, ISTL.
Hm, what version of make? Does .SECONDEXPANSION: not work everywhere? If you remove the '| $(objtree)/$$(dir %)' dependency from firmware/Makefile line 90, does it work then? You might have to remove other similar deps -- they're only for O= builds anyway. -- dwmw2 --
What does this Makefile do for you... FOO=foo .SECONDEXPANSION: bar: $$(FOO) -- dwmw2 --
It is a new feature in GNU make 3.81, which was released slightly over two years ago. Segher --
Hm, Ok. I'll stick in a workaround. Thanks. diff --git a/firmware/Makefile b/firmware/Makefile index b4f758a..166a9b0 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -83,6 +83,13 @@ wordsize_deps := $(wildcard include/config/64bit.h include/config/32bit.h \ include/config/superh32.h include/config/superh64.h \ include/config/x86_32.h include/config/x86_64.h) +# Workaround for ancient versions of make, where .SECONDEXPANSION doesn't work. +# It'll end up depending on these targets, so make them a PHONY rule which +# depends on _all_ the directories in $(firmware-dirs), and it'll work out OK. +PHONY += $(objtree)/$$(%) $(objtree)/$(obj)/$$(%) +$(objtree)/$$(%) $(objtree)/$(obj)/$$(%): $(firmware-dirs) + @true + # For the $$(dir %) trick, where we need % to be expanded first. .SECONDEXPANSION: -- dwmw2 --
Can you write make < 3.81 instead? We do know the version and this will make it easier in a few years to cu Adrian -- "Is there not promise of rain?" Ling Tan asked suddenly out of the darkness. There had been need of rain for many days. "Only a promise," Lao Er said. Pearl S. Buck - Dragon Seed --
Done. -- dwmw2 --
cu Adrian -- "Is there not promise of rain?" Ling Tan asked suddenly out of the darkness. There had been need of rain for many days. "Only a promise," Lao Er said. Pearl S. Buck - Dragon Seed --
The make version used is # make -v GNU Make 3.80 Thanks the patch, the build failure is fixed but the kernel panics while booting the machine BUG: unable to handle kernel paging request at 0000000000003708 IP: [<ffffffff8026cd89>] __alloc_pages_internal+0xc0/0x3d3 PGD 0 Oops: 0000  SMP last sysfs file: CPU 0 Modules linked in: Pid: 1, comm: swapper Not tainted 2.6.26-rc4-next-20080604-autotest #1 RIP: 0010:[<ffffffff8026cd89>] [<ffffffff8026cd89>] __alloc_pages_internal+0xc0/0x3d3 RSP: 0000:ffff81003f9e1c00 EFLAGS: 00010246 RAX: 0000000000000000 RBX: 00000000000012d0 RCX: 0000000000000000 RDX: 0000000000003700 RSI: 00000000000005c4 RDI: ffffffff805cfb76 RBP: 0000000000000001 R08: 0000000000000000 R09: 0000000000000018 R10: 0000000000000003 R11: ffffffff8035677d R12: 0000000000003700 R13: 0000000000000000 R14: ffff81003f9d8000 R15: 0000000000000001 FS: 0000000000000000(0000) GS:ffffffff806afe80(0000) knlGS:0000000000000000 CS: 0010 DS: 0018 ES: 0018 CR0: 000000008005003b CR2: 0000000000003708 CR3: 0000000000201000 CR4: 00000000000006e0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 Process swapper (pid: 1, threadinfo ffff81003f9e0000, task ffff81003f9d8000) Stack: 0000000000000000 0000000000000000 ffff81000103b000 0000000200000010 0000000000000000 0000000000000000 00000000ffffffff ffffffff80399b6b ffff81000103b000 ffff8100010118e0 0000000000000001 00000000000000d0 Call Trace: [<ffffffff80399b6b>] notify_update+0x2b/0x30 [<ffffffff8028bb77>] new_slab+0x91/0x268 [<ffffffff8028bf64>] __slab_alloc+0x1d5/0x3c1 [<ffffffff8022ce21>] __build_sched_domains+0x688/0x9eb [<ffffffff8022c629>] sched_domain_node_span+0xc9/0xf3 [<ffffffff8028c457>] kmem_cache_alloc_node+0x3e/0x73 [<ffffffff8022ce21>] __build_sched_domains+0x688/0x9eb [<ffffffff806d0f72>] setup_ioapic_dest+0x30/0xd7 [<ffffffff8022d5dc>] arch_init_sched_domains+0x69/0x76 [<ffffffff806d51d5>] ...
Does this 'fix' it? diff --git a/firmware/Makefile b/firmware/Makefile index b4f758a..5244ea4 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -83,7 +83,20 @@ wordsize_deps := $(wildcard include/config/64bit.h include/config/32bit.h \ include/config/superh32.h include/config/superh64.h \ include/config/x86_32.h include/config/x86_64.h) -# For the $$(dir %) trick, where we need % to be expanded first. +# .SECONDEXPANSION for the $$(dir %) trick, where we need % to be expanded +# first before we expand the $(dir ...). And a workaround for broken make. +PHONY += make-warning +make-warning: + @echo '*************' + @echo 'WARNING: Your version of make ($(MAKE_VERSION)) seems not to work' + @echo 'correctly with .SECONDEXPANSION: as used in firmware/Makefile.' + @echo 'Creating directories in advance instead of on-demand' + @echo '*************' + +PHONY += $(objtree)/$$(%) $(objtree)/$(obj)/$$(%) +$(objtree)/$$(%) $(objtree)/$(obj)/$$(%): make-warning $(firmware-dirs) + @true + .SECONDEXPANSION: $(patsubst %,$(obj)/%.gen.S, $(fw-shipped-y)): %: $(wordsize_deps) \ -- dwmw2 --
The correct fix is to get rid of make 3.81 features. We do want the kernel buildable with make 3.79 and we have today only two places where we do need a newer version of make: scripts/Makefile.headerinst and now firmware/Makefile Both places should be reworked to avoid this dependency. I plan to take care of Makfile.headerinst soonish in an attempt to speed up the checking process (has been on my TODO list for a long time), And we should not introuduce the below make 3.81 specific feature. I have not looked into alternative - sorry. Sam --
I've committed an alternative for firmware/Makefile. What's the problem in Makefile.headersinst? -- dwmw2 --
It uses order-only in this line: $(objhdr-y) $(subdir-y) $(header-y) $(unifdef-y): | $(INSTAL