Mailinglist Archive: opensuse-factory (498 mails)

< Previous Next >
Re: [opensuse-factory] Broken /boot/initrd file after latest upgrade (Tumbleweed 20160519)
On samedi, 21 mai 2016 14.33:32 h CEST Bjoern Voigt wrote:
Jan Engelhardt wrote:
On Saturday 2016-05-21 13:38, Bjoern Voigt wrote:
1) It is not compressed:

file /boot/initrd-`uname -r`
/boot/initrd-4.5.4-1-default: ASCII cpio archive (SVR4 with no CRC)
file is not able to handle chained cpio archives.
What it reports is correct though: the first part is a cpu firmware
(on some machines), followed by the - not reported - second compressed part.

2) It contains only two files and some directories:

# cpio --extract --make-directories --verbose < /boot/initrd-`uname -r`
cpio is unable to handle chained cpio archives.

.
early_cpio
kernel
kernel/x86
kernel/x86/microcode
kernel/x86/microcode/GenuineIntel.bin
16 blocks

3) It is bigger than the content:

# du -h
12K ./kernel/x86/microcode
16K ./kernel/x86
20K ./kernel
28K .
All normal given the above.
Ok, thank, Jan.

This must be a modern way or SUSE way to create initrd files.
Unfortunately most Internet blogs still show the old way to analyze
initrd files (first: gunzip the initrd file; second: extract the cpio
file). It there a documentation for analyzing the initrd files in the
modern format? I read something, that I have to skip some blocks in the
header to get the embedded "lzma" compressed file. Here is a script with
should do this (not tested):
http://forum.xda-developers.com/wiki/Extract_initramfs_from_zImage_compressed_with_LZMA_and_CPIO

Unfortunately one of my two problems is still unsolved.

The first problem (system only boots to text mode with Kernel
4.5.4-1-default) does not occur anymore.

The second problem still persists after calling "mkinitrd" and
"grub2-mkconfig -o /boot/grub2/grub.cfg" again and again: Because Kernel
4.6 (e.g. from kernel_stable repo) is currently incompatible with NVidia
driver, I currently want to stay on the 4.5.x kernel series. I manually
patched the Kernel sources kernel-source-4.5.4-1.1.noarch.rpm from
Tumbleweed with the 4.5.4 to 4.5.5 vanilla Kernel patch
(https://cdn.kernel.org/pub/linux/kernel/v4.x/incr/patch-4.5.4-5.xz)
without conflicts and compiled and installed the Kernel with "make
binrpm-pkg" and "rpm -ivh ...". I deselected the Kernel options
"CONFIG_DEBUG_KERNEL" and "CONFIG_EXPERT" because otherwise the Kernel
RPM files get 10x bigger than normal.

The Kernel 4.5.5-mykernel worked until today. Today I updated the system
to the latest Tumbleweed snapshot 20160519.

But now I have the following problem with the 4.5.5-mykernel:

1) I select the Kernel in Grub2:

openSUSE, with Linux 4.5.5-mykernel

2) Then I see

Loading Linux 4.5.5-mykernel ....
Loading initial ramdisk ...

3) The screen clears and the system stops booting with

uncompression error

-- System halted

Maybe the initrd is incorrectly at least for my Kernel or my Kernel is
incapable of decompressing the used initrd format. Could deselection of
CONFIG_EXPERT caused the problem? But the Kernel worked yesterday.

Any ideas?

Greetings,
Björn



What kind of cpu and nvidia did you have.
I've a Xeon E3-1535M Skylake + Quadro M2000M and both of them
work quite well.
First on 4.5.4 kernel without trouble. But I desactivate the intel gpu so no
optimus.
Actually 4.5.4 initrd is directly an xz (But I guess I don't need direct
patches for the cpu since
last bios update made by dell 2 weeks ago)

There's a newer NVIDIA-Linux-x86_64-367.18.run drivers release few day ago.

And for the previous one NVIDIA-Linux-x86_64-364.19.run
you can apply the attached patch, it has worked for me for 4.5 and 4.6 kernel

I've stopped using 4.6 due to really deviant comportement with udev (not find
LABEL disk etc).
Even if last version will have long awaited fixes for dell_laptop module.

--

Bruno Friedmann
Ioda-Net Sàrl www.ioda-net.ch
Bareos Partner
openSUSE Member, fsfe fellowship
GPG KEY : D5C9B751C4653227
irc: tigerfoot
diff -rup kernel/nvidia-drm/nvidia-drm-fb.c kernel/nvidia-drm/nvidia-drm-fb.c
--- kernel/nvidia-drm/nvidia-drm-fb.c 2016-04-19 22:31:08.000000000 +0200
+++ kernel/nvidia-drm/nvidia-drm-fb.c 2016-04-24 11:30:47.913886228 +0200
@@ -29,7 +29,7 @@
#include "nvidia-drm-fb.h"
#include "nvidia-drm-utils.h"
#include "nvidia-drm-gem.h"
-
+#include <linux/version.h>
#include <drm/drm_crtc_helper.h>

static void nvidia_framebuffer_destroy(struct drm_framebuffer *fb)
@@ -199,7 +199,12 @@ failed_fb_create:
struct drm_framebuffer *nvidia_drm_framebuffer_create
(
struct drm_device *dev,
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0)
struct drm_file *file, struct drm_mode_fb_cmd2 *cmd
+ #else
+ struct drm_file *file,
+ const struct drm_mode_fb_cmd2 *cmd
+ #endif
)
{
return internal_framebuffer_create(dev, file, cmd, 0, 0);
diff -rup kernel/nvidia-drm/nvidia-drm-fb.h kernel/nvidia-drm/nvidia-drm-fb.h
--- kernel/nvidia-drm/nvidia-drm-fb.h 2016-04-19 22:31:08.000000000 +0200
+++ kernel/nvidia-drm/nvidia-drm-fb.h 2016-04-24 11:32:01.462441204 +0200
@@ -24,7 +24,7 @@
#define __NVIDIA_DRM_FB_H__

#include "conftest.h"
-
+#include <linux/version.h>
#if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)

#include <drm/drmP.h>
@@ -45,7 +45,12 @@ struct nvidia_drm_framebuffer
struct drm_framebuffer *nvidia_drm_framebuffer_create
(
struct drm_device *dev,
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0)
struct drm_file *file, struct drm_mode_fb_cmd2 *cmd
+ #else
+ struct drm_file *file,
+ const struct drm_mode_fb_cmd2 *cmd
+ #endif
);

int nvidia_drm_add_nvkms_fb(
diff -rup kernel/nvidia-drm/nvidia-drm-linux.c
kernel/nvidia-drm/nvidia-drm-linux.c
--- kernel/nvidia-drm/nvidia-drm-linux.c 2016-04-19 22:31:08.000000000
+0200
+++ kernel/nvidia-drm/nvidia-drm-linux.c 2016-04-24 12:08:55.855989631
+0200
@@ -31,6 +31,7 @@

#if defined(NV_DRM_AVAILABLE)

+#include "nv-mm.h"
#include "nv-pgprot.h"

MODULE_PARM_DESC(
@@ -121,10 +122,9 @@ int nvidia_drm_lock_user_pages(unsigned

down_read(&mm->mmap_sem);

- pages_pinned = get_user_pages(current, mm,
- address, pages_count, write, force,
- user_pages, NULL);
- up_read(&mm->mmap_sem);
+ pages_pinned = NV_GET_USER_PAGES(address, pages_count, write, force,
+ user_pages, NULL);
+ up_read(&mm->mmap_sem);

if (pages_pinned < 0 || (unsigned)pages_pinned < pages_count)
{
< Previous Next >