Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[S390] add MACHINE_IS_LPAR flag

Introduce the MACHINE_IS_LPAR flag for code that should only be
executed if Linux is running in an LPAR.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>

authored by

Martin Schwidefsky and committed by
Martin Schwidefsky
27d71602 432ac5e0

+13 -7
+3
arch/s390/include/asm/setup.h
··· 71 71 #define MACHINE_FLAG_KVM (1UL << 9) 72 72 #define MACHINE_FLAG_HPAGE (1UL << 10) 73 73 #define MACHINE_FLAG_PFMF (1UL << 11) 74 + #define MACHINE_FLAG_LPAR (1UL << 12) 74 75 75 76 #define MACHINE_IS_VM (S390_lowcore.machine_flags & MACHINE_FLAG_VM) 76 77 #define MACHINE_IS_KVM (S390_lowcore.machine_flags & MACHINE_FLAG_KVM) 78 + #define MACHINE_IS_LPAR (S390_lowcore.machine_flags & MACHINE_FLAG_LPAR) 79 + 77 80 #define MACHINE_HAS_DIAG9C (S390_lowcore.machine_flags & MACHINE_FLAG_DIAG9C) 78 81 79 82 #ifndef __s390x__
+6 -3
arch/s390/kernel/early.c
··· 214 214 215 215 static noinline __init void detect_machine_type(void) 216 216 { 217 - /* No VM information? Looks like LPAR */ 218 - if (stsi(&vmms, 3, 2, 2) == -ENOSYS) 217 + /* Check current-configuration-level */ 218 + if ((stsi(NULL, 0, 0, 0) >> 28) <= 2) { 219 + S390_lowcore.machine_flags |= MACHINE_FLAG_LPAR; 219 220 return; 220 - if (!vmms.count) 221 + } 222 + /* Get virtual-machine cpu information. */ 223 + if (stsi(&vmms, 3, 2, 2) == -ENOSYS || !vmms.count) 221 224 return; 222 225 223 226 /* Running under KVM? If not we assume z/VM */
+2 -2
arch/s390/kernel/setup.c
··· 804 804 if (MACHINE_IS_VM) 805 805 pr_info("Linux is running as a z/VM " 806 806 "guest operating system in 31-bit mode\n"); 807 - else 807 + else if (MACHINE_IS_LPAR) 808 808 pr_info("Linux is running natively in 31-bit mode\n"); 809 809 if (MACHINE_HAS_IEEE) 810 810 pr_info("The hardware system has IEEE compatible " ··· 818 818 "guest operating system in 64-bit mode\n"); 819 819 else if (MACHINE_IS_KVM) 820 820 pr_info("Linux is running under KVM in 64-bit mode\n"); 821 - else 821 + else if (MACHINE_IS_LPAR) 822 822 pr_info("Linux is running natively in 64-bit mode\n"); 823 823 #endif /* CONFIG_64BIT */ 824 824
+1 -1
drivers/s390/cio/cio.c
··· 661 661 * We don't do this for VM because a tpi drops the cpu 662 662 * out of the sie which costs more cycles than it saves. 663 663 */ 664 - } while (!MACHINE_IS_VM && tpi (NULL) != 0); 664 + } while (MACHINE_IS_LPAR && tpi(NULL) != 0); 665 665 irq_exit(); 666 666 set_irq_regs(old_regs); 667 667 }
+1 -1
drivers/s390/cio/qdio_main.c
··· 534 534 535 535 if ((bufnr != q->last_move) || q->qdio_error) { 536 536 q->last_move = bufnr; 537 - if (!is_thinint_irq(q->irq_ptr) && !MACHINE_IS_VM) 537 + if (!is_thinint_irq(q->irq_ptr) && MACHINE_IS_LPAR) 538 538 q->u.in.timestamp = get_usecs(); 539 539 return 1; 540 540 } else