6867 Commits

Author SHA1 Message Date
bryanv
f9a98c5bdd MFC r273515, r274055, r274063, r274215, r274065, r274502:
Add VirtIO console driver.
2014-11-29 22:48:40 +00:00
kib
93517beb67 MFC r274555:
Fix END()s for fueword and fueword64, match the name in END() with
entry.
2014-11-22 09:38:18 +00:00
scottl
7dd73de9ac MFC r274489:
Add frame pointers to ASM functions in support.S

Obtained from:	Netflix
2014-11-22 00:01:14 +00:00
kib
e4b2ee7e2b Merge the fueword(9) and casueword(9). In particular,
MFC r273783:
Add fueword(9) and casueword(9) functions.
MFC note: ia64 is handled like arm, with NO_FUEWORD define.

MFC r273784:
Replace some calls to fuword() by fueword() with proper error checking.

MFC r273785:
Convert kern_umtx.c to use fueword() and casueword().
MFC note: the sys__umtx_lock and sys__umtx_unlock syscalls are not
converted, they are removed from HEAD, and not used.  The do_sem2*()
family is not yet merged to stable/10, corresponding chunk will be
merged after do_sem2* are committed.

MFC r273788 (by jkim):
Actually install casuword(9) to fix build.

MFC r273911:
Add type qualifier volatile to the base (userspace) address argument
of fuword(9) and suword(9).
2014-11-18 12:53:32 +00:00
neel
9221e1200a MFC r273666.
Don't pass the 'error' return from an I/O port handler directly to vm_run().
2014-10-29 01:54:37 +00:00
hselasky
1f41d295fb MFC r263710, r273377, r273378, r273423 and r273455:
- De-vnet hash sizes and hash masks.
- Fix multiple issues related to arguments passed to SYSCTL macros.

Sponsored by:	Mellanox Technologies
2014-10-27 14:38:00 +00:00
neel
295105e2bd MFC r273356:
Fix a race in pmap_emulate_accessed_dirty() that could trigger a EPT
misconfiguration VM-exit.
2014-10-24 03:48:54 +00:00
kib
92c5a45b89 MFC r272761:
Add an argument to the x86 pmap_invalidate_cache_range() to request
forced invalidation of the cache range regardless of the presence of
self-snoop feature.

MFC r272943:
MFi386 r272761.
2014-10-15 14:07:24 +00:00
jhb
5595ee4003 MFC 270828,271487,271495:
Add sysctls to export the BIOS SMAP and EFI memory maps along with
handlers in the sysctl(8) binary to format them.
2014-10-10 20:47:23 +00:00
kib
24883994ff MFC r271747:
- Use NULL instead of 0 for fpcurthread.
 - Note the quirk with the interrupt enabled state of the dna handler.
 - Use just panic() instead of printf() and panic().  Print tid instead
   of pid, the fpu state is per-thread.

MFC r271924:
Update and clarify comments.  Remove the useless counter for impossible, but
seen in wild situation (on buggy hypervisors).
2014-10-04 19:33:58 +00:00
grehan
d19a0d5cec MFC r272193
Allow the PIC's IMR register to be read before ICW initialisation.

  As of git submit e179f6914152eca9, the Linux kernel does a simple
  probe of the PIC by writing a pattern to the IMR and then reading it
  back, prior to the init sequence of ICW words.

  The bhyve PIC emulation wasn't allowing the IMR to be read until
  the ICW sequence was complete. This limitation isn't required so
  relax the test.

  With this change, Linux kernels 3.15-rc2 and later won't hang
  on boot when calibrating the local APIC.

Approved by: re (gjb)
2014-10-01 23:15:23 +00:00
bz
d2b170eedd MFC 271745,271834,271899,271900,271913,272022,272023:
Revert changes to shared code of the ixl and ixlv drivers to allow
  for easier long-term maintainability.

  Restrict the drivers to building on amd64 for now as it is
  only tested on that 64bit architecture.

  Just depend on PCI and neither INET nor INET6; also make sure we
  can build individual drivers and they do not depend on each other
  anymore.

  Reviewed by:	gnn, eric.joyner intel.com
PR:		193824
Approved by:	re (gjb)
2014-09-30 16:55:19 +00:00
bz
26cc830ced This is a direct commit rather than an MFC of r271744.
Re-gen after r272020 (r271743 in head) implementing most of
  timer_{create,settime,gettime,getoverrun,delete}.

