1
0
forked from pool/kernel-source
OBS User unknown 2008-07-18 10:15:21 +00:00 committed by Git OBS Bridge
commit 987ad16940
76 changed files with 913140 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.osc

423
README.SUSE Normal file
View File

@ -0,0 +1,423 @@
WORKING WITH THE SUSE 2.6.x KERNEL SOURCES
Andreas Gruenbacher <agruen@suse.de>, SUSE Labs, 2003, 2004, 2005, 2006
This document gives an overview of how SUSE Linux kernels are
created, and describes tasks like building individual kernels
and creating external kernel modules.
A companion Update Media HOWTO that describes how to build driver update
disks (among other things) is available at:
ftp://ftp.suse.com/pub/people/hvogel/Update-Media-HOWTO.
TABLE OF CONTENTS
Overview
Compiling your own kernel
Building additional (external) modules
Supported vs. unsupported modules
Patch selection mechanism
Where to find configuration files
How to configure the kernel sources
Module load paths
OVERVIEW
The kernels for SUSE are generated from the vanilla Linux kernel sources
found at http://ftp.kernel.org, on top of which a number of patches are
applied. The resulting kernel source tree is configured and built,
resulting in a binary kernel.
Internally, the add-on patches and configuration files are maintained in
a CVS repository. A script (scripts/tar-up.sh) packs up the files in the
CVS repository in a form suitable for rpmbuild. When building the RPM
packages, the following binary packages get created:
* kernel-source
The kernel source tree, generated by unpacking the vanilla kernel
sources and applying the patches. The kernel sources are used by
a number of other packages. They can also be used for compiling
additional kernel modules.
* kernel-$FLAVOR
A number of binary kernels (for example, kernel-default for
uniprocessor machines, kernel-smp for smp machines, etc.). These
packages are all generated from the same kernel sources, and
differ in the kernel configurations used.
* kernel-syms
Kernel symbol version information for compiling external modules:
Functions and data structures that the kernel exports have version
information attached. When loading kernel modules, this version
information is used to make sure that the modules match the running
kernel.
* kernel-dummy
This package is relevant inside the SUSE build system only. We use
it to synchronize release numbers among the kernel packages. When
building packages locally, the kernel-dummy package can safely be
ignored.
The CVS repository contains the configuration files (.config) for all
SUSE kernel flavors. All configuration files are included in the
kernel-source package (see WHERE TO FIND CONFIGURATION FILES below).
In the installed system, the kernel-source package installs files in the
following directories:
* /usr/src/linux-$VERSION-$RELEASE/
The kernel sources.
* /usr/src/linux
A symbolic link to /usr/src/linux-$VERSION-$RELEASE.
* /usr/src/linux-$VERSION-$RELEASE-obj/$ARCH/$FLAVOR/
Kernel build object files for one kernel flavor. These
files are used for compiling additional kernel modules.
* /usr/src/linux-obj
A symbolic link to /usr/src/linux-$VERSION-$RELEASE-obj/$ARCH/$FLAVOR.
* /usr/share/doc/packages/kernel-source/
This document and an external kernel module example.
* /etc/init.d/running-kernel
Init script that adapts the kernel sources in /usr/src/linux to
the running kernel.
COMPILING YOUR OWN KERNEL
The kernel sources are found in the kernel-source.$ARCH.rpm package. The
recommended way to produce a binary kernel is:
(1) Install kernel-source.$ARCH.rpm. Change to the /usr/src/linux
directory.
(2) Configure the kernel (for example, ``make oldconfig'' or ``make
cloneconfig'', see HOW TO CONFIGURE THE KERNEL SOURCES).
(3) Build the kernel and all its modules (``make'').
(5) Install the kernel and the modules (``make modules_install'',
followed by ``make install''). This will automatically create
an initrd for the new kernel as well (see ``mkinitrd -h'').
(6) Add the kernel to the boot manager. When using lilo, run ``lilo''
to update the boot map.
Instead of building binary kernels by hand, you can also build
one of the kernel-$FLAVOR packages using RPM.
BUILDING ADDITIONAL (EXTERNAL) MODULES
A single binary kernel module generally only works for a specific
version of the kernel source tree, for a specific architecture and
configuration. This means that for each binary kernel that SUSE ships, a
custom module must be built. This requirement is to some extent relaxed
by the modversion mechanism: modversions attach a checksum to each
symbol (function or variable) exported to modules by the kernel. This
allows to use kernel modules that have been built for a kernel with a
different version or release number in many cases, as long as none of
the symbols the module uses have changed between the two kernel
versions.
When releasing maintenance or security update kernels for a specific
product, we carefully try to keep the kernel ABI stable. Despite this,
we sometimes have no choice but to break binary compatibility. In this
case, those kernel modules must be rebuilt.
Additional kernel modules for one of the SUSE kernel flavors can be
built in three different ways:
(1) by configuring the kernel sources in /usr/src/linux (or a copy,
see HOW TO CONFIGURE THE KERNEL SOURCES), or
(2) by using one of the standard configurations in
/usr/src/linux-obj/$ARCH/$FLAVOR, or
(3) by creating a Kernel Module Package (KMP) as described in the
Kernel Module Packages Manual, http://www.suse.de/~agruen/KMPM/.
The first method involves the following steps:
(1) Install kernel-source.$ARCH.rpm.
(2) Change to the /usr/src/linux directory. Configure the kernel
(for example, ``make oldconfig'' or ``make cloneconfig'', see
HOW TO CONFIGURE THE KERNEL SOURCES).
(3) Create files required for compiling external modules:
``make scripts'' and ``make prepare''.
(4) Compile the module(s) by changing into the module source directory
and typing ``make -C /usr/src/linux M=$(pwd)''.
(5) Install the module(s) by typing
``make -C /usr/src/linux M=$(pwd) modules_install''.
The second method involves the following steps:
(1) Install kernel-source.$ARCH.rpm.
(2) Install kernel-syms.$ARCH.rpm. This package is necessary for
symbol version information (CONFIG_MODVERSIONS).
(3) Compile the module(s) by changing into the module source directory
and typing ``make -C /usr/src/linux-obj/$ARCH/$FLAVOR M=$(pwd)''.
Substitute $ARCH and $FLAVOR with the architecture and flavor
for which to build the module(s).
If the installed kernel sources match the running kernel, you
can build modules for the running kernel by using the path
/lib/modules/$(uname -r)/build as the -C option in the above
command. (build is a symlink to /usr/src/linux-obj/$ARCH/$FLAVOR).
Starting with SuSE Linux 9.2 / SLES9 Service Pack 1, the
modversion information for the running kernel is also
contained in the kernel-$FLAVOR packages, and so for building
modules for the running kernel, the kernel-syms package is no
longer required.
(4) Install the module(s) with
``make -C /usr/src/linux-obj/$ARCH/$FLAVOR M=$(pwd) modules_install''.
Whenever building modules, please use the kernel build infrastructure as
much as possible, and do not try to circumvent it. The
Documentation/kbuild directory in the kernel sources documents kbuild
makefiles.
Please take a look at the demo module installed under
/usr/share/doc/packages/kernel-source for a simple example of an Kernel
Module Package (KMP).
SUPPORTED VS. UNSUPPORTED MODULES
As an extension to the mainline kernel, modules can be tagged as
supported (directly by SUSE, or indirectly by a third party) or
unsupported. Modules which are known to be flakey or for which SUSE does
not have the necessary expertise are marked as unsupported. Modules for
which SUSE has third-party support agreements are marked as externally
supported. Modules for which SUSE provides direct support are marked as
supported.
The support status of a module can be queried with the modinfo tool.
Modinfo will report one of the following:
- direct support by SUSE: "supported: yes"
- third-party support: "supported: external"
- unsupported modules: no supported tag.
At runtime, the setting of the" unsupported" kernel command line
parameter and /proc/sys/kernel/unsupported determines whether
unsupported modules can be loaded or not, and whether or not loading an
unsupported module causes a warning in the system log:
0 = only allow supported modules,
1 = warn when loading unsupported modules,
2 = don't warn.
Irrespective of this setting, loading an externally supported or unsupported
module both set a kernel taint flag. The taint flags are included in
Oopses. The taint status of the kernel can be inspected in
/proc/sys/kernel/tainted: Bits 0 to 4 have the following meanings:
bit 0 = a module with a GPL-incompatible license was loaded (tainted & 1),
bit 1 = module load was enforced (tainted & 2),
bit 2 = an SMP-unsafe module was loaded (tainted & 4),
bit 3 = (reserved),
bit 4 = an unsupported module was loaded (tainted & 16),
bit 5 = a module with third-party support was loaded (tainted & 32).
bit 10 = a machine check exception has occurred (taint & 1024; x86_64 only
so far).
The corresponding codes for the taint flags in Oopses are (x = unknown):
- "Pxxx" if bit 0 set or else
"Gxxx" if bit 0 unset,
- "xFxx" if bit 1 set or else
"x xx" if bit 1 unset,
- "xxSx" if set or else
"xx x" if bit 2 unset,
- "xxxU" if bit 4 set or else
"xxxX" if bit 5 set or else
"xxx ".
By default, external modules will not have the supported flag (that is,
they wil be marked as unsupported). For building externally supported
modules, please get in touch with Kurt Garloff <garloff@suse.de>.
PATCH SELECTION MECHANISM
The SUSE kernels consist of the vanilla kernel sources on top of which a
number of patches is applied. Almost all of these patches are applied on
all architectures; a few patches are only used on a subset of
architectures. The file series.conf determines which patches are applied
on which architectures. A script named "guards" converts series.conf
into a plain list of patch files to be applied. Guards decides which
patches to include and exclude based on a list of symbols. The symbols
used by default are computed by the helper script "arch-symbols". From
the kernel-source.src.rpm package, a fully patched kernel source tree
can be generated from vanilla sources + patches like this:
# Install the package:
$ rpm -i kernel-source.src.rpm
# Unpack the patches and the kernel sources:
$ cd /usr/src/packages/SOURCES
$ for f in patches.*.tar.bz2; do \
tar xfj $f || break; \
done
$ tar xfj linux-2.6.5.tar.bz2
# Apply the patches
$ for p in $(./guards $(./arch-symbols) < series.conf); do
patch -d linux-2.6.5 -p1 < $p || break
done
The configuration script config.conf which is similar to series.conf is
used for configuration file selection. See the section WHERE TO FIND
CONFIGURATION FILES.
The file format of series.conf and config.conf should be obvious from
the comments in series.conf, and from the guards(1) manual page. (The
guards(1) manual page can be generated by running pod2man on the guards
script.)
WHERE TO FIND CONFIGURATION FILES
Kernel configuration files are stored in the kernel CVS repository. When
packing up the repository, they end up in config.tar.bz. When
kernel-source.$ARCH.rpm is built, the config files are copied from
config/$ARCH/$FLAVOR to arch/$ARCH/defconfig.$FLAVOR in the kernel
source tree (for eaxmple, arch/i386/defconfig.default).
The kernel-$FLAVOR packages are based on arch/$ARCH/defconfig.$FLAVOR
(kernel-default is based on arch/$ARCH/defconfig.default, for example).
The kernel-$FLAVOR packages install their configuration files as
/boot/config-$VER_STR (for example, boot/config-2.6.5-99-default).
In addition, the running kernel exposes a gzip compressed version of its
configuration file as /proc/config.gz. The kernel sources can be
configured based on /proc/config.gz with ``make cloneconfig''.
HOW TO CONFIGURE THE KERNEL SOURCES
Before a binary kernel is built or an additional loadable module
for an existing kernel is created, the kernel must be configured.
In order for a loadable module to work with an existing kernel, it must
be created with a configuration that is identical to the kernel's
configuration, or at least very close to that. Each configuration is
contained in a single file. The kernel-source package contains
configurations for all standard SUSE kernel variants, so for building
only external kernel modules it is not necessary to configure the kernel
sources.
Configuring the kernel sources for a specific configuration is
straightfoward:
- Locate the configuration file you want to use. (See WHERE TO FIND
CONFIGURATION FILES above).
- Copy the configuration to the file .config in the kernel source
tree. The kernel-source package installs its source tree in
/usr/src/linux.
- Run the following commands in sequence to apply the configuration,
generate version information files, etc.:
make clean
make oldconfig
Alternatively to ``make oldconfig'', you can also use ``make
menuconfig'' for a text menu oriented user interface. If the kernel
sources do not match the configuration file exactly, ``make
oldconfig'' will prompt for settings that are undefined.
For configuring the kernel to match the running kernel, there is a
shortcut ``make cloneconfig'' that expands the file /proc/config.gz
into .config, and then runs ``make oldconfig''.
MODULE LOAD PATHS
Modules that belong to a specific kernel release are installed in
/lib/modules/2.6.5-99-smp and similar. Note that this path contains the
kernel package release number. Modules from KMPs must be installed
below /lib/modules/2.6.5-99-smp/updates/ and similar: modules below
updates/ have priority over other modules.
When KMPs contain modules that are compatible between multiple installed
kernels, symlinks are used to make those modules available to those
compatible kernels like this:
/lib/modules/2.6.16-100-smp/weak-updates/foo.ko ->
/lib/modules/2.6.16-99-smp/updates/foo.ko
Modules in the weak-updates directory have lower priority than modules
in /lib/modules/2.6.16-100-smp/updates/, and higher priority than other
modules in /lib/modules/2.6.16-100-smp.
REFERENCES
General
Documentation in the kernel source tree.
Linux Documentation Project, http://www.tldp.org/
Linux Weekly News, http://lwn.net
Rusty's Remarkably Unreliable Guides (Kernel Hacking
and Kernel Locking guides),
http://www.netfilter.org/unreliable-guides/
Kernel newbies, http://www.kernelnewbies.org/
Loadable Kernel Modules
Peter Jay Salzman and Ori Pomerantz: Linux Kernel Module
Programming Guide, Version 2.4, April 2003,
http://www.tldp.org/guides.html
Kernel Module Packages
Andreas Gruenbacher: Kernel Module Packages Manual.
Versions for CODE9 (SLES9, SUSE LINUX 10.0) and CODE10
(SUSE Linux 10.1, SLES10),
http://www.suse.de/~agruen/KMPM/

