Commit Graph

205 Commits

Author SHA1 Message Date
ad
157ae0ddef Use the new atomic ops. 2007-11-28 16:40:40 +00:00
bouyer
d3cd257630 Add support for the "protocol" entry in xenstore, which really specifies
the ABI used by the front-end (x86 32 or 64 bit). A linux 32bit PAE kernel
can now boot on a NetBSD 64bit dom0 and use the block devices.
2007-11-25 22:44:39 +00:00
bouyer
4e54134323 Pull up the bouyer-xenamd64 branch to HEAD. This brings in amd64 support
to NetBSD/Xen, both Dom0 and DomU.
2007-11-22 16:16:40 +00:00
ad
deae4f32c5 Remove support for 80386 level CPUs. PR port-i386/36163. 2007-11-15 19:18:32 +00:00
ad
39a25a40ee Make xen build again. 2007-11-11 01:27:43 +00:00
joerg
930e1f6e1d Match delay/DELAY on x86 with delay(9). It takes an unsigned int as
argument. Use this and replace the inline assembly (mul + div using the
64bit intermediate result) with normal 32bit multiplication and
division. The compiler can turn the division into a multiplication and
shift, making it even cheaper then the original assembly. For extreme
long delays, just use 64bit arithmetic.
2007-10-26 13:24:39 +00:00
yamt
24a1632cb3 merge yamt-x86pmap branch.
- reduce differences between amd64 and i386.  notably, share pmap.c
  between them.  it makes several i386 pmap improvements available to
  amd64, including tlb shootdown reduction and bug fixes from Stephan Uphoff.
- implement deferred pmap switching for amd64.
- remove LARGEPAGES option.  always use large pages if available.
  also, make it work on amd64.
2007-10-18 15:28:31 +00:00
garbled
d974db0ada Merge the ppcoea-renovation branch to HEAD.
This branch was a major cleanup and rototill of many of the various OEA
cpu based PPC ports that focused on sharing as much code as possible
between the various ports to eliminate near-identical copies of files in
every tree.  Additionally there is a new PIC system that unifies the
interface to interrupt code for all different OEA ppc arches.  The work
for this branch was done by a variety of people, too long to list here.

TODO:
bebox still needs work to complete the transition to -renovation.
ofppc still needs a bunch of work, which I will be looking at.
ev64260 still needs to be renovated
amigappc was not attempted.

NOTES:
pmppc was removed as an arch, and moved to a evbppc target.
2007-10-17 19:52:51 +00:00
ad
9c412e0cbf x86 changes for pcc and LKMs.
- Replace most inline assembly with proper functions. As a side effect
  this reduces the size of amd64 GENERIC by about 120kB, and i386 by a
  smaller amount. Nearly all of the inlines did something slow, or something
  that does not need to be fast.
- Make curcpu() and curlwp functions proper, unless __GNUC__ && _KERNEL.
  In that case make them inlines. Makes curlwp LKM and preemption safe.
- Make bus_space and bus_dma more LKM friendly.
- Share a few more files between the ports.
- Other minor changes.
2007-09-26 19:48:34 +00:00
ad
b684adf6ed ci_astpending is no more. 2007-09-25 17:08:08 +00:00
bouyer
5f0855fadb Ajust for Xen 3.1.0 public headers. From Christoph Egger in private mail. 2007-09-23 16:54:07 +00:00
bouyer
de1e0997f1 Add NetBSD CVS Id. 2007-09-23 16:25:28 +00:00
bouyer
a6669b974a Remove files that should not have been imported. 2007-09-23 16:24:06 +00:00
bouyer
d6d56d2ae7 Merge conflics after import of Xen 3.1.0 public headers 2007-09-23 16:19:36 +00:00
bouyer
9800459946 Import Xen 3.1.0 public headers 2007-09-23 16:13:31 +00:00
bouyer
4b788a8f96 Add NetBSD RCS Id. 2007-09-23 15:57:36 +00:00
bouyer
d61110de20 Switch to dynamically-sized grant tables, available since Xen-3.1.0.
This removes a hard limit that would prevent a guest from running with more
than 7 virtual network interface.
If running on a hypervisor that doesn't support GNTTABOP_query_size, fall back
to a 4-pages grant table, so this change is backward-compatible.
2007-09-05 19:15:42 +00:00
bouyer
26281fbd54 Fix build failure when for kernel with options LOCKDEBUG.
Pointed out by Christoph Egger.
2007-09-04 21:19:11 +00:00
ad
fbb58ada61 Merge most x86 changes from the vmlocking branch, except the threaded soft
interrupt stuff. This is mostly comprised of changes to the pmap modules to
work on multiprocessor systems without kernel_lock, and changes to speed up
tlb shootdowns.
2007-08-29 23:38:01 +00:00
ad
63811f5275 Generic soft interrupts are mandatory. 2007-07-14 21:48:17 +00:00
yamt
f03010953f merge yamt-idlelwp branch. asked by core@. some ports still needs work.
from doc/BRANCHES:

	idle lwp, and some changes depending on it.

	1. separate context switching and thread scheduling.
	   (cf. gmcgarry_ctxsw)
	2. implement idle lwp.
	3. clean up related MD/MI interfaces.
	4. make scheduler(s) modular.