Approved by:	re (gjb)
Sponsored by:	DARPA/AFRL
2014-09-23 07:53:32 +00:00
bz
cbd13542a7 MFC r271743:
Implement most of timer_{create,settime,gettime,getoverrun,delete}
  for amd64/linux32.  Fix the entirely bogus (untested) version from
  r161310 for i386/linux using the same shared code in compat/linux.

  It is unclear to me if we could support more clock mappings but
  the current set allows me to successfully run commercial
  32bit linux software under linuxolator on amd64.

  Reviewed by:			jhb
  Differential Revision:	D784
Sponsored by:			DARPA, AFRL
Approved by:			re (gjb)
2014-09-23 07:50:04 +00:00
jhb
09bff45095 MFC 270850,271053,271192,271717:
Save and restore FPU state across suspend and resume on i386.
- Create a separate structure for per-CPU state saved across suspend and
  resume that is a superset of a pcb.
- Store the FPU state for suspend and resume in the new structure
  (for amd64, this moves it out of the PCB)
- On both i386 and amd64, all of the FPU suspend/resume handling is now
  done in C.

Approved by:	re (hrs)
2014-09-22 20:34:36 +00:00
kib
42e5d75eb4 MFC r271716:
Presence of any VM_PROT bits in the permission argument on x86 implies
that the entry is readable and valid.

Approved by:	re (gjb)
2014-09-20 14:24:48 +00:00
grehan
4f02bb3b6b MFC r270689:
Implement the 0x2B SUB instruction, and the OR variant of 0x81.

    Found with local APIC accesses from bitrig/amd64 bsd.rd, 07/15-snap.

Approved by:	re (rodrigc)
2014-09-16 01:59:19 +00:00
pfg
661c0752aa MFC r271149:
Apply known workarounds for less modern MacBooks.

The legacy USB circuit tends to give trouble on older MacBooks.
While the original report covered MacBook4, extend the fix
preemptively for the newer MacBookPro4 too.

PR:		191693
Reviewed by:	emaste
Approved by:	re
2014-09-13 18:27:47 +00:00
emaste
352b5da28f MFC r265014: Report boot method (BIOS/UEFI) via sysctl machdep.bootmethod
Approved by:	re
Sponsored by:	The FreeBSD Foundation
2014-09-08 21:10:51 +00:00
markj
7b2b287dbf MFC r271137:
Add mrsas(4) to GENERIC for i386 and amd64.

Approved by:	re (gjb)
2014-09-07 18:43:26 +00:00
pfg
4480b8a63d MFC r270844:
Minor space/tab cleanups.

Most of them were ripped from the GSoC 2104
SMAP + kpatch project (but unrelated).
Only cosmetic changes.

Taken from:	Oliver Pinter (op@)
2014-09-04 00:40:41 +00:00
emaste
63a3fa9dd0 MFC automatic vt(4) selection for UEFI boot
r268158: Prefer vt(4) for UEFI boot

  The UEFI framebuffer driver vt_efifb requires vt(4), so add a
  mechanism for the startup routine to set the preferred console.
  This change is ugly because console init happens very early in the
  boot, making a cleaner interface difficult.  This change is intended
  only to facilitate the sc(4) / vt(4) transition, and can be reverted
  once vt(4) is the default.

r268160: Fix typos in VTY constant names from r268158

r268982: Don't pass null kmdp to preload_search_info

  On Xen PVH guests kmdp == NULL.

Sponsored by:	The FreeBSD Foundation
2014-09-02 22:01:14 +00:00
emaste
55d5c1c3ed Revert r268372 - enable vt_efifb vt(4) driver again.
It was disabled as some parts of UEFI support had not yet been merged to
stable/10.

Sponsored by:	The FreeBSD Foundation
2014-09-02 19:14:33 +00:00
emaste
3a7cd99956 MFC r263826: Update EFI framebuffer handoff from loader
Sponsored by:	The FreeBSD Foundation
2014-09-02 18:54:40 +00:00
kib
798eea1614 Fix a leak of the wired pages when unwiring of the PROT_NONE-mapped
wired region.  Rework the handling of unwire to do the it in batch,
both at pmap and object level.

All commits below are by alc.

