[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>
This commit is contained in:
parent
432ac5e04b
commit
27d71602b4
|
@ -71,9 +71,12 @@ extern unsigned int user_mode;
|
||||||
#define MACHINE_FLAG_KVM (1UL << 9)
|
#define MACHINE_FLAG_KVM (1UL << 9)
|
||||||
#define MACHINE_FLAG_HPAGE (1UL << 10)
|
#define MACHINE_FLAG_HPAGE (1UL << 10)
|
||||||
#define MACHINE_FLAG_PFMF (1UL << 11)
|
#define MACHINE_FLAG_PFMF (1UL << 11)
|
||||||
|
#define MACHINE_FLAG_LPAR (1UL << 12)
|
||||||
|
|
||||||
#define MACHINE_IS_VM (S390_lowcore.machine_flags & MACHINE_FLAG_VM)
|
#define MACHINE_IS_VM (S390_lowcore.machine_flags & MACHINE_FLAG_VM)
|
||||||
#define MACHINE_IS_KVM (S390_lowcore.machine_flags & MACHINE_FLAG_KVM)
|
#define MACHINE_IS_KVM (S390_lowcore.machine_flags & MACHINE_FLAG_KVM)
|
||||||
|
#define MACHINE_IS_LPAR (S390_lowcore.machine_flags & MACHINE_FLAG_LPAR)
|
||||||
|
|
||||||
#define MACHINE_HAS_DIAG9C (S390_lowcore.machine_flags & MACHINE_FLAG_DIAG9C)
|
#define MACHINE_HAS_DIAG9C (S390_lowcore.machine_flags & MACHINE_FLAG_DIAG9C)
|
||||||
|
|
||||||
#ifndef __s390x__
|
#ifndef __s390x__
|
||||||
|
|
|
@ -214,10 +214,13 @@ static __initdata struct sysinfo_3_2_2 vmms __aligned(PAGE_SIZE);
|
||||||
|
|
||||||
static noinline __init void detect_machine_type(void)
|
static noinline __init void detect_machine_type(void)
|
||||||
{
|
{
|
||||||
/* No VM information? Looks like LPAR */
|
/* Check current-configuration-level */
|
||||||
if (stsi(&vmms, 3, 2, 2) == -ENOSYS)
|
if ((stsi(NULL, 0, 0, 0) >> 28) <= 2) {
|
||||||
|
S390_lowcore.machine_flags |= MACHINE_FLAG_LPAR;
|
||||||
return;
|
return;
|
||||||
if (!vmms.count)
|
}
|
||||||
|
/* Get virtual-machine cpu information. */
|
||||||
|
if (stsi(&vmms, 3, 2, 2) == -ENOSYS || !vmms.count)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Running under KVM? If not we assume z/VM */
|
/* Running under KVM? If not we assume z/VM */
|
||||||
|
|
|
@ -804,7 +804,7 @@ setup_arch(char **cmdline_p)
|
||||||
if (MACHINE_IS_VM)
|
if (MACHINE_IS_VM)
|
||||||
pr_info("Linux is running as a z/VM "
|
pr_info("Linux is running as a z/VM "
|
||||||
"guest operating system in 31-bit mode\n");
|
"guest operating system in 31-bit mode\n");
|
||||||
else
|
else if (MACHINE_IS_LPAR)
|
||||||
pr_info("Linux is running natively in 31-bit mode\n");
|
pr_info("Linux is running natively in 31-bit mode\n");
|
||||||
if (MACHINE_HAS_IEEE)
|
if (MACHINE_HAS_IEEE)
|
||||||
pr_info("The hardware system has IEEE compatible "
|
pr_info("The hardware system has IEEE compatible "
|
||||||
|
@ -818,7 +818,7 @@ setup_arch(char **cmdline_p)
|
||||||
"guest operating system in 64-bit mode\n");
|
"guest operating system in 64-bit mode\n");
|
||||||
else if (MACHINE_IS_KVM)
|
else if (MACHINE_IS_KVM)
|
||||||
pr_info("Linux is running under KVM in 64-bit mode\n");
|
pr_info("Linux is running under KVM in 64-bit mode\n");
|
||||||
else
|
else if (MACHINE_IS_LPAR)
|
||||||
pr_info("Linux is running natively in 64-bit mode\n");
|
pr_info("Linux is running natively in 64-bit mode\n");
|
||||||
#endif /* CONFIG_64BIT */
|
#endif /* CONFIG_64BIT */
|
||||||
|
|
||||||
|
|
|
@ -661,7 +661,7 @@ void __irq_entry do_IRQ(struct pt_regs *regs)
|
||||||
* We don't do this for VM because a tpi drops the cpu
|
* We don't do this for VM because a tpi drops the cpu
|
||||||
* out of the sie which costs more cycles than it saves.
|
* out of the sie which costs more cycles than it saves.
|
||||||
*/
|
*/
|
||||||
} while (!MACHINE_IS_VM && tpi (NULL) != 0);
|
} while (MACHINE_IS_LPAR && tpi(NULL) != 0);
|
||||||
irq_exit();
|
irq_exit();
|
||||||
set_irq_regs(old_regs);
|
set_irq_regs(old_regs);
|
||||||
}
|
}
|
||||||
|
|
|
@ -534,7 +534,7 @@ static int qdio_inbound_q_moved(struct qdio_q *q)
|
||||||
|
|
||||||
if ((bufnr != q->last_move) || q->qdio_error) {
|
if ((bufnr != q->last_move) || q->qdio_error) {
|
||||||
q->last_move = bufnr;
|
q->last_move = bufnr;
|
||||||
if (!is_thinint_irq(q->irq_ptr) && !MACHINE_IS_VM)
|
if (!is_thinint_irq(q->irq_ptr) && MACHINE_IS_LPAR)
|
||||||
q->u.in.timestamp = get_usecs();
|
q->u.in.timestamp = get_usecs();
|
||||||
return 1;
|
return 1;
|
||||||
} else
|
} else
|
||||||
|
|
Loading…
Reference in New Issue