2007-05-17 14:51:11 +00:00
jld
51e5b25976 Convert the xen port to use timecounters; ok'ed by bouyer@. 2007-05-12 07:06:54 +00:00
ad
2f3dd41194 Include sys/simplelock.h, not sys/lock.h. 2007-03-12 16:43:11 +00:00
yamt
dedaf26748 fix vcpu after recent cpubus changes. 2007-03-06 12:35:39 +00:00
drochner
d880082522 clean up how cpus and ioapics are attached at the mainbus:
Seperate "cpubus" and "ioapicbus" -- while they share a common "address
space" (the apic id), the kernel doesn't use this fact. There are different
data passed to cpus and apics, which caused some ugly polymorphism. This
also saves the special "submatch" functions needed to distingush cpus
and ioapics for autoconf. (And it makes that "apid" locators wired
in the kernel configuration are honored now; this allows one to dumb down
an mp box to singleprocessor by userconfig.)
Print "apid" locators in the buses "print" function "as everyone does",
so the per-port cpu drivers don't need to do it.
Being here, constify "struct cpu_functions" and g/c the unused MP_PICMODE
flag.
2007-03-05 16:50:59 +00:00
christos
53524e44ef Kill caddr_t; there will be some MI fallout, but it will be fixed shortly. 2007-03-04 05:59:00 +00:00
thorpej
712239e366 Replace the Mach-derived boolean_t type with the C99 bool type. A
future commit will replace use of TRUE and FALSE with true and false.
2007-02-21 22:59:35 +00:00
ad
3363855a4a Remove spllowersoftclock() and CLKF_BASEPRI(), and always dispatch callouts
via a soft interrupt. In the near future, softclock will be run from process
context.
2007-02-16 02:53:43 +00:00
ad
b07ec3fc38 Merge newlock2 to head. 2007-02-09 21:55:00 +00:00
ad
236a8ab694 Update x86_pause() as per i386. 2007-01-14 17:20:32 +00:00
ad
e96fca7884 Define ipl_t as uint8_t so that it can be packed into a word with a lock
byte. Ok yamt@.
2006-12-26 15:22:44 +00:00
yamt
8bf7662829 merge yamt-splraiseipl branch.
- finish implementing splraiseipl (and makeiplcookie).
	  http://mail-index.NetBSD.org/tech-kern/2006/07/01/0000.html
	- complete workqueue(9) and fix its ipl problem, which is reported
	  to cause audio skipping.
	- fix netbt (at least compilation problems) for some ports.
	- fix PR/33218.
2006-12-21 15:55:21 +00:00
yamt
98cfc473c8 - pass intrframe by-pointer, not by-value.
- make i386 and xen use per-cpu interrupt stack.