MFC r268327:
Introduce pmap_unwire().

MFC r268591:
Implement pmap_unwire() for powerpc.

MFC r268776:
Implement pmap_unwire() for arm.

MFC r268806:
pmap_unwire(9) man page.

MFC r269134:
When unwiring a region of an address space, do not assume that the
underlying physical pages are mapped by the pmap.  This fixes a leak
of the wired pages on the unwiring of the region mapped with no access
allowed.

MFC r269339:
In the implementation of the new function pmap_unwire(), the call to
MOEA64_PVO_TO_PTE() must be performed before any changes are made to the
PVO. Otherwise, MOEA64_PVO_TO_PTE() will panic.

MFC r269365:
Correct a long-standing problem in moea{,64}_pvo_enter() that was revealed
by the combination of r268591 and r269134: When we attempt to add the
wired attribute to an existing mapping, moea{,64}_pvo_enter() do nothing.
(They only set the wired attribute on newly created mappings.)

MFC r269433:
Handle wiring failures in vm_map_wire() with the new functions
pmap_unwire() and vm_object_unwire().
Retire vm_fault_{un,}wire(), since they are no longer used.

MFC r269438:
Rewrite a loop in vm_map_wire() so that gcc doesn't think that the variable
"rv" is uninitialized.

MFC r269485:
Retire pmap_change_wiring().

Reviewed by:	alc
2014-09-01 07:58:15 +00:00
grehan
aca4a8dbd6 MFC 270438
Change __inline style to be consistent with FreeBSD usage,
  and also fix gcc build.

PR:	192880
2014-08-27 06:13:44 +00:00
kib
e0ba747bef MFC r270202:
Increase max number of physical segments on amd64 to 63.
2014-08-27 01:34:33 +00:00
kib
25782a7fab Merge the changes to pmap_enter(9) for sleep-less operation (requested
by flag).  The ia64 pmap.c changes are direct commit, since ia64 is
removed on head.

MFC r269368 (by alc):
Retire PVO_EXECUTABLE.

MFC r269728:
Change pmap_enter(9) interface to take flags parameter and superpage
mapping size (currently unused).

MFC r269759 (by alc):
Update the text of a KASSERT() to reflect the changes in r269728.

MFC r269822 (by alc):
Change {_,}pmap_allocpte() so that they look for the flag
PMAP_ENTER_NOSLEEP instead of M_NOWAIT/M_WAITOK when deciding whether
to sleep on page table page allocation.

MFC r270151 (by alc):
Replace KASSERT that no PV list locks are held with a conditional
unlock.

Reviewed by:	alc
Approved by:	re (gjb)
Sponsored by:	The FreeBSD Foundation
2014-08-24 07:53:15 +00:00
emaste
eb659bdb83 MFC r263822: amd64: Parse the EFI memory map if present
With this change (and loader.efi from [HEAD]) we can now boot under
  qemu using the OVMF UEFI firmware image with the limitation that a
  serial console is required.

Sponsored by:	The FreeBSD Foundation
2014-08-22 18:09:06 +00:00
grehan
5d455a50f5 MFC r267921, r267934, r267949, r267959, r267966, r268202, r268276,
r268427, r268428, r268521, r268638,	r268639, r268701, r268777,
    r268889, r268922, r269008, r269042,	r269043, r269080, r269094,
    r269108, r269109, r269281, r269317,	r269700, r269896, r269962,
    r269989.

Catch bhyve up to CURRENT.

Lightly tested with FreeBSD i386/amd64,	Linux i386/amd64, and
OpenBSD/amd64. Still resolving an	issue with OpenBSD/i386.

Many thanks to jhb@ for	all the	hard work on the prior MFCs !

