应用 RT PREEMPT 内核补丁失败

应用 RT PREEMPT 内核补丁失败

我正在尝试为 Linux 内核应用 RT PREEMPT 补丁。正如指南中提到的,你应该这样做:

zcat patch-4.14.15-rt13.patch.gz | patch -p1

(假设您位于包含内核源代码的目录中。)

但我收到很多消息,例如:

The next patch would create the file tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-synthetic-event-createremove.tc,
which already exists!  Assume -R? [n] 
Apply anyway? [n] 
Skipping patch.
1 out of 1 hunk ignored
patching file virt/kvm/arm/arm.c
Reversed (or previously applied) patch detected!  Assume -R? [n] 
Apply anyway? [n] 
Skipping patch.
3 out of 3 hunks ignored -- saving rejects to file virt/kvm/arm/arm.c.rej

最终这个过程失败了。我在一个ubuntu:16.04和一个docker容器中尝试过这个debian:stretch,结果是一样的。

顺便说一句,我无法与修补过程交互,因为它是 bash 脚本的一部分。

我正在应用补丁Raspberry Pi 的内核源代码顺便提一句。

这里是完整的补丁输出

我究竟做错了什么?如何正确应用补丁?

其内容virt/kvm/arm/arm.c.rej为:

--- virt/kvm/arm/arm.c
+++ virt/kvm/arm/arm.c
@@ -650,7 +650,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
         * involves poking the GIC, which must be done in a
         * non-preemptible context.
         */
-       preempt_disable();
+       migrate_disable();

        kvm_pmu_flush_hwstate(vcpu);

@@ -687,7 +687,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
            kvm_pmu_sync_hwstate(vcpu);
            kvm_timer_sync_hwstate(vcpu);
            kvm_vgic_sync_hwstate(vcpu);
-           preempt_enable();
+           migrate_enable();
            continue;
        }

@@ -742,7 +742,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)

        kvm_vgic_sync_hwstate(vcpu);

-       preempt_enable();
+       migrate_enable();

        ret = handle_exit(vcpu, run, ret);
    }

构建后。

答案1

如果您仍然遇到问题,现在官方的树莓派内核存储库有一个分支抢占RT修补过的内核版本。您不再需要修补“vanilla”内核。这意味着,您不需要在内核版本和 rt 补丁版本之间找到匹配。此外,还包括一些其他补丁。

我写了一个教程并做了一些表现测试。 USB/LAN IRQ 仍然存在一些问题。我正在使用 RPi 3 B+ 进行一些测试,我将在本周发布它们。

相关内容