Topic
10 replies Latest Post - ‏2012-03-15T15:47:07Z by RCJ
tjacks55
tjacks55
8 Posts
ACCEPTED ANSWER

Pinned topic RHEL 5.8 kernel 2.6.18-308 rebuild with 4k pages

‏2012-03-13T14:53:55Z |
I am trying to rebuild using 4k pages with the latest kernel 2.6.18-308 from our yum repo, and am getting the follow error on the rpm build when following the 4k page build guide.  Any assistance would be greatly appreciated. 
 
[root@servername redhat]# rpmbuild -ba --target ppc64 --without kabichk SPECS/kernel.spec 
Building target platforms: ppc64
Building for target ppc64
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.70843
+ umask 022
+ cd /usr/src/redhat/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ '[' '!' -d kernel-2.6.18/vanilla-2.6.18.4 ']'
+ cd kernel-2.6.18
+ '[' -d linux-2.6.18-308.el5.4K.ppc64 ']'
+ rm -rf deleteme
+ mv linux-2.6.18-308.el5.4K.ppc64 deleteme
+ rm -rf deleteme
+ cp -rl vanilla-2.6.18.4 linux-2.6.18-308.el5.4K.ppc64
+ cd linux-2.6.18-308.el5.4K.ppc64
+ echo 'Patch #1 (kernel-2.6.18-redhat.patch):'
Patch #1 (kernel-2.6.18-redhat.patch):
+ patch -p1 --fuzz=2 -E -s
+ cp /usr/src/redhat/SOURCES/COPYING.modules Documentation/
+ mkdir configs
+ for cfg in 'kernel-2.6.18-ppc64*.config'
+ cp -f /usr/src/redhat/SOURCES/kernel-2.6.18-ppc64-debug.config /usr/src/redhat/SOURCES/kernel-2.6.18-ppc64-kdump.config /usr/src/redhat/SOURCES/kernel-2.6.18-ppc64.config .
+ for i in 'kernel-2.6.18-ppc64*.config'
+ mv kernel-2.6.18-ppc64-debug.config kernel-2.6.18-ppc64-debug.config.tmp
+ /usr/src/redhat/SOURCES/merge.pl /usr/src/redhat/SOURCES/config-rhel-generic kernel-2.6.18-ppc64-debug.config.tmp
+ rm kernel-2.6.18-ppc64-debug.config.tmp
+ for i in 'kernel-2.6.18-ppc64*.config'
+ mv kernel-2.6.18-ppc64-kdump.config kernel-2.6.18-ppc64-kdump.config.tmp
+ /usr/src/redhat/SOURCES/merge.pl /usr/src/redhat/SOURCES/config-rhel-generic kernel-2.6.18-ppc64-kdump.config.tmp
+ rm kernel-2.6.18-ppc64-kdump.config.tmp
+ for i in 'kernel-2.6.18-ppc64*.config'
+ mv kernel-2.6.18-ppc64.config kernel-2.6.18-ppc64.config.tmp
+ /usr/src/redhat/SOURCES/merge.pl /usr/src/redhat/SOURCES/config-rhel-generic kernel-2.6.18-ppc64.config.tmp
+ rm kernel-2.6.18-ppc64.config.tmp
+ for i in 'kernel-2.6.18-ppc64*.config'
+ mv kernel-2.6.18-ppc64-debug.config kernel-2.6.18-ppc64-debug.config.tmp
+ /usr/src/redhat/SOURCES/merge.pl /usr/src/redhat/SOURCES/config-rhel-ppc64-generic kernel-2.6.18-ppc64-debug.config.tmp
+ rm kernel-2.6.18-ppc64-debug.config.tmp
+ for i in 'kernel-2.6.18-ppc64*.config'
+ mv kernel-2.6.18-ppc64-kdump.config kernel-2.6.18-ppc64-kdump.config.tmp
+ /usr/src/redhat/SOURCES/merge.pl /usr/src/redhat/SOURCES/config-rhel-ppc64-generic kernel-2.6.18-ppc64-kdump.config.tmp
+ rm kernel-2.6.18-ppc64-kdump.config.tmp
+ for i in 'kernel-2.6.18-ppc64*.config'
+ mv kernel-2.6.18-ppc64.config kernel-2.6.18-ppc64.config.tmp
+ /usr/src/redhat/SOURCES/merge.pl /usr/src/redhat/SOURCES/config-rhel-ppc64-generic kernel-2.6.18-ppc64.config.tmp
+ rm kernel-2.6.18-ppc64.config.tmp
+ rm -f kernel-2.6.18-i686-kdump.config kernel-2.6.18-x86_64-kdump.config
+ rm -f kernel-2.6.18-i586.config
+ for i in '*.config'
+ mv kernel-2.6.18-ppc64-debug.config .config
++ head -1 .config
++ cut -b 3-
+ Arch=powerpc
+ make ARCH=powerpc nonint_oldconfig
.config:431:warning: trying to assign nonexistent symbol ISCSI_IBFT
.config:432:warning: trying to assign nonexistent symbol ISCSI_IBFT_FIND
.config:3124:warning: trying to assign nonexistent symbol NFS_FSCACHE
.config:3139:warning: trying to assign nonexistent symbol VIRTIO_RING
.config:3140:warning: trying to assign nonexistent symbol VIRTIO_PCI
.config:3143:warning: trying to assign nonexistent symbol VIRTIO_BALLOON
.config:3161:warning: trying to reassign symbol EDAC_DEBUG
.config:3304:warning: trying to assign nonexistent symbol OPTPROBES
.config:3305:warning: trying to assign nonexistent symbol X86_DECODER_SELFTEST
+ echo '# powerpc'
+ cat .config
+ for i in '*.config'
+ mv kernel-2.6.18-ppc64-kdump.config .config
++ head -1 .config
++ cut -b 3-
+ Arch=powerpc
+ make ARCH=powerpc nonint_oldconfig
.config:432:warning: trying to assign nonexistent symbol ISCSI_IBFT
.config:433:warning: trying to assign nonexistent symbol ISCSI_IBFT_FIND
.config:3125:warning: trying to assign nonexistent symbol NFS_FSCACHE
.config:3140:warning: trying to assign nonexistent symbol VIRTIO_RING
.config:3141:warning: trying to assign nonexistent symbol VIRTIO_PCI
.config:3144:warning: trying to assign nonexistent symbol VIRTIO_BALLOON
.config:3305:warning: trying to assign nonexistent symbol OPTPROBES
.config:3306:warning: trying to assign nonexistent symbol X86_DECODER_SELFTEST
+ echo '# powerpc'
+ cat .config
+ for i in '*.config'
+ mv kernel-2.6.18-ppc64.config .config
++ head -1 .config
++ cut -b 3-
+ Arch=powerpc
+ make ARCH=powerpc nonint_oldconfig
.config:431:warning: trying to assign nonexistent symbol ISCSI_IBFT
.config:432:warning: trying to assign nonexistent symbol ISCSI_IBFT_FIND
.config:3124:warning: trying to assign nonexistent symbol NFS_FSCACHE
.config:3139:warning: trying to assign nonexistent symbol VIRTIO_RING
.config:3140:warning: trying to assign nonexistent symbol VIRTIO_PCI
.config:3143:warning: trying to assign nonexistent symbol VIRTIO_BALLOON
.config:3303:warning: trying to assign nonexistent symbol OPTPROBES
.config:3304:warning: trying to assign nonexistent symbol X86_DECODER_SELFTEST
+ echo '# powerpc'
+ cat .config
+ cd ..
+ '[' -d deleteme ']'
+ find . '(' -name '*.orig' -o -name '*~' ')' -exec rm -f '{}' ';'
+ cp /usr/src/redhat/SOURCES/Config.mk .
+ '[' -d xen ']'
+ rm -rf xen
+ cd /usr/src/redhat/BUILD
+ cd kernel-2.6.18
+ /usr/bin/gzip -dc /usr/src/redhat/SOURCES/xen-15502.tar.bz2
+ tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
++ /usr/bin/id -u
+ '[' 0 = 0 ']'
+ /bin/chown -Rhf root .
++ /usr/bin/id -u
+ '[' 0 = 0 ']'
+ /bin/chgrp -Rhf root .
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ cd config
+ echo 'Patch #2 (xen-config-2.6.18-redhat.patch):'
Patch #2 (xen-config-2.6.18-redhat.patch):
+ patch -p1 --fuzz=2 -s
+ cd ..
+ cd xen
+ echo 'Patch #3 (xen-2.6.18-redhat.patch):'
Patch #3 (xen-2.6.18-redhat.patch):
+ patch -p1 --fuzz=2 -E -s
+ cd ..
+ exit 0
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.88627
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd kernel-2.6.18
+ LANG=C
+ export LANG
+ unset DISPLAY
+ gpg --homedir . --batch --gen-key /usr/src/redhat/SOURCES/genkey
gpg: WARNING: unsafe permissions on homedir `.'
++++++++++++++++++++++++++++++++++++++++++++++++++..++++++++++++++++++++++++++++++.++++++++++.++++++++++.+++++++++++++++++++++++++..+++++..+++++..>.+++++............................+++++
+ gpg --homedir . --export --keyring ./kernel.pub Red
gpg: WARNING: unsafe permissions on homedir `.'
+ make linux-2.6.18-308.el5.4K.ppc64/scripts/bin2c
cc     linux-2.6.18-308.el5.4K.ppc64/scripts/bin2c.c   -o linux-2.6.18-308.el5.4K.ppc64/scripts/bin2c
+ linux-2.6.18-308.el5.4K.ppc64/scripts/bin2c ksign_def_public_key __initdata
+ rm -rf /var/tmp/kernel-2.6.18-308.el5.4K-root
+ mkdir -p /var/tmp/kernel-2.6.18-308.el5.4K-root/boot
+ cd linux-2.6.18-308.el5.4K.ppc64
+ BuildKernel vmlinux vmlinux
+ MakeTarget=vmlinux
+ KernelImage=vmlinux
+ Flavour=
+ '[' -n '' ']'
+ Config=kernel-2.6.18-ppc64.config
+ DevelDir=/usr/src/kernels/2.6.18-308.el5.4K-ppc64
+ DevelLink=
+ KernelVer=2.6.18-308.el5.4K
+ echo BUILDING A KERNEL FOR ppc64...
BUILDING A KERNEL FOR ppc64...
+ perl -p -i -e 's/^EXTRAVERSION.*/EXTRAVERSION = -308.el5.4K/' Makefile
+ make -s mrproper
+ cp configs/kernel-2.6.18-ppc64.config .config
++ head -1 .config
++ cut -b 3-
+ Arch=powerpc
+ echo USING ARCH=powerpc
USING ARCH=powerpc
+ '[' vmlinux == x86 ']'
+ '[' powerpc == s390 -a '' == kdump ']'
+ make -s ARCH=powerpc nonint_oldconfig
+ make -s ARCH=powerpc -j24 vmlinux
  CHK     include/linux/version.h
  UPD     include/linux/version.h
  CHK     include/linux/utsrelease.h
  SYMLINK include/asm -> include/asm-powerpc
  UPD     include/linux/utsrelease.h
  CHK     include/linux/compile.h
  UPD     include/linux/compile.h
