u8 hard_enabled;                /* set if irqs are enabled in MSR */
        u8 io_sync;                     /* writel() needs spin_unlock sync */
        u8 irq_work_pending;            /* IRQ_WORK interrupt while soft-disable */
+       u8 nap_state_lost;              /* NV GPR values lost in power7_idle */
 
 #ifdef CONFIG_PPC_POWERNV
        /* Pointer to OPAL machine check event structure set by the
 
        DEFINE(PACA_USER_TIME, offsetof(struct paca_struct, user_time));
        DEFINE(PACA_SYSTEM_TIME, offsetof(struct paca_struct, system_time));
        DEFINE(PACA_TRAP_SAVE, offsetof(struct paca_struct, trap_save));
+       DEFINE(PACA_NAPSTATELOST, offsetof(struct paca_struct, nap_state_lost));
 #endif /* CONFIG_PPC64 */
 
        /* RTAS */
 
        li      r0,0
        stb     r0,PACASOFTIRQEN(r13)   /* we'll hard-enable shortly */
        stb     r0,PACAHARDIRQEN(r13)
+       stb     r0,PACA_NAPSTATELOST(r13)
 
        /* Continue saving state */
        SAVE_GPR(2, r1)
        rfid
 
 _GLOBAL(power7_wakeup_noloss)
+       lbz     r0,PACA_NAPSTATELOST(r13)
+       cmpwi   r0,0
+       bne     .power7_wakeup_loss
        ld      r1,PACAR1(r13)
        ld      r4,_MSR(r1)
        ld      r5,_NIP(r1)
 
        stbcix  r0, r5, r6              /* clear it */
        stwcix  r8, r5, r7              /* EOI it */
 
+       /* NV GPR values from power7_idle() will no longer be valid */
+       stb     r0, PACA_NAPSTATELOST(r13)
+
 .global kvmppc_hv_entry
 kvmppc_hv_entry: