tboot
bool tboot = tboot_enabled();
if (tboot)
if ( (tboot && !(msr & FEAT_CTL_VMX_ENABLED_INSIDE_SMX)) ||
(!tboot && !(msr & FEAT_CTL_VMX_ENABLED_OUTSIDE_SMX))) {
tboot ? "inside" : "outside");
map_base = PFN_DOWN(tboot->tboot_base);
map_size = PFN_UP(tboot->tboot_size);
if (tboot->num_mac_regions >= MAX_TB_MAC_REGIONS)
mr = &tboot->mac_regions[tboot->num_mac_regions++];
tboot->num_mac_regions = 0;
tboot->acpi_sinfo.kernel_s3_resume_vector =
tboot->shutdown_type = shutdown_type;
shutdown = (void(*)(void))(unsigned long)tboot->shutdown_entry;
TB_COPY_GAS(tboot->acpi_sinfo.pm1a_cnt_blk, fadt->xpm1a_control_block);
TB_COPY_GAS(tboot->acpi_sinfo.pm1b_cnt_blk, fadt->xpm1b_control_block);
TB_COPY_GAS(tboot->acpi_sinfo.pm1a_evt_blk, fadt->xpm1a_event_block);
TB_COPY_GAS(tboot->acpi_sinfo.pm1b_evt_blk, fadt->xpm1b_event_block);
tboot->acpi_sinfo.wakeup_vector = fadt->facs +
tboot->acpi_sinfo.pm1a_cnt_val = pm1a_control;
tboot->acpi_sinfo.pm1b_cnt_val = pm1b_control;
tboot->acpi_sinfo.vector_width = 32;
while (atomic_read((atomic_t *)&tboot->num_in_wfs) != num_aps &&
return !(atomic_read((atomic_t *)&tboot->num_in_wfs) == num_aps);
static struct tboot *tboot __read_mostly;
return tboot != NULL;
if (memcmp(&tboot_uuid, &tboot->uuid, sizeof(tboot->uuid))) {
if (tboot->version < 5) {
pr_warn("tboot version is invalid: %u\n", tboot->version);
pr_debug("version: %d\n", tboot->version);
pr_debug("log_addr: 0x%08x\n", tboot->log_addr);
pr_debug("shutdown_entry: 0x%x\n", tboot->shutdown_entry);
pr_debug("tboot_base: 0x%08x\n", tboot->tboot_base);
pr_debug("tboot_size: 0x%x\n", tboot->tboot_size);
tboot = (void *)fix_to_virt(FIX_TBOOT_BASE);
tboot = NULL;