Deleted Added
full compact
vlapic.c (249174) vlapic.c (250427)
1/*-
2 * Copyright (c) 2011 NetApp, Inc.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
1/*-
2 * Copyright (c) 2011 NetApp, Inc.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $FreeBSD: head/sys/amd64/vmm/io/vlapic.c 249174 2013-04-05 22:16:31Z grehan $
26 * $FreeBSD: head/sys/amd64/vmm/io/vlapic.c 250427 2013-05-10 02:59:49Z neel $
27 */
28
29#include <sys/cdefs.h>
27 */
28
29#include <sys/cdefs.h>
30__FBSDID("$FreeBSD: head/sys/amd64/vmm/io/vlapic.c 249174 2013-04-05 22:16:31Z grehan $");
30__FBSDID("$FreeBSD: head/sys/amd64/vmm/io/vlapic.c 250427 2013-05-10 02:59:49Z neel $");
31
32#include <sys/param.h>
33#include <sys/kernel.h>
34#include <sys/malloc.h>
35#include <sys/systm.h>
36#include <sys/smp.h>
37
38#include <machine/clock.h>

--- 386 unchanged lines hidden (view full) ---

425
426 if (!vlapic_get_lvt_field(lvt, APIC_LVTT_M)) {
427 vmm_stat_incr(vlapic->vm, vlapic->vcpuid, VLAPIC_INTR_TIMER, 1);
428 vector = vlapic_get_lvt_field(lvt,APIC_LVTT_VECTOR);
429 vlapic_set_intr_ready(vlapic, vector);
430 }
431}
432
31
32#include <sys/param.h>
33#include <sys/kernel.h>
34#include <sys/malloc.h>
35#include <sys/systm.h>
36#include <sys/smp.h>
37
38#include <machine/clock.h>

--- 386 unchanged lines hidden (view full) ---

425
426 if (!vlapic_get_lvt_field(lvt, APIC_LVTT_M)) {
427 vmm_stat_incr(vlapic->vm, vlapic->vcpuid, VLAPIC_INTR_TIMER, 1);
428 vector = vlapic_get_lvt_field(lvt,APIC_LVTT_VECTOR);
429 vlapic_set_intr_ready(vlapic, vector);
430 }
431}
432
433static VMM_STAT_ARRAY(IPIS_SENT, VM_MAXCPU, "ipis sent to vcpu");
434
433static int
434lapic_process_icr(struct vlapic *vlapic, uint64_t icrval)
435{
436 int i;
437 cpuset_t dmask;
438 uint32_t dest, vec, mode;
439 struct vlapic *vlapic2;
440 struct vm_exit *vmexit;

--- 20 unchanged lines hidden (view full) ---

461 dmask = vm_active_cpus(vlapic->vm);
462 CPU_CLR(vlapic->vcpuid, &dmask);
463 break;
464 }
465
466 while ((i = cpusetobj_ffs(&dmask)) != 0) {
467 i--;
468 CPU_CLR(i, &dmask);
435static int
436lapic_process_icr(struct vlapic *vlapic, uint64_t icrval)
437{
438 int i;
439 cpuset_t dmask;
440 uint32_t dest, vec, mode;
441 struct vlapic *vlapic2;
442 struct vm_exit *vmexit;

--- 20 unchanged lines hidden (view full) ---

463 dmask = vm_active_cpus(vlapic->vm);
464 CPU_CLR(vlapic->vcpuid, &dmask);
465 break;
466 }
467
468 while ((i = cpusetobj_ffs(&dmask)) != 0) {
469 i--;
470 CPU_CLR(i, &dmask);
469 if (mode == APIC_DELMODE_FIXED)
471 if (mode == APIC_DELMODE_FIXED) {
470 lapic_set_intr(vlapic->vm, i, vec);
472 lapic_set_intr(vlapic->vm, i, vec);
471 else
473 vmm_stat_array_incr(vlapic->vm, vlapic->vcpuid,
474 IPIS_SENT, i, 1);
475 } else
472 vm_inject_nmi(vlapic->vm, i);
473 }
474
475 return (0); /* handled completely in the kernel */
476 }
477
478 if (mode == APIC_DELMODE_INIT) {
479 if ((icrval & APIC_LEVEL_MASK) == APIC_LEVEL_DEASSERT)

--- 428 unchanged lines hidden ---
476 vm_inject_nmi(vlapic->vm, i);
477 }
478
479 return (0); /* handled completely in the kernel */
480 }
481
482 if (mode == APIC_DELMODE_INIT) {
483 if ((icrval & APIC_LEVEL_MASK) == APIC_LEVEL_DEASSERT)

--- 428 unchanged lines hidden ---