r267921 - support the "mov r/m8, imm8" instruction
r267934 - document options
r267949 - set DMI vers/date to fixed values
r267959 - doc: sort cmd flags
r267966 - EPT misconf post-mortem info
r268202 - use correct flag for event index
r268276 - 64-bit virtio capability api
r268427 - invalidate guest TLB when cr3 is updated, needed for TSS
r268428 - identify vcpu's operating mode
r268521 - use correct offset in guest logical-to-linear translation
r268638 - chs value
r268639 - chs fake values
r268701 - instr emul operand/address size override prefix support
r268777 - emulation for legacy x86 task switching
r268889 - nested exception support
r268922 - fix INVARIANTS build
r269008 - emulate instructions found in the OpenBSD/i386 5.5 kernel
r269042 - fix fault injection
r269043 - Reduce VMEXIT_RESTARTs in task_switch.c
r269080 - fix issues in PUSH emulation
r269094 - simplify return values from the inout handlers
r269108 - don't return -1 from the push emulation handler
r269109 - avoid permanent sleep in vm_handle_hlt()
r269281 - list VT-x features in base kernel dmesg
r269317 - Mark AHCI fatal errors as not completed
r269700 - Support PCI extended config space in bhyve
r269896 - Minor cleanup
r269962 - use max guest memory when creating IOMMU domain
r269989 - fix interrupt mode names
2014-08-19 01:20:24 +00:00
grehan
766feae596 MFC r267338
Replace enum forward declarations with complete definitions
2014-08-17 03:01:56 +00:00
grehan
46d28d66fb MFC r267311, r267330, r267811, r267884
Turn on interrupt window exiting unconditionally when an ExtINT is being
injected into the guest.

Add helper functions to populate VM exit information for rendezvous and
astpending exits.

Provide APIs to directly get 'lowmem' and 'highmem' size directly.

Expose the amount of resident and wired memory from the guest's vmspace
2014-08-17 01:23:52 +00:00
grehan
c00f011a6e MFC r267178, r267300
Support guest accesses to %cr8

Add reserved bit checking when doing %CR8 emulation and inject #GP if required.
2014-08-17 01:16:40 +00:00
grehan
7a365d2c05 MFC r267216
Add ioctl(VM_REINIT) to reinitialize the virtual machine state maintained
by vmm.ko. This allows the virtual machine to be restarted without having
to destroy it first.
2014-08-17 01:00:42 +00:00
grehan
e83027edbb MFC r266933
Activate vcpus from bhyve(8) using the ioctl VM_ACTIVATE_CPU instead of doing
it implicitly in vmm.ko.
2014-08-17 00:52:07 +00:00
markj
57990c0ba4 MFC r266826, r266827
Move some duplicated hook definitions from machine-dependent files to
kern_dtrace.c.
2014-08-09 14:05:01 +00:00
emaste
4b7aa9ea8a MFC r258436: Refactor amd64 startup SMAP parsing
Extracted from the projects/uefi branch, this change is a reasonable
  cleanup and will reduce the diffs to review when bringing in the
  UEFI work.
2014-08-01 21:40:42 +00:00
markj
8116ff7597 MFC r263329:
Only invoke fasttrap hooks for traps from user mode, and ensure that they're
called with interrupts enabled. Calling fasttrap_pid_probe() with interrupts
disabled can lead to deadlock if fasttrap writes to the process' address
space.
2014-07-29 20:33:18 +00:00
marius
6b4298527d MFC: r269051
Copying pages via temporary mappings in the !DMAP case of pmap_copy_pages()
involves updating the corresponding page tables followed by accesses to the
pages in question. This sequence is subject to the situation exactly described
in the "AMD64 Architecture Programmer's Manual Volume 2: System Programming"
rev. 3.23, "7.3.1 Special Coherency Considerations" [1, p. 171 f.]. Therefore,
issuing the INVLPG right after modifying the PTE bits is crucial (see also
r269050, MFCed to stable/10 in r269235).
For the amd64 PMAP code, the order of instructions was already correct. The
above fact still is worth documenting, though.

1: http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2012/10/24593_APM_v21.pdf

Reviewed by:	alc
Sponsored by:	Bally Wulff Games & Entertainment GmbH
2014-07-29 13:11:37 +00:00
kib
d7d6313cf4 MFC r267213 (by alc):
Add a page size field to struct vm_page.

Approved by:	alc
2014-07-24 16:29:44 +00:00
emaste
3c9102634e MFC r258471: Don't abort SMAP processing after an entry of length 0
Length 0 is not special and should just be skipped.  This is the same
  behaviour as i386.

Sponsored by:	The FreeBSD Foundation
2014-07-24 14:24:27 +00:00
kib
f8748c4ec3 MFC r268660:
Make amd64 pmap_copy_pages() functional for pages not mapped by DMAP.
2014-07-24 10:45:52 +00:00
jhb
ce450da430 MFC 266424,266476,266524,266573,266595,266626,266627,266633,266641,266642,
266708,266724,266934,266935,268521:
Emulation of the "ins" and "outs" instructions.