xen part is reviewed by Manuel Bouyer.
2006-12-08 15:05:18 +00:00
yamt
9777cce8d1 include the i386 frameasm.h rather than inlining it. 2006-11-21 07:35:01 +00:00
bouyer
abd9ea51ce XEN_NO_HYPERCALLPAGE is redundant with XEN_COMPAT_030001; make
XEN_COMPAT_030001 disable the hypercall page too and remove
XEN_NO_HYPERCALLPAGE
2006-10-17 19:57:24 +00:00
bouyer
754514a443 Add ELF_PADDR_OFFSET and VIRT_ENTRY strings to __xen_guest ELF section,
so that our kernels works with newer xen-3 hypervisors; and correct the value
of VIRT_BASE for dom0.
Now that we can embed the values of KERNBASE and KERNTEXTOFF in the binary
for Xen, make the domU memory layout the same as dom0 for Xen3 (making
it the other way round doens't work; probably because of alignement
constraints in the hypervisor). The old domU layout is used if options
XEN_COMPAT_030001 is present in the kernel config file. Enable this the
domU kernel config files for now, in case someone wants to run a NetBSD
domU on an older Xen3 installation.
2006-10-17 18:53:03 +00:00
bouyer
305d094b01 Define x86_mfence(). Use it where appropriate. Seems to fix a hang in
the network interface front-end/back-end for me ...
2006-10-15 13:35:15 +00:00
bouyer
f23d3bb7be Add Xen3 support for ACPI and/or MPBIOS + IOAPIC. To help with this, physical
CPUs are now configured on mainbus only in dom0, and only to know about
their APIC id. virtual CPUs are attached to hypervisor as:
vcpu* at hypervisor?
and this is what's used as curcpu(). The kernel config files needs to be
updated for this, see XEN3_DOM0 or XEN3_DOMU for examples.
XEN3_DOM0 now has acpi, MPBIOS and ioapic by default.
Note that a Xen dom0 kernel doens't have access to the lapic.
2006-09-28 18:53:15 +00:00
bouyer
f99383d432 The Xen folks says everyone should use hypercall call page now, make it so.
Old hypercall call method still still available with
options XEN_NO_HYPERCALLPAGE
but this is disabled by default (xen-3.0.2-2 supports hypercall call page
just fine).
While there add a VIRT_BASE= string in __xen_guest section; from
Bastian Blank on port-xen@.
2006-09-24 18:14:44 +00:00
bouyer
b6ce42d579 Factor out some hypercall code in macros, so that it's easier to change
the way hypercalls are called.
2006-09-24 15:30:14 +00:00
bjh21
e10108c7f2 Nothing in the kernel now tests __HAVE_NWSCONS, so stop defining it everywhere. 2006-09-03 13:51:23 +00:00
bouyer
aeeb0b33ca Some bus_dma(9) fixes for Xen:
- Attempt to gracefully recover from a failed decrease_reservation or
  increase_reservation, by avoiding physical memory loss.
- always store a machine address in ds_addr; this avoids some mistakes
  where machine address would in some case be freed at physical address, or
  mapped as physical address.