35
arch-symbols Normal file
View File

@ -0,0 +1,35 @@
#!/bin/sh
# Generate architecture specific patch selection symbols
if [ "$1" = "--list" ]; then
# List all known architectures
echo i386 mips{,64} sparc{,64} ppc{,64} s390{,x} ia64 x86_64 alpha parisc
exit 0
fi
if [ -z "$SYMBOLS" ]; then
if [ -n "$1" ]; then
ARCH="$1"
elif [ -n "$PATCH_ARCH" ]; then
ARCH="$PATCH_ARCH"
else
ARCH="`arch`"
fi
SYMBOLS="$ARCH"
case "$ARCH" in
(i?86) SYMBOLS="$SYMBOLS IA32" ;;
(mips*) SYMBOLS="$SYMBOLS MIPS" ;;
(sparc*) SYMBOLS="$SYMBOLS SPARC" ;;
(ppc*) SYMBOLS="$SYMBOLS PPC" ;;
(s390*) SYMBOLS="$SYMBOLS S390" ;;
(ia64) ;;
(x86_64) ;;
(alpha) ;;
(parisc) ;;
(*) # not a recognized architeture!
exit
;;
esac
fi
echo $SYMBOLS

2
build-source-timestamp Normal file
View File

@ -0,0 +1,2 @@
2008-06-28 00:00:07 +0200
CVS Branch: SL110_BRANCH

32
built-in-where Normal file
View File

@ -0,0 +1,32 @@
#! /bin/bash
# A lot of symbols are exported by the main kernel image. Find out
# more precisely which built-in.o file defines them, and fill in
# that information in Module.symvers. (The built-in.o files are
# linked together from one or more object files in a directory.)
# We use this information to better group symbols by subsystems.
#
# Usage: built-in-where < Module.symvers
unset LANG ${!LC_*}
# Create a table of all symbol export in a built-in.o file, e.g.,
# mtrr_add arch/i386/kernel/cpu/mtrr/built-in
built_in_exports() {
for obj in $(find -name built-in.o -printf '%P\n'); do
nm $obj \
| sed -nre 's:(00000000)?([0-9a-f]+) A __crc_(.*):\3\t'"${obj%.o}:p"
done
}
# Join together the two tables, including all lines from the first
# file that don't have a match in the second. Finally remove the
# duplicate column.
join -t $'\t' -1 2 -2 1 -a 1 \
<(sort -k2) \
<(built_in_exports | sort -k1) \
| awk '
BEGIN { FS = "\t" ; OFS = "\t" }
NF == 3 { print $2, $1, $3 }
NF == 4 { print $2, $1, $4 }
'

