]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Handle the Facility Unavailable exception as a SIGILL
authorjhibbits <jhibbits@FreeBSD.org>
Fri, 15 Dec 2017 04:11:20 +0000 (04:11 +0000)
committerjhibbits <jhibbits@FreeBSD.org>
Fri, 15 Dec 2017 04:11:20 +0000 (04:11 +0000)
commit222c77cafd8c05f40489fd18f9f39644d87a228e
tree24029b7f42677806f6fa007d2af4a5687405cc29
parent42495b78608db87bc54a32b993bfe884e61aa7dd
Handle the Facility Unavailable exception as a SIGILL

Currently Facility Unavailable is absent and once an application
tries to use or access a register from a feature disabled in the
CPU it causes a kernel panic.

A simple test-case is:

int main() { asm volatile ("tbegin.;"); }

which will use TM (Hardware Transactional Memory) feature which
is not supported by the kernel and so will trigger the following
kernel panic:

----

fatal user trap:

    exception       = 0xf60 (unknown)
    srr0            = 0x10000890
    srr1            = 0x800000000000f032
    lr              = 0x100004e4
    curthread       = 0x5f93000
    pid = 1021, comm = htm

panic: unknown trap
cpuid = 40
KDB: stack backtrace:
Uptime: 3m18s
Dumping 10 MB (3 chunks)
    chunk 0: 11MB (2648 pages) ... ok
    chunk 1: 1MB (24 pages) ... ok
    chunk 2: 1MB (2 pages)panic: IOMMU mapping error: -4

cpuid = 40
Uptime: 3m18s

----

Since Hardware Transactional Memory is not yet supported by FreeBSD, treat
this as an illegal instruction.

PR: 224350
Submitted by: Gustavo Romero <gromero_AT_ibm_DOT_com>
MFC after: 2 weeks
sys/powerpc/include/trap.h
sys/powerpc/powerpc/trap.c