<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/arch/x86/kvm, branch linux-4.7.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-4.7.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-4.7.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2016-10-07T13:21:26Z</updated>
<entry>
<title>KVM: nVMX: postpone VMCS changes on MSR_IA32_APICBASE write</title>
<updated>2016-10-07T13:21:26Z</updated>
<author>
<name>Radim Krčmář</name>
</author>
<published>2016-08-08T18:16:23Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=11669327a8f2dfb26e2acb9ca7bf496e9645bae6'/>
<id>urn:sha1:11669327a8f2dfb26e2acb9ca7bf496e9645bae6</id>
<content type='text'>
commit dccbfcf52cebb8963246eba5b177b77f26b34da0 upstream.

If vmcs12 does not intercept APIC_BASE writes, then KVM will handle the
write with vmcs02 as the current VMCS.
This will incorrectly apply modifications intended for vmcs01 to vmcs02
and L2 can use it to gain access to L0's x2APIC registers by disabling
virtualized x2APIC while using msr bitmap that assumes enabled.

Postpone execution of vmx_set_virtual_x2apic_mode until vmcs01 is the
current VMCS.  An alternative solution would temporarily make vmcs01 the
current VMCS, but it requires more care.

Fixes: 8d14695f9542 ("x86, apicv: add virtual x2apic support")
Reported-by: Jim Mattson &lt;jmattson@google.com&gt;
Reviewed-by: Wanpeng Li &lt;wanpeng.li@hotmail.com&gt;
Signed-off-by: Radim Krčmář &lt;rkrcmar@redhat.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>perf/x86/amd: Make HW_CACHE_REFERENCES and HW_CACHE_MISSES measure L2</title>
<updated>2016-09-24T08:09:35Z</updated>
<author>
<name>Matt Fleming</name>
</author>
<published>2016-08-24T13:12:08Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=6af2dc319f28396610891debfb1eb646ca0c82c6'/>
<id>urn:sha1:6af2dc319f28396610891debfb1eb646ca0c82c6</id>
<content type='text'>
commit 080fe0b790ad438fc1b61621dac37c1964ce7f35 upstream.

While the Intel PMU monitors the LLC when perf enables the
HW_CACHE_REFERENCES and HW_CACHE_MISSES events, these events monitor
L1 instruction cache fetches (0x0080) and instruction cache misses
(0x0081) on the AMD PMU.

This is extremely confusing when monitoring the same workload across
Intel and AMD machines, since parameters like,

  $ perf stat -e cache-references,cache-misses

measure completely different things.

Instead, make the AMD PMU measure instruction/data cache and TLB fill
requests to the L2 and instruction/data cache and TLB misses in the L2
when HW_CACHE_REFERENCES and HW_CACHE_MISSES are enabled,
respectively. That way the events measure unified caches on both
platforms.

Signed-off-by: Matt Fleming &lt;matt@codeblueprint.co.uk&gt;
Acked-by: Peter Zijlstra &lt;peterz@infradead.org&gt;
Cc: Borislav Petkov &lt;bp@alien8.de&gt;
Cc: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
Cc: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Link: http://lkml.kernel.org/r/1472044328-21302-1-git-send-email-matt@codeblueprint.co.uk
Signed-off-by: Ingo Molnar &lt;mingo@kernel.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>kvm: x86: correctly reset dest_map-&gt;vector when restoring LAPIC state</title>
<updated>2016-09-24T08:09:29Z</updated>
<author>
<name>Paolo Bonzini</name>
</author>
<published>2016-09-14T21:39:12Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=6c6f007505b33004ccbdb9ce9db203d5b2b36680'/>
<id>urn:sha1:6c6f007505b33004ccbdb9ce9db203d5b2b36680</id>
<content type='text'>
commit b0eaf4506f5f95d15d6731d72c0ddf4a2179eefa upstream.

When userspace sends KVM_SET_LAPIC, KVM schedules a check between
the vCPU's IRR and ISR and the IOAPIC redirection table, in order
to re-establish the IOAPIC's dest_map (the list of CPUs servicing
the real-time clock interrupt with the corresponding vectors).

However, __rtc_irq_eoi_tracking_restore_one was forgetting to
set dest_map-&gt;vectors.  Because of this, the IOAPIC did not process
the real-time clock interrupt EOI, ioapic-&gt;rtc_status.pending_eoi
got stuck at a non-zero value, and further RTC interrupts were
reported to userspace as coalesced.

