[S390] kvm: move cmf host id constant out of lowcore
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 27 Dec 2011 10:27:13 +0000 (11:27 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 27 Dec 2011 10:27:12 +0000 (11:27 +0100)
There is no reason for the cpu-measurement-facility host id constant to
reside in the lowcore where space is precious. Use an entry in the literal
pool in HANDLE_SIE_INTERCEPT and a stack slot in sie64a.
While we are at it replace the id -1 with 0 to indicate host execution.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/lowcore.h
arch/s390/kernel/asm-offsets.c
arch/s390/kernel/entry64.S
arch/s390/kernel/setup.c

index 9e13c7d..3b97964 100644 (file)
@@ -271,7 +271,7 @@ struct _lowcore {
        __u64   machine_flags;                  /* 0x0360 */
        __u64   ftrace_func;                    /* 0x0368 */
        __u64   gmap;                           /* 0x0370 */
-       __u64   cmf_hpp;                        /* 0x0378 */
+       __u8    pad_0x0378[0x0380-0x0378];      /* 0x0378 */
 
        /* Interrupt response block. */
        __u8    irb[64];                        /* 0x0380 */
index 7513187..0717363 100644 (file)
@@ -150,7 +150,6 @@ int main(void)
        DEFINE(__LC_LAST_BREAK, offsetof(struct _lowcore, breaking_event_addr));
        DEFINE(__LC_VDSO_PER_CPU, offsetof(struct _lowcore, vdso_per_cpu_data));
        DEFINE(__LC_GMAP, offsetof(struct _lowcore, gmap));
-       DEFINE(__LC_CMF_HPP, offsetof(struct _lowcore, cmf_hpp));
        DEFINE(__GMAP_ASCE, offsetof(struct gmap, asce));
 #endif /* CONFIG_32BIT */
        return 0;
index 83a9374..130fb02 100644 (file)
@@ -71,7 +71,7 @@ _TIF_EXIT_SIE = (_TIF_SIGPENDING | _TIF_NEED_RESCHED | _TIF_MCCK_PENDING)
 #if defined(CONFIG_KVM) || defined(CONFIG_KVM_MODULE)
        tm      __TI_flags+6(%r12),_TIF_SIE>>8
        jz      0f
-       SPP     __LC_CMF_HPP                    # set host id
+       SPP     BASED(.Lhost_id)                # set host id
        clc     SP_PSW+8(8,%r15),BASED(.Lsie_loop)
        jl      0f
        clc     SP_PSW+8(8,%r15),BASED(.Lsie_done)
@@ -1054,6 +1054,7 @@ ENTRY(sie64a)
        stmg    %r6,%r14,__SF_GPRS(%r15)        # save kernel registers
        stg     %r2,__SF_EMPTY(%r15)            # save control block pointer
        stg     %r3,__SF_EMPTY+8(%r15)          # save guest register save area
+       xc      __SF_EMPTY+16(8,%r15),__SF_EMPTY+16(%r15) # host id == 0
        lmg     %r0,%r13,0(%r3)                 # load guest gprs 0-13
        lg      %r14,__LC_THREAD_INFO           # pointer thread_info struct
        oi      __TI_flags+6(%r14),_TIF_SIE>>8
@@ -1070,7 +1071,7 @@ sie_gmap:
        SPP     __SF_EMPTY(%r15)                # set guest id
        sie     0(%r14)
 sie_done:
-       SPP     __LC_CMF_HPP                    # set host id
+       SPP     __SF_EMPTY+16(%r15)             # set host id
        lg      %r14,__LC_THREAD_INFO           # pointer thread_info struct
 sie_exit:
        lctlg   %c1,%c1,__LC_USER_ASCE          # load primary asce
@@ -1095,6 +1096,8 @@ sie_fault:
        .quad   sie_loop
 .Lsie_done:
        .quad   sie_done
+.Lhost_id:
+       .quad   0
 
        .section __ex_table,"a"
        .quad   sie_loop,sie_fault
index 66903ee..fc83f1f 100644 (file)
@@ -400,7 +400,6 @@ setup_lowcore(void)
                __ctl_set_bit(14, 29);
        }
 #else
-       lc->cmf_hpp = -1ULL;
        lc->vdso_per_cpu_data = (unsigned long) &lc->paste[0];
 #endif
        lc->sync_enter_timer = S390_lowcore.sync_enter_timer;