Various fixes for translating guest linear addresses to guest physical
addresses.
2014-07-22 04:39:16 +00:00
jhb
c1fe945ebd MFC 266125:
Implement a PCI interrupt router to route PCI legacy INTx interrupts to
the legacy 8259A PICs.
2014-07-22 03:14:37 +00:00
jhb
e6b48465b7 MFC 264353,264509,264768,264770,264825,264846,264988,265114,265165,265365,
265941,265951,266390,266550,266910:
Various bhyve fixes:
- Don't save host's return address in 'struct vmxctx'.
- Permit non-32-bit accesses to local APIC registers.
- Factor out common ioport handler code.
- Use calloc() in favor of malloc + memset.
- Change the vlapic timer frequency to be in the ballpark of contemporary
  hardware.
- Allow the guest to read the TSC via MSR 0x10.
- A VMCS is always inactive when it exits the vmx_run() loop.  Remove
  redundant code and the misleading comment that suggest otherwise.
- Ignore writes to microcode update MSR.  This MSR is accessed by RHEL7
  guest.
  Add KTR tracepoints to annotate wrmsr and rdmsr VM exits.
- Provide an alias for the userboot console and name it 'comconsole'.
- Use EV_ADD to create an mevent and EV_ENABLE to enable it.
- abort(3) the process in response to a VMEXIT_ABORT.
- Don't include the guest memory segments in the bhyve(8) process core dump.
- Make the vmx asm code dtrace-fbt-friendly.
- Allow vmx_getdesc() and vmx_setdesc() to be called for a vcpu that is in
  the VCPU_RUNNING state.
- Enable VMX in the IA32_FEATURE_CONTROL MSR if it not enabled and the MSR
  isn't locked.
2014-07-21 19:08:02 +00:00
jhb
b164bf5917 MFC 264347:
Account for the "plus 1" encoding of the CPUID Function 4 reported
core per package and cache sharing values.
2014-07-21 18:26:51 +00:00
jhb
888f6511e3 MFC 263780,264516,265062,265101,265203,265364:
Add an ioctl to suspend a virtual machine (VM_SUSPEND).

Add logic in the HLT exit handler to detect if the guest has put all vcpus
to sleep permanently by executing a HLT with interrupts disabled.

When this condition is detected the guest with be suspended with a reason of
VM_SUSPEND_HALT and the bhyve(8) process will exit.

This logic can be disabled via the tunable 'hw.vmm.halt_detection'.
2014-07-21 02:39:17 +00:00
jhb
cf1a222326 MFC 260847,264055,264867:
- Add a very simple virtio_random(4) driver for FreeBSD guests to harvest
  entropy from hypervisors.
- Add support to bhyve for the virtio RNG entropy-source device to provide
  entry to bhyve guests.
2014-07-21 00:21:56 +00:00
jhb
3da9c304ee MFC 259942,262274,263035,263054,263211,263744,264179,264324,264468,264631,
264648,264650,264651,266572,267558:
Flesh out the AT PIC and 8254 PIT emulations and move them into the kernel.
2014-07-19 22:06:46 +00:00
imp
07bb5d08f3 MFC r263749,267146:
>r267146 | imp | 2014-06-05 22:08:55 -0600 (Thu, 05 Jun 2014) | 4 lines
>Restore comments accidentally removed.

>r263749 | imp | 2014-03-25 16:08:31 -0600 (Tue, 25 Mar 2014) | 18 lines
>Rather than require a makeoptions DEBUG to get debug correct,
>add it in kern.mk, but only if we're using clang. While this
>option is supported by both clang and gcc, in the future there
>may be changes to clang which change the defaults that require
>a tweak to build our kernel such that other tools in our tree
>will work. Set a good example by forcing -gdwarf-2 only for
>clang builds, and only if the user hasn't specified another
>dwarf level already. Update UPDATING to reflect the changed
>state of affairs. This also keeps us from having to update
>all the ARM kernels to add this, and also keeps us from
>in the future having to update all the MIPS kernels and is
>one less place the user will have to know to do something
>special for clang and one less thing developers will need
>to do when moving an architecture to clang.
2014-07-17 22:31:46 +00:00