10
check-build.sh Normal file
View File

@ -0,0 +1,10 @@
#!/bin/bash
# Copyright (c) 2005 SUSE Linux Products GmbH, Germany. All rights reserved.
if grep -q "Linux version 2\.[0-5]\." /proc/version; then
echo "FATAL: kernel too old, need kernel >= 2.6 for this package"
exit 1
fi
exit 0

17
check-for-config-changes Normal file
View File

@ -0,0 +1,17 @@
#! /bin/bash
# lines 4 contains a timestamp...
differences="$(
diff -bU0 <(sed -e '/^# .* is not set$/p' -e '/^$\|^#/d' "$1" | sort) \
<(sed -e '/^# .* is not set$/p' -e '/^$\|^#/d' "$2" | sort) \
| grep '^[-+][^-+]'
)" || true
if [ -n "$differences" ]; then
echo
echo "Changes after running \`make oldconfig':"
echo "$differences"
echo
if echo "$differences" | grep -q '^+' ; then
exit 1
fi
fi

32
check-supported-list Normal file
View File

@ -0,0 +1,32 @@
#! /bin/sh
sourcedir=$1
modpath=$2
# Check for modules not listed in supported.conf: First, for each module
# in the list, set mod_$module=1
for module in $($sourcedir/guards --list < $sourcedir/supported.conf \
| sed -e 's,.*/,,'); do
m=${module##*/}
m=${m%.ko}
eval mod_${m//-/_}=1
done
# Check if any installed module was not listed
status=
cd $modpath
for module in $(find . -name '*.ko'); do
module=${module%.ko}
m=${module##*/}
m=${m//-/_}
m="mod_$m"
if [ -z "${!m}" ]; then
if [ -z "$status" ]; then
echo "Modules not listed in supported.conf:"
status=1
fi
echo ${module#./}
fi
done
exit $status

26
config-subst Normal file
View File

@ -0,0 +1,26 @@
#!/bin/sh
# Substitute CONFIG_ variables
awk '
function subst(force)
{
if (!done || force) {
if (has_value)
print symbol "=" value
else
print "# " symbol " is not set"
}
done=1
}
BEGIN { symbol = ARGV[1]
if (ARGC == 3) {
has_value=1
value = ARGV[2]
}
split("", ARGV)
}
match($0, "\\<" symbol "\\>") \
{ subst(1) ; next }
{ print }
END { subst(0) }
' "$@"

42
config.conf Normal file
View File

@ -0,0 +1,42 @@
# Kernel configuration file selection.
# (See series.conf for a list of symbols defined.)
+IA32 i386/default
+IA32 i386/pae
+IA32 i386/debug
#+IA32 i386/um
+IA32 i386/xen
+IA32 i386/vanilla
+IA32 i386/rt
+IA32 i386/rt_debug
+IA32 i386/lockdep
+ia64 ia64/default
+ia64 ia64/debug
+ia64 ia64/vanilla
+x86_64 x86_64/default
#+x86_64 x86_64/um
+x86_64 x86_64/xen
+x86_64 x86_64/debug
+x86_64 x86_64/lockdep
+x86_64 x86_64/vanilla
+x86_64 x86_64/rt
+x86_64 x86_64/rt_debug
#+alpha alpha/default
#+alpha alpha/vanilla
+PPC powerpc/default
+PPC powerpc/ppc64
+PPC powerpc/kdump
+PPC powerpc/vanilla
#+PPC powerpc/rt
+PPC powerpc/ps3
+s390 s390/s390
+s390x s390/default
+s390x s390/vanilla
#+parisc parisc/default

3
config.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c3679adf28b0d027bc1cdd51321d4629e8424f74d379b73408030b526d0dc9a5
size 110955

165
extract-modaliases Normal file
View File

@ -0,0 +1,165 @@
#! /bin/bash
LC_ALL=POSIX
usage() {
cat <<EOF
Usage: ${0##*/} [-i module] [-x module] [-Nv] {module|rpm} ...
-i Include the specified modules (glob expression).
-x Exclude the specified modules (glob expression).
-N Don't try to combine modalias tags that only differ in one character.
-v Verbose: report which modules define which aliases.
EOF
exit $1
}
ARGS=("$@")
options=`getopt -o i:x:vNh -- "$@"`
if [ $? -ne 0 ]
then
usage 2
fi
eval set -- "$options"
opt_combine=1
while :; do
case "$1" in
-i)
include="$include ${2%.ko}"
shift 2
;;
-x)
exclude="$exclude ${2%.ko}"
shift 2
;;
-v)
opt_verbose=1
shift ;;
-N)
opt_combine=
shift ;;
-h)
usage 0
;;
--)
shift
break
;;
esac
done
process_module() {
declare module=$1 base=${1##*/} aliases
if [ -n "$include" ]; then
included=
for x in $include; do
eval "case \"\${base%.ko}\" in (${x%.ko}) included=1;; esac"
done
else
included=1
fi
for x in $exclude; do
eval "case \"\${base%.ko}\" in (${x%.ko}) included=;; esac"
done
[ -n "$included" ] || return
aliases="$(/sbin/modinfo -F alias "$module" \
| sed -nre 's@^.+:.+$@Supplements: modalias(&)@p')"
if [ -n "$aliases" ]; then
eval "processed_module_${base//[^a-zA-Z0-9_]/_}=$base"
echo "$aliases" \
| if [ -n "$opt_verbose" ]; then
sed -e "s@\$@ # $base@"
else
cat
fi
fi
}
print_modaliases() {
declare class=$1 variants=$2 pos=$3
if [ -n "$variants" ]; then
echo "${class:0:pos}[$variants]${class:pos+1}"
else
[ -z "$class" ] || echo "$class"
fi
}
combine_modaliases() {
declare tag class variants pos n
read class
while read tag; do
for ((n=0; n<${#class}; n++)); do
if [ "*" != "${class:n:1}" -a \
"${class:0:n}" = "${tag:0:n}" -a \
"${class:n+1}" = "${tag:n+1}" ] &&
( [ -z "$pos" ] || [ $n = $pos ] ); then
variants="${variants:-${class:n:1}}${tag:n:1}"
pos=$n
break
fi
done
if [ $n -eq ${#class} ]; then
print_modaliases "$class" "$variants" "$pos"
variants=
pos=
class=$tag
fi
done
print_modaliases "$class" "$variants" "$pos"
}
tmp=$(mktemp -t ${0##*/}.XXXXXX)
trap "rm -f $tmp" EXIT
for file in "$@"; do
case "$(file -b "$file")" in
RPM*)
tmpdir=$(mktemp -td ${0##*/}.XXXXXX)
rpm2cpio "$file" | ( cd $tmpdir && cpio -dim --quiet )
for module in $(find $tmpdir -type f -name '*.ko'); do
process_module "$module" >> $tmp
done
rm -rf $tmpdir
;;
ELF*)
process_module "$file" >> $tmp
;;
*)
if [ -e "$file" ]; then
echo "File type of $file not supported" >&2
exit 1
fi
file2=$(/sbin/modinfo -F filename "${file%.ko}")
if ! [ -e "$file2" ]; then
echo "No module $file found" >&2
exit 1
fi
process_module "$file2" >> $tmp
;;
esac
done
if [ -n "${!processed_module_*}" ]; then
echo "# Modules:" $(for m in ${!processed_module_*}; do echo ${!m}; done \
| sort -u)
sort -u $tmp \
| if [ -n "$opt_combine" ]; then
combine_modaliases
else
cat
fi
echo "# Generated with: ${0##*/} ${ARGS[*]}"
fi
# vim:softtabstop=4 shiftwidth=4

19
find-provides Normal file
View File

@ -0,0 +1,19 @@
#! /bin/sh
IFS=$'\n'
filelist=($(cat))
printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-provides "$@"
for file in "${filelist[@]}"; do
case "$file" in
*/symsets-*.tar.gz)
flavor=${file%.tar.gz}
flavor=${flavor##*-}
for symset in $(tar tfz "$file" | grep -v '/$'); do
class=${symset##*/} ; class=${class%.*}
echo "kernel($flavor:$class) = ${symset##*.}"
done
;;
esac
done

23
find-types Normal file
View File

@ -0,0 +1,23 @@
#! /bin/sh
for f in $(find -name '*.symtypes' | sort); do
f=${f#./}
echo "/* ${f%.symtypes}.o */"
cat $f
echo
done \
| sed -e '\:UNKNOWN:d' \
-e 's:[,;] }:}:g' \
-e 's:\([[({]\) :\1:g' \
-e 's: \([])},;]\):\1:g' \
-e 's: $::' \
$f \
| awk '
/^.#/ { if (defined[$1] == $0) {
print $1
next
}
defined[$1] = $0
}
{ print }
'

22
functions.sh Normal file
View File

@ -0,0 +1,22 @@
# Readlink is not present on some older distributions: emulate it.
readlink() {
local path=$1 ll
if [ -L "$path" ]; then
ll="$(LC_ALL=C ls -l "$path" 2> /dev/null)" &&
echo "${ll/* -> }"
else
return 1
fi
}
relink() {
if [ -h "$2" ]; then
local old=$(readlink "$2")
[ "$old" = "$1" ] && return 0
echo "Changing symlink $2 from $old to $1"
elif [ -e "$2" ]; then
echo "Replacing file $2 with symlink to $1"
fi
rm -f "$2" \
&& ln -s "$1" "$2"
}

12
get_release_number.sh Normal file
View File

@ -0,0 +1,12 @@
#! /bin/sh
prefix=
suffix=
if [ "$3" = kernel-dummy -o -n "$suffix" ]; then
[ -n "$suffix" ] || suffix=$2
while [ "$suffix" != "${suffix#[^0-9]*.}" ]; do
suffix=${suffix#[^0-9]*.}
done
echo $prefix$suffix
else
echo "pkg:kernel-dummy"
fi

287
guards Normal file
View File

@ -0,0 +1,287 @@
#!/usr/bin/perl -w
#
# Guards:
#
# +xxx include if xxx is defined
# -xxx exclude if xxx is defined
# +!xxx include if xxx is not defined
# -!xxx exclude if xxx is not defined
#
use FileHandle;
use Getopt::Long;
use strict;
# Prototypes
sub files_in($$);
sub parse($$);
sub help();
#sub strip_ext($) {
# local ($_) = @_;
# s/\.(diff?|patch)$//;
#}
#sub try_ext($) {
# my ($path) = @_;
# for my $p in (($path, "$path.diff", "$path.dif", "$path.patch")) {
# return $p
# if (-f $p);
# }
# return undef;
#}
sub slashme($) {
my ($dir) = @_;
$dir =~ s#([^/])$#$&/#; # append a slash if necessary
if ($dir eq './') {
return '';
} else {
return $dir;
}
}
# Generate a list of files in a directory
#
sub files_in($$) {
my ($dir, $path) = @_;
my $dh = new FileHandle;
my (@files, $file);
opendir $dh, length("$dir$path") ? "$dir$path" : '.'
or die "$dir$path: $!\n";
while ($file = readdir($dh)) {
next if $file =~ /^(\.|\.\.|\.#.*|CVS|.*~)$/;
if (-d "$dir$path$file") {
@files = (@files, files_in($dir, "$path$file/"));
} else {
#print "[$path$file]\n";
push @files, "$path$file";
}
}
closedir $dh;
return @files;
}
# Parse a configuration file
# Callback called with ($patch, @guards) arguments
#
sub parse($$) {
my ($fh, $callback) = @_;
my $line = "";
while (<$fh>) {
chomp;
s/(^|\s+)#.*//;
if (s/\\$/ /) {
$line .= $_;
next;
}
$line .= $_;
my @guards = ();
foreach my $token (split /[\s\t\n]+/, $line) {
next if $token eq "";
if ($token =~ /^[-+]/) {
push @guards, $token;
} else {
#print "[" . join(",", @guards) . "] $token\n";
&$callback($token, @guards);
}
}
$line = "";
}
}
# Command line options
#
my ($dir, $config, $default, $check, $list, $invert_match, $with_guards) =
( '', '-', 1, 0, 0, 0, 0);
my @path;
# Help text
#
sub help() {
print "$0 - select from a list of files guarded by conditions\n";
print "SYNOPSIS: $0 [--prefix=dir] [--path=dir1:dir2:...]\n" .
" [--default=0|1] [--check|--list] [--invert-match]\n" .
" [--with-guards] [--config=file] symbol ...\n\n" .
" (Default values: --path='" . join(':', @path) . "', " .
"--default=$default)\n";
exit 0;
}
# Parse command line options
#
Getopt::Long::Configure ("bundling");
eval {
unless (GetOptions (
'd|prefix=s' => \$dir,
'c|config=s' => \$config,
'C|check' => \$check,
'l|list' => \$list,
'w|with-guards' => \$with_guards,
'p|path=s' => \@path,
'D|default=i' => \$default,
'v|invert-match' => \$invert_match,
'h|help' => sub { help(); exit 0; })) {
help();
exit 1;
}
};
if ($@) {
print "$@";
help();
exit 1;
}
@path = ('.')
unless (@path);
@path = split(/:/, join(':', @path));
my $fh = ($config eq '-') ? \*STDIN : new FileHandle($config)
or die "$config: $!\n";
$dir = slashme($dir);
if ($check) {
# Check for duplicate files, or for files that are not referenced by
# the specification.
my $problems = 0;
my @files;
foreach (@path) {
@files = (@files, files_in($dir, slashme($_)));
}
my %files = map { $_ => 0 } @files;
parse($fh, sub {
my ($patch, @guards) = @_;
if (exists $files{$patch}) {
$files{$patch}++;
} else {
print "Not found: $dir$patch\n";
$problems++;
}});
$fh->close();
my ($file, $ref);
while (($file, $ref) = each %files) {
next if $ref == 1;
if ($ref == 0) {
print "Unused: $file\n" if $ref == 0;
$problems++;
}
if ($ref > 1) {
print "Warning: multiple uses: $file\n" if $ref > 1;
# This is not an error if the entries are mutually exclusive...
}
}
exit $problems ? 1 : 0;
} elsif ($list) {
parse($fh, sub {
my ($patch, @guards) = @_;
print join(' ', @guards), ' '
if (@guards && $with_guards);
print "$dir$patch\n";
});
} else {
# Generate a list of patches to apply.
my %symbols = map { $_ => 1 } @ARGV;
parse($fh, sub {
my ($patch, @guards) = @_;
my $selected;
if (@guards) {
# If the first guard is -xxx, the patch is included by default;
# if it is +xxx, the patch is excluded by default.
$selected = ($guards[0] =~ /^-/);
foreach (@guards) {
/^([-+])(!?)(.*)?/
or die "Bad guard '$_'\n";
# Check if the guard matches
if (($2 eq '!' && !exists $symbols{$3}) ||
($2 eq '' && ( $3 eq '' || exists $symbols{$3}))) {
# Include or exclude
$selected = ($1 eq '+');
}
}
} else {
# If there are no guards, use the specified default result.
$selected = $default;
}
print "$dir$patch\n"
if $selected ^ $invert_match;
});
$fh->close();
exit 0;
}
__END__
=head1 NAME
guards - select from a list of files guarded by conditions
=head1 SYNOPSIS
F<guards> [--prefix=F<dir>] [--path=F<dir1:dir2:...>] [--default=<0|1>]
[--check|--list] [--invert-match] [--with-guards] [--config=<file>]
I<symbol> ...
=head1 DESCRIPTION
The script reads a configuration file that may contain so-called guards, file
names, and comments, and writes those file names that satisfy all guards to
standard output. The script takes a list of symbols as its arguments. Each line
in the configuration file is processed separately. Lines may start with a
number of guards. The following guards are defined:
=over
+I<xxx> Include the file(s) on this line if the symbol I<xxx> is defined.
-I<xxx> Exclude the file(s) on this line if the symbol I<xxx> is defined.
+!I<xxx> Include the file(s) on this line if the symbol I<xxx> is not defined.
-!I<xxx> Exclude the file(s) on this line if the symbol I<xxx> is not defined.
- Exclude this file. Used to avoid spurious I<--check> messages.
=back
The guards are processed left to right. The last guard that matches determines
if the file is included. If no guard is specified, the I<--default>
setting determines if the file is included.
If no configuration file is specified, the script reads from standard input.
The I<--check> option is used to compare the specification file against the
file system. If files are referenced in the specification that do not exist, or
if files are not enlisted in the specification file warnings are printed. The
I<--path> option can be used to specify which directory or directories to scan.
Multiple directories are eparated by a colon (C<:>) character. The
I<--prefix> option specifies the location of the files.
Use I<--list> to list all files independend of any rules. Use I<--invert-match>
to list only the excluded patches. Use I<--with-guards> to also include all
inclusion and exclusion rules.
=head1 AUTHOR
Andreas Gruenbacher <agruen@suse.de>, SUSE Labs

33
install-configs Normal file
View File

@ -0,0 +1,33 @@
#! /bin/sh
sourcedir=$1
builddir=$2
release=$3
# Install all config files. (Some of them might not work in the
# kernel sources because of architecture specific patches, but
# we don't care.)
configs="$($sourcedir/guards --list < $sourcedir/config.conf)"
for config in $configs; do
name=$(basename $config)
path=arch/$(dirname $config)/defconfig.$name
mkdir -p $(dirname $path)
cat $builddir/config/$config \
| $sourcedir/config-subst CONFIG_LOCALVERSION '"'-$name'"' \
| $sourcedir/config-subst CONFIG_SUSE_KERNEL y \
> $path
done
echo "-$release" > localversion-rpm-release
# For all architectures included, if there is a defconfig.default,
# make that the defconfig as well. If there is no defconfig.default,
# also remove the defconfig, as it is obviously not a tested, and
# woldn't work, anyway.
for config in $configs; do
arch=${config%/*}
if [ -e arch/$arch/defconfig.default ]; then
cat arch/$arch/defconfig.default > arch/$arch/defconfig
else
rm -f arch/$arch/defconfig
fi
done

235
kabi-checks Normal file
View File

@ -0,0 +1,235 @@
#!/bin/bash
# Tool to do kABI checks.
# (c) Kurt Garloff <garloff@suse.de>, GNU GPL, 11/2005
# $Id$
#
# This tool looks at the generated symvers and compares it to the
# reference file (if existent). It prints warnings for changed symbol
# versions.
#
# Return value:
# 0 -- no changes
# 1 -- usage/input error
# 2 -- internal error
# 4 -- only additions
# >= 8 -- removed or changed symbols (see below)
#
# Severity classification:
# - 8 -- 15: if it's not found in a list (commonsyms or usedsyms)
# The score depends on the source; symbols in vmlinux are more
# likely to be used by anyone.
# - 16 -- 23: symbol is found in the list usedsyms
# - 24 -- 31: symbol is found in the list commonsyms
severities="
# unimportant ---. .--- important
# v v
drivers/base/* 13
drivers/char/ipmi/* 10
drivers/char/tpm/tpm 9
drivers/hwmon/* 10
drivers/i2c/i2c-core 9
drivers/md/* 13
drivers/message/fusion/* 6
drivers/pci/* 12
drivers/pci/hotplug/pci_hotplug 10
drivers/scsi/libata 12
drivers/scsi/scsi* 12
drivers/scsi/*/scsi_transport_* 12
drivers/scsi/libiscsi* 12
drivers/ide/ide-core 11
drivers/usb/core/usbcore 10
drivers/usb/serial/usbserial 9
fs/dmapi/dmapi 11
fs/fat/fat 11
fs/jbd/jbd 11
net/ipv4/netfilter/ip_tables 9
vmlinux 15
"
# Turning off UTF-8 processing provides a major speedup.
export LC_ALL=C
echo "${0##*/} $@"
unset quiet verbose
if [ "$1" = "-q" ]; then
shift
quiet=1
fi
if [ "$1" = "-v" ]; then
shift
verbose=1
fi
if [ $# -lt 2 -o $# -gt 4 ]; then
echo "Usage: ${0##*/} [-q] [-v] reference symvers [commonsyms [usedsyms]]" >&2
exit 1
fi
for file in "$@"; do
[ -r "$file" ] && continue
echo "Cannot read from '$file'" >&2
exit 1
done
declare_symbol_severity() {
declare severity=$1
while [ $# -ge 2 ]; do
if ! eval "severity_of_${2//[^a-zA-Z0-9_]/_}=$severity"; then
echo "Internal error" >&2
exit 2
fi
shift
done
}
consistency_check() {
declare_symbol_severity 16 consistency_check_foo
check_modified_symbols >/dev/null <<-EOF
consistency_check_foo -0x12345678 consistency/check/foo +0x98765432 consistency/check/foo
EOF
if [ $? -ne 31 ]; then
echo "Internal error" >&2
exit 2
fi
}
#set -x
eval '
severity() {
case $2 in
'"$(
( echo "$severities"
echo "consistency/check/* 15" # For the consistency test
) \
| sed -e '/^#/d' -e '/^$/d' \
| while read glob severity; do
echo " ($glob) _rc=$severity ;;"
done
)"'
(*) _rc=8 ;;
esac
# Is a particular severity defined for this symbol?
declare severity=severity_of_$1
if [ -n "${!severity}" ]; then
((_rc += ${!severity}))
fi
return $_rc
}'
#set +x
grab_symvers_from_rpm() {(
# (Run in subshell to make trap work.)
tmpdir=$(mktemp -t -d ${0##*/}.XXXXXX)
trap "cd /; rm -rf $tmpdir" EXIT
cd $tmpdir
rpm2cpio "$file" \
| cpio -dim --quiet './boot/symvers-*.gz'
set -- boot/symvers-*.gz
if ! [ -e "$1" ]; then
echo "Failed to extract symvers-*.gz from $file" >&2
exit 1
fi
zcat "$1"
)}
grab_symvers() {
declare tag=$1 file=$2 pwd tmpdir
case "$(file -b - <"$file")" in
gzip*)
zcat "$file"
;;
RPM*)
grab_symvers_from_rpm "$file"
;;
*)
cat "$file"
;;
esac \
| sed -e "/^#/d" -e "s/^/$tag/" \
| sort -k 2
}
filter_out_identical_symbols() {
# This expression works no matter how many columns the files have.
grep -v -P '^\S+ -(\S+)( \S+)+ \+\1( \S+)+$'
}
check_modified_symbols() {
declare -i RC=0 _rc
declare ignored
while read symbol tail; do
# Split in half no matter how many columns the files have.
set -- $tail ; half=$(($#/2+1))
version1=$1 ; version2=${!half} ; shift
source1=$1 ; source2=${!half} ; shift
case "$version1$version2" in
-\#*)
continue
;;
-*+* | -*)
ignored=
case "$version1" in
*=\>*)
if [ "${version1#*=>}" = "${version2#+}" ]; then
version1="${version1%=>*}"
ignored="; ignored"
fi
;;
esac
severity $symbol $source1 && continue
_rc=$?
if [ -z "$quiet" ]; then
echo -n "Warning: $source1: $symbol(${version1#-}) "
if [ -n "$version2" ]; then
echo -n "changed to $symbol(${version2#+})"
[ "$source1" != "$source2" ] &&
echo -n " and moved to $source2"
else
echo -n "removed"
fi
echo " (badness ${_rc}$ignored)"
fi
[ -n "$ignored" ] && _rc=0
;;
*)
if [ -n "$verbose" ]; then
echo " new symbol $symbol: ${version1#+}"
fi
_rc=4
;;
esac
if [ ${_rc} -gt $RC ]; then RC=${_rc}; fi
done
return $RC
}
sort_by_badness() {
sed -e 's/.*(badness \([0-9]\+\)).*/\1 &/' -e 't' -e 's/^/0 /' \
| sort -n -r \
| sed -e 's/^[0-9]* //'
}
consistency_check
[ -n "$4" ] && declare_symbol_severity 8 $(< $4)
[ -n "$3" ] && declare_symbol_severity 16 $(< $3)
join -j 2 -a 1 -a 2 <(grab_symvers - $1) <(grab_symvers + $2) \
| filter_out_identical_symbols \
| check_modified_symbols \
| sort_by_badness
RC=${PIPESTATUS[2]}
echo "kABI verdict: $RC"
exit $RC

3
kabi.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a07a4935312e4994a8014e5a4880057c3bbfe899e31f17091e0a2809a57ede7b
size 1946830

38753
kernel-debug.changes Normal file

File diff suppressed because it is too large Load Diff

21842
kernel-debug.spec Normal file

File diff suppressed because it is too large Load Diff

38753
kernel-default.changes Normal file

File diff suppressed because it is too large Load Diff

21860
kernel-default.spec Normal file

File diff suppressed because it is too large Load Diff

38753
kernel-dummy.changes Normal file

File diff suppressed because it is too large Load Diff

21281
kernel-dummy.spec Normal file

File diff suppressed because it is too large Load Diff

38753
kernel-kdump.changes Normal file

File diff suppressed because it is too large Load Diff

21841
kernel-kdump.spec Normal file

File diff suppressed because it is too large Load Diff

38753
kernel-lockdep.changes Normal file

File diff suppressed because it is too large Load Diff

21839
kernel-lockdep.spec Normal file

File diff suppressed because it is too large Load Diff

121
kernel-module-subpackage Normal file
View File

@ -0,0 +1,121 @@
%package -n %{-n*}-%1
Version: %(echo %{-v*}-%3 | tr - _)
Release: %{-r*}
%(
for spec in {%_sourcedir,%_specdir}/%name.spec /dev/null; do
[ -e $spec ] && break
done
awk '
BEGIN { tags["summary"] = "Summary: %summary"
tags["group"] = "Group: %group" }
/^%%/ { in_pkg_header = \
($0 ~ /^%%package[ \t]+KMP[ \t]*$/ ||
$0 ~ /^%%package[ \t]+-n[ \t]*%name-KMP[ \t]*$/)
next }
in_pkg_header && /^(Summary|Group):[ \t]*/ \
{ tag = tolower($1) ; sub(/:$/, "", tag)
tags[tag] = $0 }
END { print tags["summary"]
print tags["group"] }
' $spec
)
Provides: %{-n*} = %(echo %{-v*}-%3 | tr - _)
Requires: kernel-%1 coreutils grep
AutoReqProv: on
%{-p:%{expand:%(cd %_sourcedir; cat %{-p*})}}
%description -n %{-n*}-%1
%(
for spec in {%_sourcedir,%_specdir}/%name.spec /dev/null; do
[ -e $spec ] && break
done
awk '
/^%%/ { in_desc = \
($0 ~ /^%%description[ \t]+KMP[ \t]*$/ ||
$0 ~ /^%%description[ \t]+-n[ \t]*%name-KMP[ \t]*$/)
next }
in_desc { print; good = 1 }
END { exit(! good) }
' $spec || \
awk '
/^%%/ { in_desc = \
($0 ~ /^%%description[ \t]*$/ ||
$0 ~ /^%%description[ \t]+-n[ \t]*%name[ \t]*$/)
next }
in_desc { print; good = 1 }
END { exit(! good) }
' $spec
)
%post -n %{-n*}-%1
version=%(echo %{-v*}-%3 | tr - _)
if [ -e /boot/System.map-%2 ]; then
/sbin/depmod -a -F /boot/System.map-%2 %2
fi
modules=( $(rpm -ql %{-n*}-%1-$version-%{-r*} | grep '\.ko$') )
if [ -x /usr/lib/module-init-tools/weak-modules ]; then
printf '%s\n' "${modules[@]}" \
| /usr/lib/module-init-tools/weak-modules --add-modules
fi
if [ -e /etc/sysconfig/kernel -a -e /boot/initrd-%2 ]; then
source /etc/sysconfig/kernel
run_mkinitrd=
set -- "${modules[@]##*/}" ; set -- "${@%.ko}"
for module in $INITRD_MODULES; do
case " $* " in
*" $module "*)
run_mkinitrd=1
break ;;
esac
done
if [ -n "$run_mkinitrd" ]; then
for image in vmlinuz image vmlinux linux bzImage; do
if [ -f /boot/$image-%2 ]; then
/sbin/mkinitrd -k /boot/$image-%2 \
-i /boot/initrd-%2 \
|| exit 1
break
fi
done
fi
fi
%preun -n %{-n*}-%1
version=%(echo %{-v*}-%3 | tr - _)
set -o noclobber
rpm -ql %{-n*}-%1-$version-%{-r*} | grep '\.ko$' \
> /var/run/rpm-%{-n*}-%1-$version-%{-r*}-modules
%postun -n %{-n*}-%1
version=%(echo %{-v*}-%3 | tr - _)
modules=( $(cat /var/run/rpm-%{-n*}-%1-$version-%{-r*}-modules) )
rm -f /var/run/rpm-%{-n*}-%1-$version-%{-r*}-modules
if [ -e /boot/System.map-%2 ]; then
/sbin/depmod -a -F /boot/System.map-%2 %2
fi
if [ -x /usr/lib/module-init-tools/weak-modules ]; then
printf '%s\n' "${modules[@]}" \
| /usr/lib/module-init-tools/weak-modules --remove-modules
fi
if [ -e /etc/sysconfig/kernel -a -e /boot/initrd-%2 ]; then
source /etc/sysconfig/kernel
run_mkinitrd=
set -- "${modules[@]##*/}" ; set -- "${@%.ko}"
for module in $INITRD_MODULES; do
case " $* " in
*" $module "*)
run_mkinitrd=1
break ;;
esac
done
if [ -n "$run_mkinitrd" ]; then
for image in vmlinuz image vmlinux linux bzImage; do
if [ -f /boot/$image-%2 ]; then
/sbin/mkinitrd -k /boot/$image-%2 \
-i /boot/initrd-%2 \
|| exit 1
break
fi
done
fi
fi
%files -n %{-n*}-%1
%{-f:%{expand:%(cd %_sourcedir; cat %{-f*})}}
%{!-f:%defattr (-,root,root)}
%{!-f:/lib/modules/%2}

38753
kernel-pae.changes Normal file

File diff suppressed because it is too large Load Diff

21837
kernel-pae.spec Normal file

File diff suppressed because it is too large Load Diff

38753
kernel-ppc64.changes Normal file

File diff suppressed because it is too large Load Diff

21854
kernel-ppc64.spec Normal file

File diff suppressed because it is too large Load Diff

38753
kernel-ps3.changes Normal file

File diff suppressed because it is too large Load Diff

21840
kernel-ps3.spec Normal file

File diff suppressed because it is too large Load Diff

38753
kernel-rt.changes Normal file

File diff suppressed because it is too large Load Diff

21844
kernel-rt.spec Normal file

File diff suppressed because it is too large Load Diff

38753
kernel-rt_debug.changes Normal file

File diff suppressed because it is too large Load Diff

21839
kernel-rt_debug.spec Normal file

File diff suppressed because it is too large Load Diff

38753
kernel-s390.changes Normal file

File diff suppressed because it is too large Load Diff

21835
kernel-s390.spec Normal file

File diff suppressed because it is too large Load Diff

38753
kernel-source.changes Normal file

File diff suppressed because it is too large Load Diff

21530
kernel-source.spec Normal file

File diff suppressed because it is too large Load Diff

38753
kernel-syms.changes Normal file

File diff suppressed because it is too large Load Diff

21385
kernel-syms.spec Normal file

File diff suppressed because it is too large Load Diff

38753
kernel-vanilla.changes Normal file

File diff suppressed because it is too large Load Diff

21852
kernel-vanilla.spec Normal file

File diff suppressed because it is too large Load Diff

38753
kernel-xen.changes Normal file

File diff suppressed because it is too large Load Diff

21841
kernel-xen.spec Normal file

File diff suppressed because it is too large Load Diff

3
linux-2.6.25.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:108b2a3f2b05c0e57d1d0977619525e46f8d4b425aef4b38b47dcf94292f2dd2
size 48601689

42
macros.kernel-source Normal file
View File

@ -0,0 +1,42 @@
# Defines %flavors_to_build and %kernel_source() as a side effect.
# ps3 has modules disabled, always skip it
%_kernel_module_package(n:v:r:s:f:Xp:) \
BuildRequires: module-init-tools kernel-syms\
%{expand:%( \
subpkg=%{-s*}%{!-s:/usr/lib/rpm/kernel-module-subpackage} \
echo "%%define _suse_kernel_module_subpackage(n:v:r:f:p:) %%{expand:%%(cd %_sourcedir; cat $subpkg; echo %%%%nil)}" \
flavors="%{!-X:%*}%{-X:$(ls /usr/src/linux-obj/%_target_cpu 2>/dev/null)}" \
flavors_to_build= \
kver=$(rpm -q --qf '%{VERSION}-%{RELEASE}' kernel-source) \
for flavor in $flavors; do \
if [ $flavor = "ps3" ]; then continue ; fi \
if [ -n "%{-X}" ]; then \
case " %* " in \
(*" $flavor "*) \
continue ;; \
esac \
fi \
krel=$(make -s -C /usr/src/linux-obj/%_target_cpu/$flavor kernelrelease) \
[ -e /boot/symsets-$krel.tar.gz ] || continue \
flavors_to_build="$flavors_to_build $flavor" \
echo "%%_suse_kernel_module_subpackage -n %{-n*}%{!-n:%name}-kmp -v %{-v*}%{!-v:%version} -r %{-r*}%{!-r:%release} %{-p} $flavor $krel $kver" \
done \
echo "%%global flavors_to_build${flavors_to_build:-%%nil}" \
echo "%%{expand:%%(test -z '%flavors_to_build' && echo %%%%internal_kmp_error)}" \
echo "%%global kernel_source() /usr/src/linux-obj/%_target_cpu/%%%%{1}" \
\
echo "%package -n %{-n*}%{!-n:%name}-kmp-_dummy_" \
echo "Version: %version" \
echo "Summary: %summary" \
echo "Group: %group" \
echo "%description -n %{-n*}%{!-n:%name}-kmp-_dummy_" \
)}
# kernel_module_package: simply pass on all options and arguments.
%kernel_module_package(n:v:r:s:f:xp:) \
%{expand:%%_kernel_module_package %{-x:-X} %{-n} %{-v} %{-r} %{-s} %{-f} %{-p} %*}
# suse_kernel_module_package: invert the meaning of the -x flag. (You are not
# supposed to understand why a simple %{-x:}%{!-x:-x} won't work.)
%suse_kernel_module_package(n:v:r:s:f:xp:) \
%{expand:%%_kernel_module_package %{-x: }%{!-x:-X} %{-n} %{-v} %{-r} %{-s} %{-f} %{-p} %*}

111
make-symsets Normal file
View File

@ -0,0 +1,111 @@
#! /bin/bash
unset LANG ${!LC_*}
# Usage: make-symsets symsets.tar.gz [old-symsets.tar.gz]
# < symvers.gz
#
# symsets.tar.gz
# Create this symbol set tarball.
#
# old-symsets.tar.gz
# Reuse all possible symbol sets from this tarball.
tarball=$1
old_tarball=$2
# Classify all the symbols by the directory they live in
unset ${!class_*}
while read class ignore line; do
class=class_${class//[^a-zA-Z0-9_]/_}
eval "$class[\${#$class[@]}]=\"$line\""
if [ $ignore -gt 0 ]; then
eval "ignore_$class=1"
fi
done < <(
awk '
BEGIN { FS="\t" ; OFS="\t" }
{ class=$3
sub(/\/[^/]+$/, "", class)
ignore=sub(/.*=>/, "", $1)
print class, ignore, $0
}
'
)
tmpdir=$(mktemp -t -d ${0##*/}.XXXXXX)
trap "rm -rf $tmpdir" EXIT
basename=$(basename ${tarball:-.} .tar.gz)
# Save all the new sets, computer and output their hashes
newdir=$tmpdir/new/$basename
mkdir -p $newdir
for class in ${!class_*} ; do
class=${class#class_}
eval "printf \"%s\\n\" \"\${class_$class[@]}\"" \
| sort -k2 \
> $newdir/tmp
set -- $(md5sum $newdir/tmp) ; set -- ${1:0:16}
mv $newdir/tmp $newdir/$class.$1
#echo "Provides: kernel($class) = $1"
done
shopt -s nullglob
if [ -n "$old_tarball" ]; then
# Reuse all sets of symbols from the old tarball that are
# still the same.
old_basename=$(basename $old_tarball .tar.gz)
mkdir -p $tmpdir/old
zcat $old_tarball \
| tar xf - -C $tmpdir/old
set -- $tmpdir/old/*
olddir=$1
if [ ! -d $olddir ]; then
echo "$old_tarball does not contain directory $old_basename"
exit 1
fi
for oldset in $olddir/* ; do
[ -e $newdir/${oldset#$olddir/} ] && continue
class=${oldset##*/} ; class=${class%.*}
set -- $newdir/$class.*
[ $# -eq 1 ] || continue
newset=$1
# '*' doesn't occur in either file.
missing="$(join -t '*' -j 1 -v 1 <(sort "$oldset") <(sort "$newset"))"
if [ -z "$missing" ]; then
keep_oldset[${#keep_oldset[@]}]=$oldset
#echo "Provides: kernel($class) = ${oldset##*.} (old)"
else
set -- $(echo "$missing" | awk '{ print $2 "(" $1 ")" }')
ignore=ignore_class_$class
if [ -n "${!ignore}" ]; then
ignore="; ignoring"
else
ignore=
status=1
fi
echo "No longer provided: kernel($class) = ${oldset##*.} (missing/changed: $@$ignore)" >&2
fi
done
if [ ${#keep_oldset[@]} -gt 0 ]; then
mv "${keep_oldset[@]}" $newdir/
fi
else
echo "No longer provided: previous kernel(...) symbols that may still be" \
"compatible" >&2
fi
# Store the generated sets in $tarball
tar cf - -C $tmpdir/new $basename \
| gzip -9 \
> $tarball \
|| exit 1
exit $status
# vim:shiftwidth=4 softtabstop=4

30
module-renames Normal file
View File

@ -0,0 +1,30 @@
# Modules that have been renamed (from *-new to *, etc.)
#
# Note: we mostly care about storage drivers in this list; others
# will not usually end up in sysconfig files, and so the appropriate
# modules will get loaded when matchign hardware is detected. For
# convenience, we also include the foo-new drivers from older
# distributions here.
#
# This table has been created based on the results of the
# misc/obsolete-module-aliases script in the SUSE kernel CVS.
## SLES8 => SLES10
alias bcm-new bcm
alias aic79xx-new aic79xx
## SLES9 GA .. SLES9 SP3 => SLES10
alias bcm4400 b44
alias bcm5700 tg3
alias bcm5700-new tg3
alias carmel sx8
alias e1000-new e1000
alias lpfcdd lpfc
alias qla2100 qla2xxx
alias qla2200 qla2xxx
alias qla2300 qla2xxx
alias qla2322 qla2xxx
alias qla2400 qla2xxx
alias qla6312 qla2xxx
alias qla6322 qla2xxx
alias tg3-new tg3

3
novell-kmp.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2f4f9fb7b64da4f7dfe0325cb4cb0dc481cf950222d08671f978d6d7826921e7
size 2328

3
patches.addon.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e78dbc496136e8c02b3cb0a4a57be6ae431e7607692c70bf5b54bd84a6b5aff9
size 127

3
patches.apparmor.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3f162867255d8bcf0f40f1303916d2a1e879a35922901728fc9357c70427d21d
size 57433

3
patches.arch.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:aa005a0a8e7099c95159592febf3e139d190f2bcb8d0fcc40e2c0909af19d235
size 24912

3
patches.drivers.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6077bb0742f2636968f93c176693147f4f2ec285e89449dd29e1a542bac59ddc
size 355194

3
patches.fixes.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f46fcb507a72f8dd5f5f18f0cd4fce6879420e10ce0b2968d7449b8504c9eaea
size 22756

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:627e81881550605c238f7063fb8f31fa22fecceb83127c573151e4ce30bec6d3
size 78001

3
patches.rpmify.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d52b5683fe2a6d3b10db14b453585695efb79bfc1ba9201e1342d8dd411fc9c9
size 1613

3
patches.rt.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7f23d0ef04d205c0c42a04b675bb30261f449ab9ed890a7fa91abd0fa47e9044
size 460762

3
patches.suse.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3c96287b35f7eb1c77352d56cbb00ddecce778a6029389fe5440850cf31fd5b1
size 921336

3
patches.uml.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f06a71eabfc02bbdb249f64b53d4c91851b7287c759c40a88cfd64cd3d17cf12
size 11029

3
patches.xen.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d2f1cba8b03a65e22d8e37eb5ca674e7249c7e65268a3edf87aae03ab40ba26d
size 1246969

122
post.sh Normal file
View File

@ -0,0 +1,122 @@
# It must be possible to install different kernel.rpm packages in parallel.
# But in this post install script, the /boot/vmlinux symlink is replaced.
# On powerpc, the different kernels are for different board/firmware types
# They are not compatible.
wrong_boardtype() {
echo "This kernel is for $1, it will not boot on your system."
echo "The /boot/vmlinux symlink will not be created or updated."
exit 0
}
if [ -f /proc/cpuinfo ]; then
case "@FLAVOR@" in
ppc64|kdump)
if [ -d /proc/device-tree ]; then
if [ ! -d /proc/ppc64 ]; then
wrong_boardtype "OpenFirmware based 64bit machines or legacy iSeries"
fi
fi
;;
default)
if [ -d /proc/ppc64 -o -d /proc/iSeries ]; then
wrong_boardtype "32bit systems"
fi
;;
*)
;;
esac
fi
echo Setting up /lib/modules/@KERNELRELEASE@
suffix=
case @FLAVOR@ in
kdump|ps3|um|xen*)
suffix=-@FLAVOR@
;;
esac
for x in /boot/@IMAGE@ /boot/initrd; do
rm -f $x$suffix
ln -s ${x##*/}-@KERNELRELEASE@ $x$suffix
done
if [ -x /sbin/module_upgrade ]; then
/sbin/module_upgrade --rename mptscsih="mptspi mptfc mptsas"
fi
# Add symlinks of compatible modules to /lib/modules/$krel/weak-updates/.
if [ -x /usr/lib/module-init-tools/weak-modules ]; then
/usr/lib/module-init-tools/weak-modules --add-kernel @KERNELRELEASE@
fi
/sbin/depmod -a -F /boot/System.map-@KERNELRELEASE@ @KERNELRELEASE@
message_install_bl () {
echo "You may need to setup and install the boot loader using the"
echo "available bootloader for your platform (e.g. grub, lilo, zipl, ...)."
}
run_bootloader () {
if [ -f /etc/sysconfig/bootloader ] &&
[ -f /boot/grub/menu.lst -o \
-f /etc/lilo.conf -o \
-f /etc/elilo.conf -o \
-f /etc/zipl.conf ]
then
return 0
else
return 1
fi
}
if [ -f /etc/fstab -a ! -e /.buildenv -a -x /sbin/mkinitrd ] ; then
if ! /sbin/mkinitrd -k /boot/@IMAGE@-@KERNELRELEASE@ \
-i /boot/initrd-@KERNELRELEASE@; then
echo "/sbin/mkinitrd failed" >&2
exit 1
fi
# only run the bootloader if the usual bootloader configuration
# files are there -- this is different on every architecture
if run_bootloader ; then
# handle 10.2 and SLES10 SP1
if [ -x /usr/lib/bootloader/bootloader_entry ]; then
/usr/lib/bootloader/bootloader_entry \
add \
@FLAVOR@ \
@KERNELRELEASE@ \
@IMAGE@-@KERNELRELEASE@ \
initrd-@KERNELRELEASE@
# handle 10.1 and SLES10 GA
elif [ -x /sbin/update-bootloader ]; then
case @FLAVOR@ in
kdump|um|ps3)
;;
*)
opt_xen_kernel=
case @FLAVOR@ in
xen*)
set -- @FLAVOR@
set -- ${1#xen}
opt_xen_kernel=--xen-kernel=/boot/xen${1:+-$1}.gz
;;
esac
echo "bootloader_entry script unavailable, updating /boot/@IMAGE@"
/sbin/update-bootloader \
--image /boot/@IMAGE@ \
--initrd /boot/initrd \
--add \
--force $opt_xen_kernel
/sbin/update-bootloader --refresh
;;
esac
else
message_install_bl
fi
fi
else
echo "Please run mkinitrd as soon as your system is complete."
message_install_bl
fi
# vim: set sts=4 sw=4 ts=8 noet:

49
postun.sh Normal file
View File

@ -0,0 +1,49 @@
# Remove symlinks from /lib/modules/$krel/weak-updates/.
if [ -x /usr/lib/module-init-tools/weak-modules ]; then
/usr/lib/module-init-tools/weak-modules --remove-kernel @KERNELRELEASE@
fi
# remove /boot/@IMAGE@.previous entry on a 10.1 and SLES10 GA system
# when going back from 10.2 or SLES10 SP1 kernel to the original kernel
remove_previos_entry=no
suffix=
case @FLAVOR@ in
kdump|ps3|um|xen*)
suffix=-@FLAVOR@
;;
esac
# Created in %post of old kernels
case "$(readlink /boot/@IMAGE@$suffix.previous)" in
@IMAGE@-@KERNELRELEASE@|$(readlink /boot/@IMAGE@$suffix))
remove_previos_entry=yes
rm -f /boot/@IMAGE@$suffix.previous
;;
esac
case "$(readlink /boot/initrd$suffix.previous)" in
initrd-@KERNELRELEASE@|$(readlink /boot/initrd$suffix))
rm -f /boot/initrd$suffix.previous
;;
esac
# remove fstab check once perl-Bootloader can cope with it
if [ -f /etc/fstab ]; then
# handle 10.2 and SLES10 SP1
if [ -x /usr/lib/bootloader/bootloader_entry ]; then
/usr/lib/bootloader/bootloader_entry \
remove \
@FLAVOR@ \
@KERNELRELEASE@ \
@IMAGE@-@KERNELRELEASE@ \
initrd-@KERNELRELEASE@
# handle 10.1 and SLES10 GA
elif [ -x /sbin/update-bootloader ]; then
if [ "$remove_previos_entry" = "yes" ] ; then
/sbin/update-bootloader --image /boot/@IMAGE@$suffix.previous \
--initrd /boot/initrd$suffix.previous \
--remove --force
fi
/sbin/update-bootloader --refresh
fi
fi

21
pre.sh Normal file
View File

@ -0,0 +1,21 @@
# see bug #259303
# this script runs when the kernel gets updated with YaST
# YaST calls rpm always with -U
# -U replaces all packages with the new one
# rpm removes the files from the old packages after the postinstall script ran
# this will double the required space below /boot
# remove the files from the old packages to make room for the new initrd
# rpm may complain about low disk space if /boot/vmlinux does not fit
if [ "$YAST_IS_RUNNING" != "" ]; then
mydf="$( POSIXLY_CORRECT=1 df -P /boot/ | awk '/^(\/|-[[:blank:]])/{ print $4}' )"
if test "$mydf" != "" ; then
echo "Free diskspace below /boot: $mydf blocks"
# echo "512 byte blocks: $(( 2 * 1024 * 20 ))"
if test "$mydf" -lt "40960" ; then
echo "make room for new kernel '@FLAVOR@' because there are less than 20MB available."
# disabled because it breaks patch rpms
#rm -fv /boot/@IMAGE@-*-@FLAVOR@
rm -fv /boot/initrd-*-@FLAVOR@
fi
fi
fi

14
prepare-build.sh Normal file
View File

@ -0,0 +1,14 @@
#!/bin/bash
# vim: syntax=sh
#set -x
set -e
test -f /.buildenv || exit 0
this_release=`rpm -q --qf %{RELEASE} kernel-dummy`
echo this_release $this_release
test -n "$this_release" || exit 1
shopt -s nullglob
for i in /usr/src/packages/SOURCES/*.spec; do
sed -i -e '/^BuildRequires:/s@kernel-dummy@@g' \
-e '/^BuildRequires:[ \t]*$/d' \
-e "/^Release:/s@^.*@Release: $this_release@" $i
done

0
ready Normal file
View File

1636
series.conf Normal file

File diff suppressed because it is too large Load Diff

20
source-post.sh Normal file
View File

@ -0,0 +1,20 @@
relink linux-@KERNELRELEASE@ /usr/src/linux
relink linux-@KERNELRELEASE@-obj /usr/src/linux-obj
if [ -e /.buildenv ]; then
# Autobuild has a modified version of uname that reports a specific
# kernel version if /.kernelversion exists.
arch=$(echo %_target_cpu \
| sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/ \
-e s/s390x/s390/ -e s/parisc64/parisc/ \
-e s/ppc.*/powerpc/)
flavor="$(
cd /usr/src/linux-@KERNELRELEASE@/arch/$arch
set -- defconfig.*
[ -e defconfig.default ] && set -- defconfig.default
echo ${1/defconfig.}
)"
echo @KERNELRELEASE@-$flavor > /.kernelversion
fi

1875
supported.conf Normal file

File diff suppressed because it is too large Load Diff