Fixes: 9e4aabe2bb3454c83dac8139cf9974503ee044db
Fixes: 4d99ba898dd0c521ca6cdfdde55c9b58aea3cb3d
Cc: Joerg Roedel &lt;jroedel@suse.de&gt;
Cc: David Gilbert &lt;dgilbert@redhat.com&gt;
Reviewed-by: Radim Krčmář &lt;rkrcmar@redhat.com&gt;
Signed-off-by: Paolo Bonzini &lt;pbonzini@redhat.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>KVM: x86: avoid simultaneous queueing of both IRQ and SMI</title>
<updated>2016-08-20T16:10:51Z</updated>
<author>
<name>Paolo Bonzini</name>
</author>
<published>2016-06-01T20:26:00Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=eea340c298a2de1c11e36c25e7ce3938624e6375'/>
<id>urn:sha1:eea340c298a2de1c11e36c25e7ce3938624e6375</id>
<content type='text'>
commit c43203cab1e2e193c43f8295f01dfb2a0721d9e5 upstream.

If the processor exits to KVM while delivering an interrupt,
the hypervisor then requeues the interrupt for the next vmentry.
Trying to enter SMM in this same window causes to enter non-root
mode in emulated SMM (i.e. with IF=0) and with a request to
inject an IRQ (i.e. with a valid VM-entry interrupt info field).
This is invalid guest state (SDM 26.3.1.4 "Check on Guest RIP
and RFLAGS") and the processor fails vmentry.

The fix is to defer the injection from KVM_REQ_SMI to KVM_REQ_EVENT,
like we already do for e.g. NMIs.  This patch doesn't change the
name of the process_smi function so that it can be applied to
stable releases.  The next patch will modify the names so that
process_nmi and process_smi handle respectively KVM_REQ_NMI and
KVM_REQ_SMI.

This is especially common with Windows, probably due to the
self-IPI trick that it uses to deliver deferred procedure
calls (DPCs).

Reported-by: Laszlo Ersek &lt;lersek@redhat.com&gt;
Reported-by: Michał Zegan &lt;webczat_200@poczta.onet.pl&gt;
Fixes: 64d6067057d9658acb8675afcfba549abdb7fc16
Signed-off-by: Paolo Bonzini &lt;pbonzini@redhat.com&gt;
Signed-off-by: Radim Krčmář &lt;rkrcmar@redhat.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>KVM: nVMX: Fix memory corruption when using VMCS shadowing</title>
<updated>2016-08-20T16:10:50Z</updated>
<author>
<name>Jim Mattson</name>
</author>
<published>2016-07-08T22:36:06Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=bb303ea20e8f1a5f51f99714956630bc1807313d'/>
<id>urn:sha1:bb303ea20e8f1a5f51f99714956630bc1807313d</id>
<content type='text'>
commit 2f1fe81123f59271bddda673b60116bde9660385 upstream.

When freeing the nested resources of a vcpu, there is an assumption that
the vcpu's vmcs01 is the current VMCS on the CPU that executes
nested_release_vmcs12(). If this assumption is violated, the vcpu's
vmcs01 may be made active on multiple CPUs at the same time, in
violation of Intel's specification. Moreover, since the vcpu's vmcs01 is
not VMCLEARed on every CPU on which it is active, it can linger in a
CPU's VMCS cache after it has been freed and potentially
repurposed. Subsequent eviction from the CPU's VMCS cache on a capacity
miss can result in memory corruption.

It is not sufficient for vmx_free_vcpu() to call vmx_load_vmcs01(). If
the vcpu in question was last loaded on a different CPU, it must be
migrated to the current CPU before calling vmx_load_vmcs01().

Signed-off-by: Jim Mattson &lt;jmattson@google.com&gt;
Signed-off-by: Paolo Bonzini &lt;pbonzini@redhat.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>KVM: VMX: handle PML full VMEXIT that occurs during event delivery</title>
<updated>2016-08-20T16:10:50Z</updated>
<author>
<name>Cao, Lei</name>
</author>
<published>2016-07-15T13:54:04Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=744825cca6c48d5966d8b878e6e567c29c66f26e'/>
<id>urn:sha1:744825cca6c48d5966d8b878e6e567c29c66f26e</id>
<content type='text'>
commit b244c9fc251e14a083a1cbf04bef10bd99303a76 upstream.

With PML enabled, guest will shut down if a PML full VMEXIT occurs during
event delivery. According to Intel SDM 27.2.3, PML full VMEXIT can occur when
event is being delivered through IDT, so KVM should not exit to user space
with error. Instead, it should let EXIT_REASON_PML_FULL go through and the
event will be re-injected on the next VMENTRY.

Signed-off-by: Lei Cao &lt;lei.cao@stratus.com&gt;
Fixes: 843e4330573c ("KVM: VMX: Add PML support in VMX")
[Shortened the summary and Cc'd stable.]
Signed-off-by: Radim Krčmář &lt;rkrcmar@redhat.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>KVM: MTRR: fix kvm_mtrr_check_gfn_range_consistency page fault</title>
<updated>2016-08-20T16:10:50Z</updated>
<author>
<name>Alexis Dambricourt</name>
</author>
<published>2016-07-04T19:05:15Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=2c268a83474081a94531b1086aa0775b08b9667b'/>
<id>urn:sha1:2c268a83474081a94531b1086aa0775b08b9667b</id>
<content type='text'>
commit 30b072ce0356e8b141f4ca6da7220486fa3641d9 upstream.

The following #PF may occurs:
[ 1403.317041] BUG: unable to handle kernel paging request at 0000000200000068
[ 1403.317045] IP: [&lt;ffffffffc04c20b0&gt;] __mtrr_lookup_var_next+0x10/0xa0 [kvm]

[ 1403.317123] Call Trace:
[ 1403.317134]  [&lt;ffffffffc04c2a65&gt;] ? kvm_mtrr_check_gfn_range_consistency+0xc5/0x120 [kvm]
[ 1403.317143]  [&lt;ffffffffc04ac11f&gt;] ? tdp_page_fault+0x9f/0x2c0 [kvm]
[ 1403.317152]  [&lt;ffffffffc0498128&gt;] ? kvm_set_msr_common+0x858/0xc00 [kvm]
[ 1403.317161]  [&lt;ffffffffc04b8883&gt;] ? x86_emulate_insn+0x273/0xd30 [kvm]
[ 1403.317171]  [&lt;ffffffffc04c04e4&gt;] ? kvm_cpuid+0x34/0x190 [kvm]
[ 1403.317180]  [&lt;ffffffffc04a5bb9&gt;] ? kvm_mmu_page_fault+0x59/0xe0 [kvm]
[ 1403.317183]  [&lt;ffffffffc0d729e1&gt;] ? vmx_handle_exit+0x1d1/0x14a0 [kvm_intel]
[ 1403.317185]  [&lt;ffffffffc0d75f3f&gt;] ? atomic_switch_perf_msrs+0x6f/0xa0 [kvm_intel]
[ 1403.317187]  [&lt;ffffffffc0d7621d&gt;] ? vmx_vcpu_run+0x2ad/0x420 [kvm_intel]
[ 1403.317196]  [&lt;ffffffffc04a0962&gt;] ? kvm_arch_vcpu_ioctl_run+0x622/0x1550 [kvm]
[ 1403.317204]  [&lt;ffffffffc049abb9&gt;] ? kvm_arch_vcpu_load+0x59/0x210 [kvm]
[ 1403.317206]  [&lt;ffffffff81036245&gt;] ? __kernel_fpu_end+0x35/0x100
[ 1403.317213]  [&lt;ffffffffc0487eb6&gt;] ? kvm_vcpu_ioctl+0x316/0x5d0 [kvm]
[ 1403.317215]  [&lt;ffffffff81088225&gt;] ? do_sigtimedwait+0xd5/0x220
[ 1403.317217]  [&lt;ffffffff811f84dd&gt;] ? do_vfs_ioctl+0x9d/0x5c0
[ 1403.317224]  [&lt;ffffffffc04928ae&gt;] ? kvm_on_user_return+0x3e/0x70 [kvm]
[ 1403.317225]  [&lt;ffffffff811f8a74&gt;] ? SyS_ioctl+0x74/0x80
[ 1403.317227]  [&lt;ffffffff815bf0b6&gt;] ? entry_SYSCALL_64_fastpath+0x1e/0xa8
[ 1403.317242] RIP  [&lt;ffffffffc04c20b0&gt;] __mtrr_lookup_var_next+0x10/0xa0 [kvm]

At mtrr_lookup_fixed_next(), when the condition
'if (iter-&gt;index &gt;= ARRAY_SIZE(iter-&gt;mtrr_state-&gt;fixed_ranges))' becomes true,
mtrr_lookup_var_start() is called with iter-&gt;range with gargabe values from the
fixed MTRR union field. Then, list_prepare_entry() do not call list_entry()
initialization, keeping a garbage pointer in iter-&gt;range which is accessed in
the following __mtrr_lookup_var_next() call.

Fixes: f571c0973e4b8c888e049b6842e4b4f93b5c609c
Signed-off-by: Alexis Dambricourt &lt;alexis@blade-group.com&gt;
Signed-off-by: Paolo Bonzini &lt;pbonzini@redhat.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>KVM: nVMX: VMX instructions: fix segment checks when L1 is in long mode.</title>
<updated>2016-06-27T13:30:44Z</updated>
<author>
<name>Quentin Casasnovas</name>
</author>
<published>2016-06-18T09:01:05Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=ff30ef40deca4658e27b0c596e7baf39115e858f'/>
<id>urn:sha1:ff30ef40deca4658e27b0c596e7baf39115e858f</id>
<content type='text'>
I couldn't get Xen to boot a L2 HVM when it was nested under KVM - it was
getting a GP(0) on a rather unspecial vmread from Xen:

     (XEN) ----[ Xen-4.7.0-rc  x86_64  debug=n  Not tainted ]----
     (XEN) CPU:    1
     (XEN) RIP:    e008:[&lt;ffff82d0801e629e&gt;] vmx_get_segment_register+0x14e/0x450
     (XEN) RFLAGS: 0000000000010202   CONTEXT: hypervisor (d1v0)
     (XEN) rax: ffff82d0801e6288   rbx: ffff83003ffbfb7c   rcx: fffffffffffab928
     (XEN) rdx: 0000000000000000   rsi: 0000000000000000   rdi: ffff83000bdd0000
     (XEN) rbp: ffff83000bdd0000   rsp: ffff83003ffbfab0   r8:  ffff830038813910
     (XEN) r9:  ffff83003faf3958   r10: 0000000a3b9f7640   r11: ffff83003f82d418
     (XEN) r12: 0000000000000000   r13: ffff83003ffbffff   r14: 0000000000004802
     (XEN) r15: 0000000000000008   cr0: 0000000080050033   cr4: 00000000001526e0
     (XEN) cr3: 000000003fc79000   cr2: 0000000000000000
     (XEN) ds: 0000   es: 0000   fs: 0000   gs: 0000   ss: 0000   cs: e008
     (XEN) Xen code around &lt;ffff82d0801e629e&gt; (vmx_get_segment_register+0x14e/0x450):
     (XEN)  00 00 41 be 02 48 00 00 &lt;44&gt; 0f 78 74 24 08 0f 86 38 56 00 00 b8 08 68 00
     (XEN) Xen stack trace from rsp=ffff83003ffbfab0:

     ...

     (XEN) Xen call trace:
     (XEN)    [&lt;ffff82d0801e629e&gt;] vmx_get_segment_register+0x14e/0x450
     (XEN)    [&lt;ffff82d0801f3695&gt;] get_page_from_gfn_p2m+0x165/0x300
     (XEN)    [&lt;ffff82d0801bfe32&gt;] hvmemul_get_seg_reg+0x52/0x60
     (XEN)    [&lt;ffff82d0801bfe93&gt;] hvm_emulate_prepare+0x53/0x70
     (XEN)    [&lt;ffff82d0801ccacb&gt;] handle_mmio+0x2b/0xd0
     (XEN)    [&lt;ffff82d0801be591&gt;] emulate.c#_hvm_emulate_one+0x111/0x2c0
     (XEN)    [&lt;ffff82d0801cd6a4&gt;] handle_hvm_io_completion+0x274/0x2a0
     (XEN)    [&lt;ffff82d0801f334a&gt;] __get_gfn_type_access+0xfa/0x270
     (XEN)    [&lt;ffff82d08012f3bb&gt;] timer.c#add_entry+0x4b/0xb0
     (XEN)    [&lt;ffff82d08012f80c&gt;] timer.c#remove_entry+0x7c/0x90
     (XEN)    [&lt;ffff82d0801c8433&gt;] hvm_do_resume+0x23/0x140
     (XEN)    [&lt;ffff82d0801e4fe7&gt;] vmx_do_resume+0xa7/0x140
     (XEN)    [&lt;ffff82d080164aeb&gt;] context_switch+0x13b/0xe40
     (XEN)    [&lt;ffff82d080128e6e&gt;] schedule.c#schedule+0x22e/0x570
     (XEN)    [&lt;ffff82d08012c0cc&gt;] softirq.c#__do_softirq+0x5c/0x90
     (XEN)    [&lt;ffff82d0801602c5&gt;] domain.c#idle_loop+0x25/0x50
     (XEN)
     (XEN)
     (XEN) ****************************************
     (XEN) Panic on CPU 1:
     (XEN) GENERAL PROTECTION FAULT
     (XEN) [error_code=0000]
     (XEN) ****************************************

Tracing my host KVM showed it was the one injecting the GP(0) when
emulating the VMREAD and checking the destination segment permissions in
get_vmx_mem_address():

     3)               |    vmx_handle_exit() {
     3)               |      handle_vmread() {
     3)               |        nested_vmx_check_permission() {
     3)               |          vmx_get_segment() {
     3)   0.074 us    |            vmx_read_guest_seg_base();
     3)   0.065 us    |            vmx_read_guest_seg_selector();
     3)   0.066 us    |            vmx_read_guest_seg_ar();
     3)   1.636 us    |          }
     3)   0.058 us    |          vmx_get_rflags();
     3)   0.062 us    |          vmx_read_guest_seg_ar();
     3)   3.469 us    |        }
     3)               |        vmx_get_cs_db_l_bits() {
     3)   0.058 us    |          vmx_read_guest_seg_ar();
     3)   0.662 us    |        }
     3)               |        get_vmx_mem_address() {
     3)   0.068 us    |          vmx_cache_reg();
     3)               |          vmx_get_segment() {
     3)   0.074 us    |            vmx_read_guest_seg_base();
     3)   0.068 us    |            vmx_read_guest_seg_selector();
     3)   0.071 us    |            vmx_read_guest_seg_ar();
     3)   1.756 us    |          }
     3)               |          kvm_queue_exception_e() {
     3)   0.066 us    |            kvm_multiple_exception();
     3)   0.684 us    |          }
     3)   4.085 us    |        }
     3)   9.833 us    |      }
     3) + 10.366 us   |    }