2006-08-28 19:58:56 +00:00
dsl
c8da0759cd Fix build of machdep.c with -Os and -O3 2006-08-19 16:06:39 +00:00
yamt
467e0c9853 "xm shutdown" support for xen3. ok'ed by Manuel Bouyer. 2006-08-11 13:22:43 +00:00
yamt
897bdba2b9 implement a simple NETTXF_csum_blank/NETRXF_csum_blank workaround
so that we can talk with linux guests at least.
just fill checksum field of received packets if the flag is set.
maybe should be revisited later.
2006-07-12 15:02:15 +00:00
bouyer
2613e19eec Add a 'base' argument to xenbus_read_ul, so that we can read number is base
other than 10.
2006-06-25 16:46:59 +00:00
bouyer
b063155744 Allow xen_shm_map() to map multiple grants in a contigous virtual address
space.
While here garbage-collect unused xen_shm_vaddr2ma()
2006-06-25 15:18:53 +00:00
kardel
d377d3f58a no timecounters yet - provide a local types.h 2006-06-07 22:45:21 +00:00
bouyer
d1d1596e1e Convert xen_shm_map() and xen_shm_unmap() to the Xen3 grant table
interface.
2006-05-25 21:26:20 +00:00
bouyer
237137c875 Add needed framework for backend drivers.
As we want some control on the name the backend driver will have we
can't use autoconf(9) here. Instead backend drivers registers to
xenbus, which will call a create callback when a new device is there.
Backend devices won't have a "struct device" in xenbus, use a void pointer
instead.
2006-05-23 21:07:56 +00:00
dogcow
fedf1d0f26 For whatever reason, GCC4 really really wants extern struct decls to be
after the struct is defined.
2006-05-15 20:57:53 +00:00
elad
8ccb6c9341 integrate kauth. 2006-05-14 21:55:09 +00:00
bouyer
c96226e3fa Resolve conflicts from xen-3.0.2-2 import 2006-05-07 10:56:37 +00:00
bouyer
388f0b9508 Import non-DPLd Xen public headers from Xen 3.0.2-2 2006-05-07 10:54:39 +00:00
bouyer
c8a960c560 Add dom0 operation support for Xen3. Probably buggy, but it's enouth to have
xend and xenstored starting; xm info and xm list works.
2006-05-07 10:18:28 +00:00
jld
2aa6d50864 Suspend/resume support for xbd -- keep enough info on live I/O to replay.
The rest of suspend/resume isn't there yet, but the parts that touch
regular usage have been tested.  Discussed on port-xen on 2006-04-25;
approved by bouyer@.
2006-05-05 19:25:26 +00:00
bouyer
aab0004b68 Add support for ACPI in xen-3 dom0 support. We can now boot a xen-3 dom0
kernel with a default xen comamnd line.
2006-04-09 19:28:00 +00:00
bouyer
65b5449cc4 Add NetBSD CVS Id. 2006-04-04 20:30:30 +00:00
bouyer
0c9571be10 Properly handle dynamic attach/detach of device:
- keep a linked list of xenbus_device in the xenbus_infrastructure, and
  keep a pointer to struct device for each xenbus_device
- xenbus_probe_device_type(): check that the device is not already attached
- when we get a frontend_changed callback, call xenbus_probe_device_type()
- When a device changes to state XenbusStateClosed, config_detach() it
  and free the structures.
While there, move xbusd_path[] to the end of struct xenbus_device, and
allocate only the space needed to store the path. Garbage-collect
struct xenbus_driver, it's not needed.
2006-03-26 22:02:57 +00:00
bouyer
2fb45fb442 Get the x86_lfence/x86_sfence right (I hope :) 2006-03-19 00:29:00 +00:00
bouyer
14e4157f2e Add a xenbus_read_ul() which reads a node and convert it to unsigned long.
Make xenbus_switch_state() and xenbus_read_driver_state() do something usefull.
2006-03-16 23:08:08 +00:00
bouyer
aceceafca7 Implement watch of xenstore nodes, and install watches for otherend'state
node.
2006-03-15 22:20:06 +00:00
bouyer
f0dc72de02 Implement granttables operations. 2006-03-06 20:30:40 +00:00
bouyer
636656c40d Xenbus public functions 2006-03-06 20:29:52 +00:00
bouyer
8508673945 Mark ring indexes as volatile. 2006-03-06 20:00:51 +00:00
bouyer
2e57249e9d Use x86_lfence/x86_sfence instead of linux wmb()/mb() 2006-03-06 20:00:06 +00:00
bouyer
9c7083dfa0 Implement MULTI_update_va_mapping() and MULTI_update_va_mapping_otherdomain(),
which fills in multicall arguments for __HYPERVISOR_update_va_mapping
and __HYPERVISOR_update_va_mapping_otherdomain dealing with
differences between i386 and amd64.
2006-03-06 19:57:31 +00:00
bouyer
fa2d4a51e2 Add xen_atomic_cmpxchg16(), which exports the cmpxchgw instruction to C. 2006-03-06 19:55:47 +00:00
bouyer
198cdcf732 Correct arguments for __HYPERVISOR_set_timer_op 2006-03-06 19:54:50 +00:00
bouyer
e4e15333af Add x86_sfence() for symetry, which is just a __insn_barrier() here. 2006-03-06 19:54:14 +00:00
perry
fbae48b901 Change "inline" back to "__inline" in .h files -- C99 is still too
new, and some apps compile things in C89 mode. C89 keywords stay.

