21

I sent my computer to the manufacturer for diagnosis and help for a video output issue it was having. They updated the BIOS. Since then I've been getting

[Firmware Bug]: TSC_DEADLINE disabled due to Errata; please update microcode to version: 0x20 (or later)

I didn't have any microcode or ucode packages installed before and I didn't used to get this message.

I've contacted the manufacturer and they've responded "don't remember your ticket number but doubt we updated the BIOS", so they're not being very helpful.

It boots and works, but is TSC_DEADLINE important or useful?

The only thing I can find about it is this: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/?id=73b866d89bf7c9a895d5445faad03fa3d56c8af8

But that seems to only apply to VirtualBox, and in any case I'm already running kernel 4.14 so I would think if that commit were going to fix my issue it already would have.

ryan@pocketwee:~$ uname -a
Linux pocketwee 4.14.0-1-amd64 #1 SMP Debian 4.14.2-1 (2017-11-30) x86_64 GNU/Linux
RML
  • 373
  • 1
  • 2
  • 8
  • Most Linux distributions provide a package `linux-firmware` which provides the required firmware updates. In Debian you may have to enable `contrib` and / or `non-free` to get it. The patch you linked is intended to solve the silly situation when the kernel complies of outdated firmware when booting in a virtual machine, which obviously does not have any firmware... – AlexP Dec 14 '17 at 13:32
  • 3
    @AlexP `linux-firmware` won’t update the microcode, you need `intel-microcode` or `amd64-microcode` for that (at least on Debian and derivatives). – Stephen Kitt Dec 14 '17 at 17:11

2 Answers2

22

The sudden appearance of this message is rather odd; it suggests your updated firmware is no longer upgrading your CPU’s microcode, whereas the previous firmware you had, did. Weird... (Another possible scenario is that your CPU originally didn’t support TSC deadline at all, and your firmware is now upgrading its microcode to a version which declares support for TSC deadline, but has errata rendering it useless.)

In any case, TSC deadline support is nice to have, but not vital. The kernel has an elaborate framework for timekeeping and timed event handling; TSC deadline is one possible implementation of event handling, but not the only one. On CPUs which support it, it is nice to have though, because it’s very efficient.

To upgrade your microcode and hopefully re-enable TSC deadline support, you can install the microcode update packages from Debian’s contrib and non-free repositories. To do so, edit your /etc/apt/sources.list to ensure that your Debian repository definitions include main, contrib and non-free; then run

sudo apt update

followed by

sudo apt install intel-microcode

(for Intel CPUs) or

sudo apt install amd64-microcode

(for AMD CPUs). Once that’s done, reboot, and your microcode should be updated. If TSC deadline support is re-enabled, you won’t see the error message at boot, and you’ll see tsc_deadline_timer in the flags lines of /proc/cpuinfo.

The Debian wiki has more information on microcode updates.

Stephen Kitt
  • 411,918
  • 54
  • 1,065
  • 1,164
0

Setting CONFIG_X86_X2APIC might work. I will need to backup my working system to try to break it again.

The angle is that TSC has something to do with interrupt remapping and iommu. You can turn this on under device drivers | IOMMU hardware support, which enables the support for x2apic, but also gets you a vulnerability that microcode can't fix, but seems to only affect VMs, so you can turn off 'Virtio IOMMU driver' for that.

I could be mistaken, however. I'll try to break my TSC again after I do a backup.

Engineer
  • 119
  • 5
  • 1
    Please note that in its current form your post looks like troubleshooting advice rather than a definitive answer. If that was not intended, please edit the post to make the explanation clearer. Otherwise, it might be best placed as a comment under the original question. – AdminBee Jul 20 '23 at 12:56
  • sorry, I'm working on finding details, but have to make new kernel each time / test. I did get it to work tho. – Engineer Jul 22 '23 at 02:51