Cross-checking the KVM/VMX VMREAD emulation code with the Intel Software
Developper Manual Volume 3C - "VMREAD - Read Field from Virtual-Machine
Control Structure", I found that we're enforcing that the destination
operand is NOT located in a read-only data segment or any code segment when
the L1 is in long mode - BUT that check should only happen when it is in
protected mode.

Shuffling the code a bit to make our emulation follow the specification
allows me to boot a Xen dom0 in a nested KVM and start HVM L2 guests
without problems.

Fixes: f9eb4af67c9d ("KVM: nVMX: VMX instructions: add checks for #GP/#SS exceptions")
Signed-off-by: Quentin Casasnovas &lt;quentin.casasnovas@oracle.com&gt;
Cc: Eugene Korenevsky &lt;ekorenevsky@gmail.com&gt;
Cc: Paolo Bonzini &lt;pbonzini@redhat.com&gt;
Cc: Radim Krčmář &lt;rkrcmar@redhat.com&gt;
Cc: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Cc: Ingo Molnar &lt;mingo@redhat.com&gt;
Cc: H. Peter Anvin &lt;hpa@zytor.com&gt;
Cc: linux-stable &lt;stable@vger.kernel.org&gt;
Signed-off-by: Paolo Bonzini &lt;pbonzini@redhat.com&gt;
</content>
</entry>
<entry>
<title>KVM: LAPIC: cap __delay at lapic_timer_advance_ns</title>
<updated>2016-06-27T13:30:41Z</updated>
<author>
<name>Marcelo Tosatti</name>
</author>
<published>2016-06-21T01:33:48Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=b606f189c7d5bf9b875bba168162fe05287880fe'/>
<id>urn:sha1:b606f189c7d5bf9b875bba168162fe05287880fe</id>
<content type='text'>
The host timer which emulates the guest LAPIC TSC deadline
timer has its expiration diminished by lapic_timer_advance_ns
nanoseconds. Therefore if, at wait_lapic_expire, a difference
larger than lapic_timer_advance_ns is encountered, delay at most
lapic_timer_advance_ns.

This fixes a problem where the guest can cause the host
to delay for large amounts of time.

Reported-by: Alan Jenkins &lt;alan.christopher.jenkins@gmail.com&gt;
Signed-off-by: Marcelo Tosatti &lt;mtosatti@redhat.com&gt;
Signed-off-by: Paolo Bonzini &lt;pbonzini@redhat.com&gt;
</content>
</entry>
<entry>
<title>KVM: x86: move nsec_to_cycles from x86.c to x86.h</title>
<updated>2016-06-27T13:30:38Z</updated>
<author>
<name>Marcelo Tosatti</name>
</author>
<published>2016-06-21T01:28:02Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=8d93c874ac899bfdf0ad3787baef684a0c878c2c'/>
<id>urn:sha1:8d93c874ac899bfdf0ad3787baef684a0c878c2c</id>
<content type='text'>
Move the inline function nsec_to_cycles from x86.c to x86.h, as
the next patch uses it from lapic.c.

Signed-off-by: Marcelo Tosatti &lt;mtosatti@redhat.com&gt;
Signed-off-by: Paolo Bonzini &lt;pbonzini@redhat.com&gt;
</content>
</entry>
</feed>
