mirror of
https://github.com/linuxkit/linuxkit.git
synced 2026-04-11 13:02:04 +00:00
AUFS introduces new lockdep relations which are beyond the maximum variants
that lockdep ships with. Without this patch, AUFS triggers lockdep BUG sanity
checks and disables lockdep for the rest of the system.
The present value of the patch is:
```diff
aufs4.4 lockdep patch
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
index c57e424..4153563 100644
--- a/include/linux/lockdep.h
+++ b/include/linux/lockdep.h
@@ -29,7 +29,7 @@ extern int lock_stat;
*/
#define XXX_LOCK_USAGE_STATES (1+3*4)
-#define MAX_LOCKDEP_SUBCLASSES 8UL
+#define MAX_LOCKDEP_SUBCLASSES (8UL + 4)
/*
* NR_LOCKDEP_CACHING_CLASSES ... Number of classes
@@ -203,7 +203,7 @@ struct lock_chain {
u64 chain_key;
};
-#define MAX_LOCKDEP_KEYS_BITS 13
+#define MAX_LOCKDEP_KEYS_BITS (13 + 3)
/*
* Subtract one because we offset hlock->class_idx by 1 in order
* to make 0 mean no class. This avoids overflowing the class_idx
diff --git a/kernel/locking/lockdep_internals.h b/kernel/locking/lockdep_internals.h
index 51c4b24..fba7557 100644
--- a/kernel/locking/lockdep_internals.h
+++ b/kernel/locking/lockdep_internals.h
@@ -54,9 +54,9 @@ enum {
* table (if it's not there yet), and we check it for lock order
* conflicts and deadlocks.
*/
-#define MAX_LOCKDEP_ENTRIES 32768UL
+#define MAX_LOCKDEP_ENTRIES (32768UL << 5)
-#define MAX_LOCKDEP_CHAINS_BITS 16
+#define MAX_LOCKDEP_CHAINS_BITS (16 + 5)
#define MAX_LOCKDEP_CHAINS (1UL << MAX_LOCKDEP_CHAINS_BITS)
#define MAX_LOCKDEP_CHAIN_HLOCKS (MAX_LOCKDEP_CHAINS*5)
@@ -65,7 +65,7 @@ enum {
* Stack-trace: tightly packed array of stack backtrace
* addresses. Protected by the hash_lock.
*/
-#define MAX_STACK_TRACE_ENTRIES 524288UL
+#define MAX_STACK_TRACE_ENTRIES (524288UL << 5)
extern struct list_head all_lock_classes;
extern struct lock_chain lock_chains[];
```
Signed-off-by: David Sheets <dsheets@docker.com>
101 lines
3.1 KiB
Docker
101 lines
3.1 KiB
Docker
FROM ubuntu:15.10
|
|
|
|
ARG KERNEL_VERSION=4.4.15
|
|
ARG ARCH=x86_64
|
|
|
|
ENV KERNEL_SOURCE=https://www.kernel.org/pub/linux/kernel/v4.x/linux-${KERNEL_VERSION}.tar.xz
|
|
|
|
RUN apt-get update && apt-get -y upgrade && apt-get -y install \
|
|
unzip \
|
|
xz-utils \
|
|
curl \
|
|
bc \
|
|
build-essential \
|
|
cpio \
|
|
gcc libc6 libc6-dev \
|
|
kmod \
|
|
squashfs-tools \
|
|
genisoimage \
|
|
xorriso \
|
|
syslinux \
|
|
isolinux \
|
|
automake \
|
|
pkg-config \
|
|
git \
|
|
ncurses-dev \
|
|
p7zip-full \
|
|
lzop \
|
|
wget \
|
|
vim \
|
|
gcc-arm-linux-gnueabihf
|
|
|
|
RUN wget ${KERNEL_SOURCE}
|
|
|
|
RUN cat linux-${KERNEL_VERSION}.tar.xz | tar --absolute-names -xJ && mv /linux-${KERNEL_VERSION} /linux
|
|
|
|
# this is aufs4.4 20160627
|
|
ENV AUFS_REPO https://github.com/sfjro/aufs4-standalone
|
|
ENV AUFS_BRANCH aufs4.4
|
|
ENV AUFS_COMMIT ab2083cbed8619eccef23941c2c0c83357af7199
|
|
|
|
# Download AUFS and patch kernel
|
|
RUN git clone -b "$AUFS_BRANCH" "$AUFS_REPO" /aufs && \
|
|
cd /aufs && \
|
|
git checkout -q "$AUFS_COMMIT" && \
|
|
cd /linux && \
|
|
cp -r /aufs/Documentation /linux && \
|
|
cp -r /aufs/fs /linux && \
|
|
cp -r /aufs/include/uapi/linux/aufs_type.h /linux/include/uapi/linux/ && \
|
|
set -e && for patch in \
|
|
/aufs/aufs*-kbuild.patch \
|
|
/aufs/aufs*-base.patch \
|
|
/aufs/aufs*-mmap.patch \
|
|
/aufs/aufs*-standalone.patch \
|
|
/aufs/aufs*-loopback.patch \
|
|
/aufs/lockdep-debug.patch \
|
|
; do \
|
|
patch -p1 < "$patch"; \
|
|
done
|
|
|
|
COPY kernel_config /linux/arch/x86/configs/x86_64_defconfig
|
|
COPY kernel_config.arm /linux/arch/arm/configs/versatile_defconfig
|
|
|
|
# Apply local patches
|
|
COPY patches /patches
|
|
RUN cd /linux && \
|
|
mkdir /etc/kernel-patches && \
|
|
set -e && for patch in /patches/*.patch; do \
|
|
echo "Applying $patch"; \
|
|
cp "$patch" /etc/kernel-patches; \
|
|
patch -p1 < "$patch"; \
|
|
done && \
|
|
cd /etc/kernel-patches && tar cf /kernel-patches.tar .
|
|
|
|
RUN jobs=$(nproc); \
|
|
cd /linux && \
|
|
make ARCH=$ARCH defconfig && \
|
|
make ARCH=$ARCH oldconfig && \
|
|
make ARCH=$ARCH -j ${jobs} && \
|
|
make ARCH=$ARCH INSTALL_MOD_PATH=/tmp/kernel-modules modules_install && \
|
|
( cd /tmp/kernel-modules && tar cf /kernel-modules.tar . ) && \
|
|
make ARCH=$ARCH INSTALL_HDR_PATH=/tmp/kernel-headers headers_install
|
|
|
|
# Build aufs tools, do this here as they need kernel headers and to match aufs
|
|
# Fortunately they are built statically linked
|
|
|
|
# XXX not cross compiled yet!
|
|
|
|
# aufs-util 20151116
|
|
ENV AUFS_TOOLS_REPO https://github.com/Distrotech/aufs-util.git
|
|
ENV AUFS_TOOLS_COMMIT b5e7e204036da5e815ddec15a847a03c232771b4
|
|
|
|
RUN git clone ${AUFS_TOOLS_REPO} && \
|
|
cd /aufs-util && \
|
|
git checkout "$AUFS_TOOLS_COMMIT" && \
|
|
CPPFLAGS="-I/tmp/kernel-headers/include" CLFAGS=$CPPFLAGS LDFLAGS=$CPPFLAGS make && \
|
|
DESTDIR=/tmp/aufs-utils make install && \
|
|
rm -rf /tmp/aufs-utils/usr/lib /tmp/aufs-utils/usr/share && \
|
|
cd /tmp/aufs-utils && tar cf /aufs-utils.tar .
|
|
|
|
RUN printf "KERNEL_SOURCE=${KERNEL_SOURCE}\nAUFS_REPO=${AUFS_REPO}\nAUFS_BRANCH=${AUFS_BRANCH}\nAUFS_COMMIT=${AUFS_COMMIT}\nAUFS_TOOLS_REPO=${AUFS_TOOLS_REPO}\nAUFS_TOOLS_COMMIT=${AUFS_TOOLS_COMMIT}\n" > /kernel-source-info
|