As per core@.
2006-02-16 20:17:12 +00:00
yamt
3bf197127a merge xen pmap_enter, pmap_enter_ma, pmap_remap_pages.
ok'ed by Manuel Bouyer.
2006-01-23 20:19:08 +00:00
bouyer
87d63b6c1c Remove files not needed in the kernel. 2006-01-20 18:17:59 +00:00
bouyer
8f162b7ed8 Snapshot of work in progress on NetBSD port to Xen3:
- kernel (both dom0 and domU) boot, console is functionnal and it can starts
  software from a ramdisk
- there is no driver front-end expect console for domU yet.
- dom0 can probe devices and ex(4) work when Xen3 is booted without acpi
  and apic support. But the on-board IDE doens't get interrupts.
  The PCI code still needs work (it's hardcoded to mode 1). Some of this
  code should be shared with ../x86
  The physical insterrupt code needs to get MPBIOS and ACPI support, and
  do interrupt routing to properly interract with Xen.
To enable Xen-3.0 support, add
options XEN3
to your kernel config file (this will disable Xen2 support)
Changes affecting Xen-2.0 support (no functionnal changes intended):
- get more constants from genassym for assembly code
- remove some unneeded registers move from start()
- map the shared info page from start(), and remove the pte = 0xffffffff hack
- vector.S: in hypervisor_callback() make sure %esi points to
  HYPERVISOR_shared_info before accessing the info page. Remplace some
  hand-written assembly with the equivalent macro defined in frameasm.h
- more debug code, dissabled by default.

while here added my copyright on some files I worked on in 2005.
2006-01-15 22:09:51 +00:00
bouyer
5e035a6853 Import Xen3 public headers from xen-3.0-testing as of 7 Jan 2006. 2006-01-15 21:42:21 +00:00
bouyer
56b1a39e10 Move if_xennet private functions and structures from if_xennetvar.h
to if_xennet.c
2006-01-08 14:45:41 +00:00
perry
2d542ba1f8 inline -> __inline 2005-12-28 19:09:29 +00:00
perry
50a256a3a0 __asm__ -> __asm
__const__ -> const
__inline__ -> inline
__volatile__ -> volatile
2005-12-24 23:23:59 +00:00
perry
5f1c88d70d Remove leading __ from __(const|inline|signed|volatile) -- it is obsolete. 2005-12-24 20:06:46 +00:00
christos
95e1ffb156 merge ktrace-lwp. 2005-12-11 12:16:03 +00:00
yamt
73ad976942 simplify memory layout. 2005-11-22 06:18:01 +00:00
yamt
443e88c5cf some assym cleanup.
- move copyin and friends from locore.S to their own file, copy.S.
  share it between i386 and xen.
- defparam KERNBASE and kill KERNBASE_LOCORE hack.
- add more symbols to assym.h and use it where appropriate.
2005-11-07 11:42:34 +00:00
yamt
06085e8f52 - use sys/spl.h.
- add some IPL_ definitions.
2005-11-03 13:06:06 +00:00
yamt
0416d5be24 add splraiseipl(). 2005-10-29 11:07:45 +00:00
yamt
54007a40c0 remove duplicated spllpt(). 2005-10-28 10:34:18 +00:00
bouyer
8b47a87eb6 Have xennet_start() schedule a software interrupt to defer processing of the
send queue. This give upper layer an opportunity to queue up all available
packets before starting to process them. This reduce the number of interrupt
generated on the backend, and the time spent doing hypercalls in a significant
way.
2005-10-02 21:39:41 +00:00
bouyer
8519a64973 inline 2 trivial functions that are called often (according to profiling
data).
2005-09-20 20:33:53 +00:00
bouyer
4f6680c241 Use MCLGET() instead of local list of buffers. Garbage-collect
struct xennet_txbuf usage.
2005-09-11 13:20:00 +00:00
bouyer
b069bb656c The line number in the PCI interrupt register can be larger than 31 on
some hardware, depending on how Xen set things up. So bump NR_PIRQ from 32
to 256.
2005-09-10 18:24:35 +00:00
bouyer
b75ba03dd4 Add a vm_prot_t parameter to pmap_remap_pages(), and use it for the new PTE
instead to always trying PG_RW and falling back to PG_RO if this fails.
Use uvm_map_checkprot() in IOCTL_PRIVCMD_MMAP and IOCTL_PRIVCMD_MMAP_BATCH
to compute the appropriate vm_prot_t for pmap_remap_pages().
Thanks to Jed Davis for pointing out uvm_map_checkprot().
2005-09-10 18:00:49 +00:00
bouyer
7558bd0a7c Fix typo reported by Jed Davis on port-xen:
IOCTL_PRIVCMD_GET_MACH2PHYS_START_MFN is a read, not a write.
2005-09-10 15:41:54 +00:00
bouyer
f60ca60293 Rename _PRIVATE_BUS_DMAMEM_ALLOC_RANGE to _BUS_DMAMEM_ALLOC_RANGE for
consistency with other macros defined in bus_private.h. Pointed out by
YAMAMOTO Takashi.
2005-08-22 11:09:39 +00:00
bouyer
0944c0fa9d Deal with the machine address space being non-contigous in bus_dmamem_alloc():
- Define _BUS_AVAIL_END to 0xffffffff, as we don't have an easy way to
  find the upper bound for our machine address space (and this can change
  when we swap pages with the hypervisor).
- implement _xen_bus_dmamem_alloc_range(), which will request a contigous
  set of pages to the hypervisor if the pages returned by uvm_pglistalloc()
  don't fit the constraints.
We can't deal with the low/high constraints yet, because Xen doesn't offer a
way to get pages in a specific ranges of addresses.

Based on patches from Dave Thompson (in private mail), with heavy hacking
by me.
2005-08-20 19:30:37 +00:00
bouyer
54ecd3d8a1 Implement xpq_queue_machphys_update(), which queues a request to
update the machine to physical table (to be used after a
MEMOP_increase_reservation).
2005-08-20 19:20:54 +00:00
bouyer
41b1abf49b Provide a PCI_MACHDEP_ENUMERATE_BUS to the MI pci system. We can't use
the generic pci_enumerate_bus() in Xen because the hypervisor may
hide the function 0, but give access to other functions of the same device
and pci_enumerate_bus() will stop if function 0 isn't available.
2005-08-19 17:17:53 +00:00
cube
9f1eb3e30f Change all archs that did:
#define clockframe somethingelse

to:

struct clockframe {
	struct somethingelse cf_se;
};

and change access macros accordingly.

That means that, at least for that very issue, things will not go
ka-boomy if you don't have the actual definition of struct clockframe
before including systm.h.
2005-08-11 20:32:55 +00:00
tls
0ac3367f2a Improvements to xbdback (the domain 0 driver that provides "xbd" virtual
disks to other domains) from Jed Davis, <jld@panix.com>:

	* Issue multiple requests when necessary rather than
	  assuming that arbitrary requests can be mapped into single
	  contiguous virtual address ranges.

	* Don't assume that all data for a request is consecutive
	  in memory.  With some client OSes, it's not.

	The above two changes fix data corruption issues with Linux
	clients with certain filesystem block sizes.

	* Gracefully handle memory or pool allocation failures after
	  beginning to handle a request from the ring.

	* Merge contiguous requests to avoid the "64K turns into 44K + 20K
	  and doubles the transactions per second at the disk" problem
	  caused by the 11-page limit caused by the structure of Xen
	  ring entries.  This causes a very slight performance decrease
	  for sequential 64K I/O if the disk is not already saturated with
	  requests (about 1%) but halves the transactions per second we
	  hit the disk with -- or better.  It even compensates for bizarre
	  Linux behaviour like breaking long requests up into 5.5K pieces.

	* Probably some stuff I forgot to mention.

Disk throughput (though not latency) is now much, much closer to the
"raw hardware" case than it was before.
2005-07-17 08:23:43 +00:00
bouyer
6b930c6d27 Add support for x86 boot flags:
-s boot single user
-a ask root device
XXX -d is ifdef'd out for now, it cause early panic (no console message).
2005-06-15 22:08:08 +00:00
yamt
6976dba3a6 fix a typo (NETIF_TX_RING_SIZE <-> NETIF_RX_RING_SIZE) 2005-06-06 11:51:02 +00:00
yamt
457b7ee79b always provide prototype of printk for now. because:
- currently its implementation is always compiled in.
	- there're users which don't honor XENDEBUG.
2005-05-31 12:42:58 +00:00