1 /* 2 * Copyright 2012 Michael Ellerman, IBM Corporation. 3 * Copyright 2012 Benjamin Herrenschmidt, IBM Corporation 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License, version 2, as 7 * published by the Free Software Foundation. 8 */ 9 10 #include <linux/kernel.h> 11 #include <linux/kvm_host.h> 12 #include <linux/err.h> 13 14 #include <asm/kvm_book3s.h> 15 #include <asm/kvm_ppc.h> 16 #include <asm/hvcall.h> 17 #include <asm/xics.h> 18 #include <asm/debug.h> 19 #include <asm/synch.h> 20 #include <asm/cputhreads.h> 21 #include <asm/ppc-opcode.h> 22 23 #include "book3s_xics.h" 24 25 #define DEBUG_PASSUP 26 27 int h_ipi_redirect = 1; 28 EXPORT_SYMBOL(h_ipi_redirect); 29 30 static void icp_rm_deliver_irq(struct kvmppc_xics *xics, struct kvmppc_icp *icp, 31 u32 new_irq); 32 33 /* -- ICS routines -- */ 34 static void ics_rm_check_resend(struct kvmppc_xics *xics, 35 struct kvmppc_ics *ics, struct kvmppc_icp *icp) 36 { 37 int i; 38 39 arch_spin_lock(&ics->lock); 40 41 for (i = 0; i < KVMPPC_XICS_IRQ_PER_ICS; i++) { 42 struct ics_irq_state *state = &ics->irq_state[i]; 43 44 if (!state->resend) 45 continue; 46 47 arch_spin_unlock(&ics->lock); 48 icp_rm_deliver_irq(xics, icp, state->number); 49 arch_spin_lock(&ics->lock); 50 } 51 52 arch_spin_unlock(&ics->lock); 53 } 54 55 /* -- ICP routines -- */ 56 57 #ifdef CONFIG_SMP 58 static inline void icp_send_hcore_msg(int hcore, struct kvm_vcpu *vcpu) 59 { 60 int hcpu; 61 62 hcpu = hcore << threads_shift; 63 kvmppc_host_rm_ops_hv->rm_core[hcore].rm_data = vcpu; 64 smp_muxed_ipi_set_message(hcpu, PPC_MSG_RM_HOST_ACTION); 65 icp_native_cause_ipi_rm(hcpu); 66 } 67 #else 68 static inline void icp_send_hcore_msg(int hcore, struct kvm_vcpu *vcpu) { } 69 #endif 70 71 /* 72 * We start the search from our current CPU Id in the core map 73 * and go in a circle until we get back to our ID looking for a 74 * core that is running in host context and that hasn't already 75 * been targeted for another rm_host_ops. 76 * 77 * In the future, could consider using a fairer algorithm (one 78 * that distributes the IPIs better) 79 * 80 * Returns -1, if no CPU could be found in the host 81 * Else, returns a CPU Id which has been reserved for use 82 */ 83 static inline int grab_next_hostcore(int start, 84 struct kvmppc_host_rm_core *rm_core, int max, int action) 85 { 86 bool success; 87 int core; 88 union kvmppc_rm_state old, new; 89 90 for (core = start + 1; core < max; core++) { 91 old = new = READ_ONCE(rm_core[core].rm_state); 92 93 if (!old.in_host || old.rm_action) 94 continue; 95 96 /* Try to grab this host core if not taken already. */ 97 new.rm_action = action; 98 99 success = cmpxchg64(&rm_core[core].rm_state.raw, 100 old.raw, new.raw) == old.raw; 101 if (success) { 102 /* 103 * Make sure that the store to the rm_action is made 104 * visible before we return to caller (and the 105 * subsequent store to rm_data) to synchronize with 106 * the IPI handler. 107 */ 108 smp_wmb(); 109 return core; 110 } 111 } 112 113 return -1; 114 } 115 116 static inline int find_available_hostcore(int action) 117 { 118 int core; 119 int my_core = smp_processor_id() >> threads_shift; 120 struct kvmppc_host_rm_core *rm_core = kvmppc_host_rm_ops_hv->rm_core; 121 122 core = grab_next_hostcore(my_core, rm_core, cpu_nr_cores(), action); 123 if (core == -1) 124 core = grab_next_hostcore(core, rm_core, my_core, action); 125 126 return core; 127 } 128 129 static void icp_rm_set_vcpu_irq(struct kvm_vcpu *vcpu, 130 struct kvm_vcpu *this_vcpu) 131 { 132 struct kvmppc_icp *this_icp = this_vcpu->arch.icp; 133 int cpu; 134 int hcore; 135 136 /* Mark the target VCPU as having an interrupt pending */ 137 vcpu->stat.queue_intr++; 138 set_bit(BOOK3S_IRQPRIO_EXTERNAL_LEVEL, &vcpu->arch.pending_exceptions); 139 140 /* Kick self ? Just set MER and return */ 141 if (vcpu == this_vcpu) { 142 mtspr(SPRN_LPCR, mfspr(SPRN_LPCR) | LPCR_MER); 143 return; 144 } 145 146 /* 147 * Check if the core is loaded, 148 * if not, find an available host core to post to wake the VCPU, 149 * if we can't find one, set up state to eventually return too hard. 150 */ 151 cpu = vcpu->arch.thread_cpu; 152 if (cpu < 0 || cpu >= nr_cpu_ids) { 153 hcore = -1; 154 if (kvmppc_host_rm_ops_hv && h_ipi_redirect) 155 hcore = find_available_hostcore(XICS_RM_KICK_VCPU); 156 if (hcore != -1) { 157 icp_send_hcore_msg(hcore, vcpu); 158 } else { 159 this_icp->rm_action |= XICS_RM_KICK_VCPU; 160 this_icp->rm_kick_target = vcpu; 161 } 162 return; 163 } 164 165 smp_mb(); 166 kvmhv_rm_send_ipi(cpu); 167 } 168 169 static void icp_rm_clr_vcpu_irq(struct kvm_vcpu *vcpu) 170 { 171 /* Note: Only called on self ! */ 172 clear_bit(BOOK3S_IRQPRIO_EXTERNAL_LEVEL, 173 &vcpu->arch.pending_exceptions); 174 mtspr(SPRN_LPCR, mfspr(SPRN_LPCR) & ~LPCR_MER); 175 } 176 177 static inline bool icp_rm_try_update(struct kvmppc_icp *icp, 178 union kvmppc_icp_state old, 179 union kvmppc_icp_state new) 180 { 181 struct kvm_vcpu *this_vcpu = local_paca->kvm_hstate.kvm_vcpu; 182 bool success; 183 184 /* Calculate new output value */ 185 new.out_ee = (new.xisr && (new.pending_pri < new.cppr)); 186 187 /* Attempt atomic update */ 188 success = cmpxchg64(&icp->state.raw, old.raw, new.raw) == old.raw; 189 if (!success) 190 goto bail; 191 192 /* 193 * Check for output state update 194 * 195 * Note that this is racy since another processor could be updating 196 * the state already. This is why we never clear the interrupt output 197 * here, we only ever set it. The clear only happens prior to doing 198 * an update and only by the processor itself. Currently we do it 199 * in Accept (H_XIRR) and Up_Cppr (H_XPPR). 200 * 201 * We also do not try to figure out whether the EE state has changed, 202 * we unconditionally set it if the new state calls for it. The reason 203 * for that is that we opportunistically remove the pending interrupt 204 * flag when raising CPPR, so we need to set it back here if an 205 * interrupt is still pending. 206 */ 207 if (new.out_ee) 208 icp_rm_set_vcpu_irq(icp->vcpu, this_vcpu); 209 210 /* Expose the state change for debug purposes */ 211 this_vcpu->arch.icp->rm_dbgstate = new; 212 this_vcpu->arch.icp->rm_dbgtgt = icp->vcpu; 213 214 bail: 215 return success; 216 } 217 218 static inline int check_too_hard(struct kvmppc_xics *xics, 219 struct kvmppc_icp *icp) 220 { 221 return (xics->real_mode_dbg || icp->rm_action) ? H_TOO_HARD : H_SUCCESS; 222 } 223 224 static void icp_rm_check_resend(struct kvmppc_xics *xics, 225 struct kvmppc_icp *icp) 226 { 227 u32 icsid; 228 229 /* Order this load with the test for need_resend in the caller */ 230 smp_rmb(); 231 for_each_set_bit(icsid, icp->resend_map, xics->max_icsid + 1) { 232 struct kvmppc_ics *ics = xics->ics[icsid]; 233 234 if (!test_and_clear_bit(icsid, icp->resend_map)) 235 continue; 236 if (!ics) 237 continue; 238 ics_rm_check_resend(xics, ics, icp); 239 } 240 } 241 242 static bool icp_rm_try_to_deliver(struct kvmppc_icp *icp, u32 irq, u8 priority, 243 u32 *reject) 244 { 245 union kvmppc_icp_state old_state, new_state; 246 bool success; 247 248 do { 249 old_state = new_state = READ_ONCE(icp->state); 250 251 *reject = 0; 252 253 /* See if we can deliver */ 254 success = new_state.cppr > priority && 255 new_state.mfrr > priority && 256 new_state.pending_pri > priority; 257 258 /* 259 * If we can, check for a rejection and perform the 260 * delivery 261 */ 262 if (success) { 263 *reject = new_state.xisr; 264 new_state.xisr = irq; 265 new_state.pending_pri = priority; 266 } else { 267 /* 268 * If we failed to deliver we set need_resend 269 * so a subsequent CPPR state change causes us 270 * to try a new delivery. 271 */ 272 new_state.need_resend = true; 273 } 274 275 } while (!icp_rm_try_update(icp, old_state, new_state)); 276 277 return success; 278 } 279 280 static void icp_rm_deliver_irq(struct kvmppc_xics *xics, struct kvmppc_icp *icp, 281 u32 new_irq) 282 { 283 struct ics_irq_state *state; 284 struct kvmppc_ics *ics; 285 u32 reject; 286 u16 src; 287 288 /* 289 * This is used both for initial delivery of an interrupt and 290 * for subsequent rejection. 291 * 292 * Rejection can be racy vs. resends. We have evaluated the 293 * rejection in an atomic ICP transaction which is now complete, 294 * so potentially the ICP can already accept the interrupt again. 295 * 296 * So we need to retry the delivery. Essentially the reject path 297 * boils down to a failed delivery. Always. 298 * 299 * Now the interrupt could also have moved to a different target, 300 * thus we may need to re-do the ICP lookup as well 301 */ 302 303 again: 304 /* Get the ICS state and lock it */ 305 ics = kvmppc_xics_find_ics(xics, new_irq, &src); 306 if (!ics) { 307 /* Unsafe increment, but this does not need to be accurate */ 308 xics->err_noics++; 309 return; 310 } 311 state = &ics->irq_state[src]; 312 313 /* Get a lock on the ICS */ 314 arch_spin_lock(&ics->lock); 315 316 /* Get our server */ 317 if (!icp || state->server != icp->server_num) { 318 icp = kvmppc_xics_find_server(xics->kvm, state->server); 319 if (!icp) { 320 /* Unsafe increment again*/ 321 xics->err_noicp++; 322 goto out; 323 } 324 } 325 326 /* Clear the resend bit of that interrupt */ 327 state->resend = 0; 328 329 /* 330 * If masked, bail out 331 * 332 * Note: PAPR doesn't mention anything about masked pending 333 * when doing a resend, only when doing a delivery. 334 * 335 * However that would have the effect of losing a masked 336 * interrupt that was rejected and isn't consistent with 337 * the whole masked_pending business which is about not 338 * losing interrupts that occur while masked. 339 * 340 * I don't differentiate normal deliveries and resends, this 341 * implementation will differ from PAPR and not lose such 342 * interrupts. 343 */ 344 if (state->priority == MASKED) { 345 state->masked_pending = 1; 346 goto out; 347 } 348 349 /* 350 * Try the delivery, this will set the need_resend flag 351 * in the ICP as part of the atomic transaction if the 352 * delivery is not possible. 353 * 354 * Note that if successful, the new delivery might have itself 355 * rejected an interrupt that was "delivered" before we took the 356 * ics spin lock. 357 * 358 * In this case we do the whole sequence all over again for the 359 * new guy. We cannot assume that the rejected interrupt is less 360 * favored than the new one, and thus doesn't need to be delivered, 361 * because by the time we exit icp_rm_try_to_deliver() the target 362 * processor may well have already consumed & completed it, and thus 363 * the rejected interrupt might actually be already acceptable. 364 */ 365 if (icp_rm_try_to_deliver(icp, new_irq, state->priority, &reject)) { 366 /* 367 * Delivery was successful, did we reject somebody else ? 368 */ 369 if (reject && reject != XICS_IPI) { 370 arch_spin_unlock(&ics->lock); 371 new_irq = reject; 372 goto again; 373 } 374 } else { 375 /* 376 * We failed to deliver the interrupt we need to set the 377 * resend map bit and mark the ICS state as needing a resend 378 */ 379 set_bit(ics->icsid, icp->resend_map); 380 state->resend = 1; 381 382 /* 383 * If the need_resend flag got cleared in the ICP some time 384 * between icp_rm_try_to_deliver() atomic update and now, then 385 * we know it might have missed the resend_map bit. So we 386 * retry 387 */ 388 smp_mb(); 389 if (!icp->state.need_resend) { 390 arch_spin_unlock(&ics->lock); 391 goto again; 392 } 393 } 394 out: 395 arch_spin_unlock(&ics->lock); 396 } 397 398 static void icp_rm_down_cppr(struct kvmppc_xics *xics, struct kvmppc_icp *icp, 399 u8 new_cppr) 400 { 401 union kvmppc_icp_state old_state, new_state; 402 bool resend; 403 404 /* 405 * This handles several related states in one operation: 406 * 407 * ICP State: Down_CPPR 408 * 409 * Load CPPR with new value and if the XISR is 0 410 * then check for resends: 411 * 412 * ICP State: Resend 413 * 414 * If MFRR is more favored than CPPR, check for IPIs 415 * and notify ICS of a potential resend. This is done 416 * asynchronously (when used in real mode, we will have 417 * to exit here). 418 * 419 * We do not handle the complete Check_IPI as documented 420 * here. In the PAPR, this state will be used for both 421 * Set_MFRR and Down_CPPR. However, we know that we aren't 422 * changing the MFRR state here so we don't need to handle 423 * the case of an MFRR causing a reject of a pending irq, 424 * this will have been handled when the MFRR was set in the 425 * first place. 426 * 427 * Thus we don't have to handle rejects, only resends. 428 * 429 * When implementing real mode for HV KVM, resend will lead to 430 * a H_TOO_HARD return and the whole transaction will be handled 431 * in virtual mode. 432 */ 433 do { 434 old_state = new_state = READ_ONCE(icp->state); 435 436 /* Down_CPPR */ 437 new_state.cppr = new_cppr; 438 439 /* 440 * Cut down Resend / Check_IPI / IPI 441 * 442 * The logic is that we cannot have a pending interrupt 443 * trumped by an IPI at this point (see above), so we 444 * know that either the pending interrupt is already an 445 * IPI (in which case we don't care to override it) or 446 * it's either more favored than us or non existent 447 */ 448 if (new_state.mfrr < new_cppr && 449 new_state.mfrr <= new_state.pending_pri) { 450 new_state.pending_pri = new_state.mfrr; 451 new_state.xisr = XICS_IPI; 452 } 453 454 /* Latch/clear resend bit */ 455 resend = new_state.need_resend; 456 new_state.need_resend = 0; 457 458 } while (!icp_rm_try_update(icp, old_state, new_state)); 459 460 /* 461 * Now handle resend checks. Those are asynchronous to the ICP 462 * state update in HW (ie bus transactions) so we can handle them 463 * separately here as well. 464 */ 465 if (resend) { 466 icp->n_check_resend++; 467 icp_rm_check_resend(xics, icp); 468 } 469 } 470 471 472 unsigned long kvmppc_rm_h_xirr(struct kvm_vcpu *vcpu) 473 { 474 union kvmppc_icp_state old_state, new_state; 475 struct kvmppc_xics *xics = vcpu->kvm->arch.xics; 476 struct kvmppc_icp *icp = vcpu->arch.icp; 477 u32 xirr; 478 479 if (!xics || !xics->real_mode) 480 return H_TOO_HARD; 481 482 /* First clear the interrupt */ 483 icp_rm_clr_vcpu_irq(icp->vcpu); 484 485 /* 486 * ICP State: Accept_Interrupt 487 * 488 * Return the pending interrupt (if any) along with the 489 * current CPPR, then clear the XISR & set CPPR to the 490 * pending priority 491 */ 492 do { 493 old_state = new_state = READ_ONCE(icp->state); 494 495 xirr = old_state.xisr | (((u32)old_state.cppr) << 24); 496 if (!old_state.xisr) 497 break; 498 new_state.cppr = new_state.pending_pri; 499 new_state.pending_pri = 0xff; 500 new_state.xisr = 0; 501 502 } while (!icp_rm_try_update(icp, old_state, new_state)); 503 504 /* Return the result in GPR4 */ 505 vcpu->arch.gpr[4] = xirr; 506 507 return check_too_hard(xics, icp); 508 } 509 510 int kvmppc_rm_h_ipi(struct kvm_vcpu *vcpu, unsigned long server, 511 unsigned long mfrr) 512 { 513 union kvmppc_icp_state old_state, new_state; 514 struct kvmppc_xics *xics = vcpu->kvm->arch.xics; 515 struct kvmppc_icp *icp, *this_icp = vcpu->arch.icp; 516 u32 reject; 517 bool resend; 518 bool local; 519 520 if (!xics || !xics->real_mode) 521 return H_TOO_HARD; 522 523 local = this_icp->server_num == server; 524 if (local) 525 icp = this_icp; 526 else 527 icp = kvmppc_xics_find_server(vcpu->kvm, server); 528 if (!icp) 529 return H_PARAMETER; 530 531 /* 532 * ICP state: Set_MFRR 533 * 534 * If the CPPR is more favored than the new MFRR, then 535 * nothing needs to be done as there can be no XISR to 536 * reject. 537 * 538 * ICP state: Check_IPI 539 * 540 * If the CPPR is less favored, then we might be replacing 541 * an interrupt, and thus need to possibly reject it. 542 * 543 * ICP State: IPI 544 * 545 * Besides rejecting any pending interrupts, we also 546 * update XISR and pending_pri to mark IPI as pending. 547 * 548 * PAPR does not describe this state, but if the MFRR is being 549 * made less favored than its earlier value, there might be 550 * a previously-rejected interrupt needing to be resent. 551 * Ideally, we would want to resend only if 552 * prio(pending_interrupt) < mfrr && 553 * prio(pending_interrupt) < cppr 554 * where pending interrupt is the one that was rejected. But 555 * we don't have that state, so we simply trigger a resend 556 * whenever the MFRR is made less favored. 557 */ 558 do { 559 old_state = new_state = READ_ONCE(icp->state); 560 561 /* Set_MFRR */ 562 new_state.mfrr = mfrr; 563 564 /* Check_IPI */ 565 reject = 0; 566 resend = false; 567 if (mfrr < new_state.cppr) { 568 /* Reject a pending interrupt if not an IPI */ 569 if (mfrr <= new_state.pending_pri) { 570 reject = new_state.xisr; 571 new_state.pending_pri = mfrr; 572 new_state.xisr = XICS_IPI; 573 } 574 } 575 576 if (mfrr > old_state.mfrr) { 577 resend = new_state.need_resend; 578 new_state.need_resend = 0; 579 } 580 } while (!icp_rm_try_update(icp, old_state, new_state)); 581 582 /* Handle reject in real mode */ 583 if (reject && reject != XICS_IPI) { 584 this_icp->n_reject++; 585 icp_rm_deliver_irq(xics, icp, reject); 586 } 587 588 /* Handle resends in real mode */ 589 if (resend) { 590 this_icp->n_check_resend++; 591 icp_rm_check_resend(xics, icp); 592 } 593 594 return check_too_hard(xics, this_icp); 595 } 596 597 int kvmppc_rm_h_cppr(struct kvm_vcpu *vcpu, unsigned long cppr) 598 { 599 union kvmppc_icp_state old_state, new_state; 600 struct kvmppc_xics *xics = vcpu->kvm->arch.xics; 601 struct kvmppc_icp *icp = vcpu->arch.icp; 602 u32 reject; 603 604 if (!xics || !xics->real_mode) 605 return H_TOO_HARD; 606 607 /* 608 * ICP State: Set_CPPR 609 * 610 * We can safely compare the new value with the current 611 * value outside of the transaction as the CPPR is only 612 * ever changed by the processor on itself 613 */ 614 if (cppr > icp->state.cppr) { 615 icp_rm_down_cppr(xics, icp, cppr); 616 goto bail; 617 } else if (cppr == icp->state.cppr) 618 return H_SUCCESS; 619 620 /* 621 * ICP State: Up_CPPR 622 * 623 * The processor is raising its priority, this can result 624 * in a rejection of a pending interrupt: 625 * 626 * ICP State: Reject_Current 627 * 628 * We can remove EE from the current processor, the update 629 * transaction will set it again if needed 630 */ 631 icp_rm_clr_vcpu_irq(icp->vcpu); 632 633 do { 634 old_state = new_state = READ_ONCE(icp->state); 635 636 reject = 0; 637 new_state.cppr = cppr; 638 639 if (cppr <= new_state.pending_pri) { 640 reject = new_state.xisr; 641 new_state.xisr = 0; 642 new_state.pending_pri = 0xff; 643 } 644 645 } while (!icp_rm_try_update(icp, old_state, new_state)); 646 647 /* 648 * Check for rejects. They are handled by doing a new delivery 649 * attempt (see comments in icp_rm_deliver_irq). 650 */ 651 if (reject && reject != XICS_IPI) { 652 icp->n_reject++; 653 icp_rm_deliver_irq(xics, icp, reject); 654 } 655 bail: 656 return check_too_hard(xics, icp); 657 } 658 659 int kvmppc_rm_h_eoi(struct kvm_vcpu *vcpu, unsigned long xirr) 660 { 661 struct kvmppc_xics *xics = vcpu->kvm->arch.xics; 662 struct kvmppc_icp *icp = vcpu->arch.icp; 663 struct kvmppc_ics *ics; 664 struct ics_irq_state *state; 665 u32 irq = xirr & 0x00ffffff; 666 u16 src; 667 668 if (!xics || !xics->real_mode) 669 return H_TOO_HARD; 670 671 /* 672 * ICP State: EOI 673 * 674 * Note: If EOI is incorrectly used by SW to lower the CPPR 675 * value (ie more favored), we do not check for rejection of 676 * a pending interrupt, this is a SW error and PAPR sepcifies 677 * that we don't have to deal with it. 678 * 679 * The sending of an EOI to the ICS is handled after the 680 * CPPR update 681 * 682 * ICP State: Down_CPPR which we handle 683 * in a separate function as it's shared with H_CPPR. 684 */ 685 icp_rm_down_cppr(xics, icp, xirr >> 24); 686 687 /* IPIs have no EOI */ 688 if (irq == XICS_IPI) 689 goto bail; 690 /* 691 * EOI handling: If the interrupt is still asserted, we need to 692 * resend it. We can take a lockless "peek" at the ICS state here. 693 * 694 * "Message" interrupts will never have "asserted" set 695 */ 696 ics = kvmppc_xics_find_ics(xics, irq, &src); 697 if (!ics) 698 goto bail; 699 state = &ics->irq_state[src]; 700 701 /* Still asserted, resend it */ 702 if (state->asserted) { 703 icp->n_reject++; 704 icp_rm_deliver_irq(xics, icp, irq); 705 } 706 707 if (!hlist_empty(&vcpu->kvm->irq_ack_notifier_list)) { 708 icp->rm_action |= XICS_RM_NOTIFY_EOI; 709 icp->rm_eoied_irq = irq; 710 } 711 bail: 712 return check_too_hard(xics, icp); 713 } 714 715 /* --- Non-real mode XICS-related built-in routines --- */ 716 717 /** 718 * Host Operations poked by RM KVM 719 */ 720 static void rm_host_ipi_action(int action, void *data) 721 { 722 switch (action) { 723 case XICS_RM_KICK_VCPU: 724 kvmppc_host_rm_ops_hv->vcpu_kick(data); 725 break; 726 default: 727 WARN(1, "Unexpected rm_action=%d data=%p\n", action, data); 728 break; 729 } 730 731 } 732 733 void kvmppc_xics_ipi_action(void) 734 { 735 int core; 736 unsigned int cpu = smp_processor_id(); 737 struct kvmppc_host_rm_core *rm_corep; 738 739 core = cpu >> threads_shift; 740 rm_corep = &kvmppc_host_rm_ops_hv->rm_core[core]; 741 742 if (rm_corep->rm_data) { 743 rm_host_ipi_action(rm_corep->rm_state.rm_action, 744 rm_corep->rm_data); 745 /* Order these stores against the real mode KVM */ 746 rm_corep->rm_data = NULL; 747 smp_wmb(); 748 rm_corep->rm_state.rm_action = 0; 749 } 750 } 751