Also update the code in tools to create the device node if udev fails.
The tools now read the sysfs system to find the minor number needed.
Original patch from Steven Rostedt <srostedt@redhat.com>
Signed-off-by: Keir Fraser <keir@xensource.com>
blktap_poll is calling tlb_flush_all() in its main ring buffer polling
loop. This seems to be superfluous: the hypervisor should be
performing
any necessary tlb flushes on grant table operations performed by the
back-end. Even a simple memory barrier is unnecessary here as the
RING_PUSH_REQUESTS() call performs a wmb() anyway.
And tlb_flush_all() is not exported to modules, so this call prevents
blktap from building as a module. Just remove it.
Signed-off-by: Stephen Tweedie <sct@redhat.com>
notifications during shutdown. When rootfs goes away this can
cause the system to hang, as we notify userspace etc.
Instead we forcibly reset the state machine back to state Closed
if we are a frontend driver, to get the backend to release
resources. Necessary if we are going to kexec.
Signed-off-by: Keir Fraser <keir@xensource.com>
This patch makes blktap Do The Right Thing(TM). It allows udev to
create the /dev/xen/blktap[0-9] devices.
It creates a sysfs class called "xen". This part may later be placed
someplace else, but currently blktap is the only user so it is placed in
the blktap code.
When blktap is initialized, a blktap0 sysfs class device is made. The
other devices blktapX (X > 0) are made when the BLKTAP_IOCTL_NEWINTF
ioctl is called. This way we don't flood the sysfs and /dev/xen with
unnecessary devices.
I added a rule in the xen-backend.rules to allow for udev to create the
blktap devices.
With this, we can really remove the code to search and create the
/dev/xen/blktap[0-9]*, but I'll leave it in for now. With the use of
udev, we really should remove that code as well as the code for creating
the evtchn device. udev works for both of these now. But that removal
will have to be in another patch.
Signed-off-by: Steven Rostedt <srostedt@redhat.com>
blktap currently uses a hardcoded major of 254 for the device. This is
not robust in anyway and needs to be dynamic.
Note: it is better not to have the daemon create the node, and have udev
create it instead. But since the daemon currently creates the node
anyway, it is still the way this is done. That change needs to be made
at another time.
Signed-off-by: Steven Rostedt <srostedt@redhat.com>
blktap is calling non-atomic kernel functions with irqs disabled, which
hits various kernel debug traps if those are enabled. The problem is
req_increase(), which takes the pending_free_lock.
This function is currently only ever called from module initialiation,
where it is impossible for it to race against anything else. Its
companion, req_decrease(), is not called at all.
Fix by removing the offending locking from req_increase() and, while
we're at it, remove req_decrease() entirely.
Signed-off-by: Stephen Tweedie <sct@redhat.com>
This patch cleans up the blktap.c code to make it form to the Linux
coding style a little better.
It also removes the private data structure that is only used to store
the index of the tabfds descriptor. Instead the filp->private_data now
points to the descriptor itself.
Signed-off-by: Steven Rostedt <srostedt@redhat.com>
When a domain shuts down with a blktap-backed block device open, it can
easily cause a dom0 oops. The XenbusStateClosing event can occur while
the tapdisk userland thread is still processing IO requests (eg.
readaheads) from the domU. But the xenbus state handler calls
tap_blkif_unmap(), unmapping the blkif->blk_ring.sring rin buffer, so
when the tapdisk thread next calls the BLKTAP_IOCTL_KICK_FE to return
the completion event to the FE via that ring buffer, it oopses.
This can be fixed simply by not calling tap_blkif_unmap() in this case;
the ring buffer will still be unmapped later on when the blkif is
destroyed by blktap_remove(), only then it will properly wait for the
blkif refcnt to reach zero before doing so.
Signed-off-by: Stephen Tweedie <sct@redhat.com>
remove buffer related arguments from XENOPROF_init operation. This
is the first step to allow dynamic mapping/unmapping of xenoprof
buffers to
enable profiling a domain in passive mode and then switch to active
mode (or vice-versa). Currently a domain can only be profiled in a
single mode. Also passive domains cannot have oprofile builtin the
kernel or passive profiling will fail.
Signed-off-by: Jose Renato Santos <jsantos@hpl.hp.com>
Do not define dma_supported to platform_dma_supported when building
the Xen kernel. This happend to work for DIG builds because the
swiotlb.c version of dma_supported compiles to identical code as
arch/i386/kernel/pci-dma-xen.c so the linker didn't complain.
Signed-off-by: Jes Sorensen <jes@sgi.com>
This fixes the sparse tree buildconfigs to allow xenU to build
automatically. There's no need to force netdev front/back on from
the arch Kconfig file anymore. Based on patch from Akio Takebe &
Yoshiro Fujita.
Signed-off-by: Alex Williamson <alex.williamson@hp.com>
This patch makes frontend drivers being shutdown when devices_shutdown()
is called and walks down the device tree. Most of it is handled by the
xenbus core, which got a new function for the bus->shutdown callback.
Signed-off-by: Gerd Hoffmann <kraxel@suse.de>
Driver changes: Make backend drivers check it when entering Closed
state, only unregister devices when the "online" node is either "0" or
not present. The later maintains backward compatibility.
Tools changes: Update "online" node when creating and hot-unplugging
devices.
Background: When kexec'ing a new kernel, the old kernel's frontend
driver will shutdown, but the backend device should *NOT* disappear
due to that, so the new kernel instance can reconnect.
Signed-off-by: Gerd Hoffmann <kraxel@suse.de>
This is because it should only contain real I/O memory address ranges,
otherwise we can get false conflicts between a real I/O range and a
'pseudophysical' RAM range, causing drivers to fail to work in a domU.
Also prevent kernel code/data being requested as iomem resources --
they are not contiguous in 'io memory' space so this would not make
sense.
Signed-off-by: Keir Fraser <keir@xensource.com>
open_netdev is called as very last thing in netdev_probe.
This closes at least one initialization race: uninitialized
mac address is visible for a short time in
/sys/class/net/${if}/address
Signed-off-by: Gerd Hoffmann <kraxel@suse.de>
This will allow the tools management to be revised independently
of dom0 kernel interfaces. Currently tools cannot be 'smarter'
than the kernel in terms of hypercalls they know about, because
the kernel disallows access to any hypercalls it does not know
about.
Signed-off-by: Keir Fraser <keir@xensource.com>
ELF notes provide a cleaner interface for passing Xen specific
information from the kernel to the domain builder than the existing
__xen_guest section string. The __xen_guest string is retained in
kernels built with 3.0.2 compatability for domU however dom0 requires
the new interface.
Signed-off-by: Ian Campbell <ian.campbell@xensource.com>
This may allow guest kernels to be run outside ring 3 in future, and
also provides scope for optimisations today (e.g., using global bit on
user mappings).
Signed-off-by: Jun Nakajima <jun.nakajima@intel.com>
Signed-off-by: Keir Fraser <keir@xensource.com>
i386 version is taken from 2.6.18-rc4-mm1 and x86_64 version has been
submitted for inclusion.
Signed-off-by: Ian Campbell <ian.campbell@xensource.com>