cpu.c (1136fa0c07de570dc17858745af8be169d1440ba) | cpu.c (73924ec4d560257004d5b5116b22a3647661e364) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Suspend support specific for i386/x86-64. 4 * 5 * Copyright (c) 2007 Rafael J. Wysocki <rjw@sisk.pl> 6 * Copyright (c) 2002 Pavel Machek <pavel@ucw.cz> 7 * Copyright (c) 2001 Patrick Mochel <mochel@osdl.org> 8 */ --- 26 unchanged lines hidden (view full) --- 35struct saved_context saved_context; 36 37static void msr_save_context(struct saved_context *ctxt) 38{ 39 struct saved_msr *msr = ctxt->saved_msrs.array; 40 struct saved_msr *end = msr + ctxt->saved_msrs.num; 41 42 while (msr < end) { | 1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Suspend support specific for i386/x86-64. 4 * 5 * Copyright (c) 2007 Rafael J. Wysocki <rjw@sisk.pl> 6 * Copyright (c) 2002 Pavel Machek <pavel@ucw.cz> 7 * Copyright (c) 2001 Patrick Mochel <mochel@osdl.org> 8 */ --- 26 unchanged lines hidden (view full) --- 35struct saved_context saved_context; 36 37static void msr_save_context(struct saved_context *ctxt) 38{ 39 struct saved_msr *msr = ctxt->saved_msrs.array; 40 struct saved_msr *end = msr + ctxt->saved_msrs.num; 41 42 while (msr < end) { |
43 msr->valid = !rdmsrl_safe(msr->info.msr_no, &msr->info.reg.q); | 43 if (msr->valid) 44 rdmsrl(msr->info.msr_no, msr->info.reg.q); |
44 msr++; 45 } 46} 47 48static void msr_restore_context(struct saved_context *ctxt) 49{ 50 struct saved_msr *msr = ctxt->saved_msrs.array; 51 struct saved_msr *end = msr + ctxt->saved_msrs.num; --- 367 unchanged lines hidden (view full) --- 419 */ 420 memcpy(msr_array, saved_msrs->array, 421 sizeof(struct saved_msr) * saved_msrs->num); 422 423 kfree(saved_msrs->array); 424 } 425 426 for (i = saved_msrs->num, j = 0; i < total_num; i++, j++) { | 45 msr++; 46 } 47} 48 49static void msr_restore_context(struct saved_context *ctxt) 50{ 51 struct saved_msr *msr = ctxt->saved_msrs.array; 52 struct saved_msr *end = msr + ctxt->saved_msrs.num; --- 367 unchanged lines hidden (view full) --- 420 */ 421 memcpy(msr_array, saved_msrs->array, 422 sizeof(struct saved_msr) * saved_msrs->num); 423 424 kfree(saved_msrs->array); 425 } 426 427 for (i = saved_msrs->num, j = 0; i < total_num; i++, j++) { |
428 u64 dummy; 429 |
|
427 msr_array[i].info.msr_no = msr_id[j]; | 430 msr_array[i].info.msr_no = msr_id[j]; |
428 msr_array[i].valid = false; | 431 msr_array[i].valid = !rdmsrl_safe(msr_id[j], &dummy); |
429 msr_array[i].info.reg.q = 0; 430 } 431 saved_msrs->num = total_num; 432 saved_msrs->array = msr_array; 433 434 return 0; 435} 436 --- 75 unchanged lines hidden --- | 432 msr_array[i].info.reg.q = 0; 433 } 434 saved_msrs->num = total_num; 435 saved_msrs->array = msr_array; 436 437 return 0; 438} 439 --- 75 unchanged lines hidden --- |