In file included from arch/powerpc/mm/mem.c:35:
include/asm/pgalloc.h: In function 'pgd_free':
include/asm/pgalloc.h:48: error: implicit declaration of function 'subpage_prot_free'
In file included from arch/powerpc/mm/init_64.c:45:
include/asm/pgalloc.h: In function 'pgd_free':
include/asm/pgalloc.h:48: error: implicit declaration of function 'subpage_prot_free'
make[1]: *** [arch/powerpc/mm/init_64.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: *** [arch/powerpc/mm/mem.o] Error 1
make: *** [arch/powerpc/mm] Error 2
make: *** Waiting for unfinished jobs....
In file included from include/asm/tlb.h:19,
                 from arch/powerpc/platforms/pseries/lpar.c:36:
include/asm/pgalloc.h: In function 'pgd_free':
include/asm/pgalloc.h:48: error: implicit declaration of function 'subpage_prot_free'
make[2]: *** [arch/powerpc/platforms/pseries/lpar.o] Error 1
make[2]: *** Waiting for unfinished jobs....
arch/powerpc/platforms/cell/axon_utl.c: In function 'axon_utl_setup_one':
arch/powerpc/platforms/cell/axon_utl.c:107: warning: passing argument 2 of 'of_translate_address' discards qualifiers from pointer target type
arch/powerpc/platforms/cell/axon_utl.c:124: warning: passing argument 2 of 'request_irq' from incompatible pointer type
make[1]: *** [arch/powerpc/platforms/pseries] Error 2
make[1]: *** Waiting for unfinished jobs....
arch/powerpc/platforms/cell/axon_pci-error.c: In function 'axon_pci_setup_one':
arch/powerpc/platforms/cell/axon_pci-error.c:108: warning: passing argument 2 of 'of_translate_address' discards qualifiers from pointer target type
arch/powerpc/platforms/cell/axon_pci-error.c:125: warning: passing argument 2 of 'request_irq' from incompatible pointer type
arch/powerpc/platforms/cell/axon_msi.c: In function 'axon_msi_probe':
arch/powerpc/platforms/cell/axon_msi.c:351: warning: unused variable 'page'
arch/powerpc/kernel/rtas.c: In function 'rtas_suspend_last_cpu':
arch/powerpc/kernel/rtas.c:709: warning: label 'out' defined but not used
make: *** [arch/powerpc/platforms] Error 2
error: Bad exit status from /var/tmp/rpm-tmp.88627 (%build)


RPM build errors:
    Bad exit status from /var/tmp/rpm-tmp.88627 (%build)
 
Updated on 2012-03-15T15:47:07Z at 2012-03-15T15:47:07Z by RCJ
  • RCJ
    RCJ
    10 Posts
    ACCEPTED ANSWER

    Re: RHEL 5.8 kernel 2.6.18-308 rebuild with 4k pages

    ‏2012-03-14T17:35:36Z  in response to tjacks55
     What "4k page build guide" were you using?  It would be helpful to have a description of what you did to prepare for this build.
    • tjacks55
      tjacks55
      8 Posts
      ACCEPTED ANSWER

      Re: RHEL 5.8 kernel 2.6.18-308 rebuild with 4k pages

      ‏2012-03-14T17:52:52Z  in response to RCJ
        I followed this one, using the distro source.
       
      I added the buildid to the spec file, modified the 3 config files from 64K=y to 64K=n and the did the rpmbuild.  If I do the rpmbuild without the 64k to 4K changes, and without disabling the abi check, it build just fine.  It only fails when I make the changes for the 4K. 
      • RCJ
        RCJ
        10 Posts
        ACCEPTED ANSWER

        Re: RHEL 5.8 kernel 2.6.18-308 rebuild with 4k pages

        ‏2012-03-14T18:45:30Z  in response to tjacks55
        Check that you removed the patch mentioned in the next section of those instructions "Error on RHEL 5.3 (and RHEL 5.4) for 4KB pages".  Your failure matches the build error described in that section, hopefully that will resolve the issue.
        • tjacks55
          tjacks55
          8 Posts
          ACCEPTED ANSWER

          Re: RHEL 5.8 kernel 2.6.18-308 rebuild with 4k pages

          ‏2012-03-14T18:56:59Z  in response to RCJ
           That was the first thing I checked, and there don't appear to be any patches loaded in this kernel's spec file.
          • RCJ
            RCJ
            10 Posts
            ACCEPTED ANSWER

            Re: RHEL 5.8 kernel 2.6.18-308 rebuild with 4k pages

            ‏2012-03-14T20:15:23Z  in response to tjacks55
            It appears that the last kernel source RPM to have the patches broken out was RHEL5.6, now all patches are part of a single patch file.  Those instructions in the wiki for excluding the patch will not work with releases newer than 5.6, however the patch is still applied in 5.7 and 5.8 and that is causing the build breakage for 4K kernels.  I've extracted a 5.6 kernel source RPM to get the patch file ('linux-2.6-ppc64-subpage-protection-for-pave.patch'), put that patch into the spec file for the 5.8 kernel as a reverse patch, and kicked off a build which appears to be working.  I'll ask around to see if this is the best means available and get it documented.
             
            Would that be helpful and do you have access to a rhel5.6 kernel source RPM?
          • RCJ
            RCJ
            10 Posts
            ACCEPTED ANSWER

            Re: RHEL 5.8 kernel 2.6.18-308 rebuild with 4k pages

            ‏2012-03-14T20:41:35Z  in response to tjacks55
            I extracted the file I wanted from the RHEL5.6 kernel without installing the RPM, I didn't want to overwrite the RHEL5.8 kernel source.  I did this as follows:
            1. rpm2cpio kernel-2.6.18-238.el5.src.rpm > kernel-2.6.18-238.el5.src.cpio
            2. cpio -i linux-2.6-ppc64-subpage-protection-for-pave.patch < kernel-2.6.18-238.el5.src.cpio
            3. mv linux-2.6-ppc64-subpage-protection-for-pave.patch /usr/src/redhat/SOURCES/
            4. rm kernel-2.6.18-238.el5.src.cpio
            This converts the RHEL5.6 kernel to a CPIO archive, extracts the single patch file, and then places that in the SOURCES directory.
             
            The next step is to edit the kernel spec file to use the patch to reverse the changes.  Here are the changes I made to /usr/src/redhat/SPECS/kernel.spec.  They include changing the buildid, specifying the patch file, and adding a line to apply the patch in reverse (with the '-R' flag):
             
             # diff -u kernel.spec kernel.spec.mod
            --- kernel.spec    2012-01-27 16:11:48.000000000 -0600
            +++ kernel.spec.mod    2012-03-14 15:23:49.000000000 -0500
            @@ -71,7 +71,7 @@
             # that the kernel isn't the stock distribution kernel, for example,
             # by setting the define to ".local" or ".bz123456"
             #
            -#% define buildid
            +%define buildid .4K
             #
             %define sublevel 18
             %define stablerev 4
            @@ -424,6 +424,7 @@
             Patch1: kernel-2.6.18-redhat.patch
             Patch2: xen-config-2.6.18-redhat.patch
             Patch3: xen-2.6.18-redhat.patch
            +Patch4: linux-2.6-ppc64-subpage-protection-for-pave.patch
             
             # empty final patch file to facilitate testing of kernel patches
             Patch99999: linux-kernel-test.patch
            @@ -680,6 +681,7 @@
             cd linux-%{KVERREL}.%{_target_cpu}
             
             %patch1 -p1 -E
            +%patch4 -p1 -R
             
             # conditionally applied test patch for debugging convenience
             %if %([ -s %{PATCH99999} ] && echo 1 || echo 0)
             
            After you've done this, you can build the rpm as per the instructions in the wiki...
            # rpmbuild -ba --target ppc64 --without kabichk kernel.spec

            • tjacks55
              tjacks55
              8 Posts
              ACCEPTED ANSWER

              Re: RHEL 5.8 kernel 2.6.18-308 rebuild with 4k pages

              ‏2012-03-15T13:39:40Z  in response to RCJ
               Thank you, that worked perfectly!
              • RCJ
                RCJ
                10 Posts
                ACCEPTED ANSWER

                Re: RHEL 5.8 kernel 2.6.18-308 rebuild with 4k pages

                ‏2012-03-15T13:43:57Z  in response to tjacks55
                 Great, I've updated the wiki with these steps as well.
                • tjacks55
                  tjacks55
                  8 Posts
                  ACCEPTED ANSWER

                  Re: RHEL 5.8 kernel 2.6.18-308 rebuild with 4k pages

                  ‏2012-03-15T14:11:13Z  in response to RCJ
                   It looks like the gfs module didn't build properly in the build, is there a way to manually rebuild the one module?  When I try to load it, I get the following
                  [root@servername ~]# modprobe gfs
                  FATAL: Error inserting gfs (/lib/modules/2.6.18-308.el5.4K/weak-updates/gfs/gfs.ko): Unknown symbol in module, or unknown parameter (see dmesg)
                   and in dmesg I see this when trying to mount gfs volumes that previously worked:
                   
                   gfs: disagrees about version of symbol find_vma
                  gfs: Unknown symbol find_vma
                  gfs: disagrees about version of symbol mem_section
                  gfs: Unknown symbol mem_section
                  gfs: disagrees about version of symbol unmap_mapping_range
                  gfs: Unknown symbol unmap_mapping_range
                  gfs: disagrees about version of symbol vmtruncate
                  gfs: Unknown symbol vmtruncate

                  • RCJ
                    RCJ
                    10 Posts
                    ACCEPTED ANSWER

                    Re: RHEL 5.8 kernel 2.6.18-308 rebuild with 4k pages

                    ‏2012-03-15T15:47:07Z  in response to tjacks55
                    Even with a rebuild of the GFS kernel module to match this kernel on my test system I end up with those message, which I didn't expect.  I've asked around and we'll see if there's someone else that has an answer for this.  Just for the record, here's what I tried with no luck:
                     
                    The gfs module source rpm name is gfs-kmod-0.1.34-17.el5.src.rpm (from the RHEL5.8 sources media, there could be newer versions on RHN).  Install the gfs kernel module source:
                     
                    # rpm -ivh  gfs-kmod-0.1.34-17.el5.src.rpm
                     
                    The kernel-devel package is a prerequisite, from the kernel RPMS you just created install the kernel-devel package (the file is /usr/src/redhat/RPMS/ppc64/kernel-devel-2.6.18-308.el5.4K.ppc64.rpm, if your .buildid was 4K as was the example in the wiki).
                     
                    # cd /usr/src/redhat/RPMS/
                    # rpm -ivh  kernel-devel-2.6.18-308.el5.4K.ppc64.rpm
                     
                    Build the gfs kernel module by specifying the kernel version on the command line:
                    # uname -r  2.6.18-308.el5.4K      ### This is the kernel you build for 4K support.
                    # rpmbuild --define "kversion 2.6.18-308.el5.4K" -ba gfs-kmod.spec
                     
                    Install the gfs kernel module, you may need to overwrite your existing module using these directions (because the package is not renamed) and I expect that the you'll need --nodeps as well:
                     
                    # cd /usr/src/redhat/RPMS/ppc64
                    # rpm --nodeps -ivh kmod-gfs-0.1.34-17.ppc64.rpm
                     
                    Installing the gfs module will rebuild the initrd.