OBS User unknown 2007-07-21 16:12:17 +00:00 committed by Git OBS Bridge
parent b850275d12
commit 4c207325e4
14 changed files with 996 additions and 275 deletions

View File

@ -1,7 +1,16 @@
Index: 2007-04-18/tools/check/Makefile
===================================================================
--- 2007-04-18.orig/tools/check/Makefile 2006-12-14 22:49:54.000000000 +0100
+++ 2007-04-18/tools/check/Makefile 2007-04-24 16:32:39.000000000 +0200
# HG changeset patch
# User kfraser@localhost.localdomain
# Date 1179219794 -3600
# Node ID e72e94d2987cfa20d3ac6b34972d0ce639efb1fa
# Parent e1d9d2884245461576631134db46dda67994989b
tools: check for curl-devel and libxml2-devel
when they are required for LIBXENAPI_BINDINGS.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
--- a/tools/check/Makefile Tue May 15 10:01:14 2007 +0100
+++ b/tools/check/Makefile Tue May 15 10:03:14 2007 +0100
@@ -7,7 +7,7 @@ all: build
# Check this machine is OK for building on.
.PHONY: build
@ -20,10 +29,8 @@ Index: 2007-04-18/tools/check/Makefile
.PHONY: clean
clean:
Index: 2007-04-18/tools/check/check_curl
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ 2007-04-18/tools/check/check_curl 2007-04-24 16:41:08.000000000 +0200
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/check/check_curl Tue May 15 10:03:14 2007 +0100
@@ -0,0 +1,38 @@
+#!/bin/sh
+# CHECK-BUILD CHECK-INSTALL
@ -63,10 +70,8 @@ Index: 2007-04-18/tools/check/check_curl
+rm -f $tmpfile
+
+exit $RC
Index: 2007-04-18/tools/check/check_xml2
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ 2007-04-18/tools/check/check_xml2 2007-04-24 16:41:16.000000000 +0200
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/check/check_xml2 Tue May 15 10:03:14 2007 +0100
@@ -0,0 +1,38 @@
+#!/bin/sh
+# CHECK-BUILD CHECK-INSTALL
@ -106,3 +111,4 @@ Index: 2007-04-18/tools/check/check_xml2
+rm -f $tmpfile
+
+exit $RC

View File

@ -1,7 +1,21 @@
Index: xen-3.1-testing/docs/man/xm.pod.1
===================================================================
--- xen-3.1-testing.orig/docs/man/xm.pod.1
+++ xen-3.1-testing/docs/man/xm.pod.1
# HG changeset patch
# User kfraser@localhost.localdomain
# Date 1183729502 -3600
# Node ID daa07db3ca845c9b08415d19a4d888902abf8321
# Parent d49e6a814d9a4cc8b136b599b77557920abd7921
docs: update xm man page
- Fixed description of "Mem" column in "xm list" output.
- Added a bit of text for the credit scheduler.
- Described the --force option to block-detach.
- Made formatting and spelling more consistent.
- etc...
Signed-off-by: Charles Coffing <ccoffing@novell.com>
--- a/docs/man/xm.pod.1 Fri Jul 06 14:43:51 2007 +0100
+++ b/docs/man/xm.pod.1 Fri Jul 06 14:45:02 2007 +0100
@@ -4,7 +4,7 @@ xm - Xen management user interface
=head1 SYNOPSIS
@ -11,17 +25,19 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
=head1 DESCRIPTION
@@ -13,46 +13,50 @@ domains. The program can be used to crea
@@ -13,46 +13,50 @@ domains. It can also be used to list cur
domains. It can also be used to list current domains, enable or pin
VCPUs, and attach or detach virtual block devices.
-The basic structure of every xm command is almost always:
+The basic structure of every B<xm> command is almost always:
-
- xm <subcommand> <domain-id> [OPTIONS]
+=over 2
-
-Where I<subcommand> is one of the sub commands listed below, I<domain-id>
+The basic structure of every B<xm> command is almost always:
+
+=over 2
+
+B<xm> I<subcommand> I<domain-id> [I<OPTIONS>]
+
+=back
@ -77,22 +93,24 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
have a traditional log in console this will look much like a normal
text log in screen.
@@ -63,15 +67,15 @@ The attached console will perform much l
@@ -63,15 +67,15 @@ so running curses based interfaces over
so running curses based interfaces over the console B<is not
advised>. Vi tends to get very odd when using it over this interface.
-=item B<create> I<[-c]> I<configfile> I<[name=value]>..
+=item B<create> [B<-c>] I<configfile> [I<name>=I<value>]..
-
-The create sub command requires a configfile and can optional take a
+=item B<create> [B<-c>] I<configfile> [I<name>=I<value>]..
+
+The create sub command requires a config file and can optionally take a
series of name value pairs that add to or override variables defined
in the config file. See L<xmdomain.cfg> for full details of that file
format, and possible options used in either the configfile or
-Name=Value combinations.
+I<name>=I<value> combinations.
-
-Configfile can either be an absolute path to a file, or a relative
+I<name>=I<value> combinations.
+
+I<configfile> can either be an absolute path to a file, or a relative
path to a file located in /etc/xen.
@ -214,7 +232,7 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
=item B<mem-set> I<domain-id> I<mem>
@@ -252,20 +258,20 @@ Set the domain's used memory using the b
@@ -252,20 +258,20 @@ operation requires cooperation from the
operation requires cooperation from the domain operating system, there
is no guarantee that it will succeed.
@ -224,10 +242,11 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
careful when using this command on running domains.
-=item B<migrate> I<domain-id> I<host> I<[options]>
+=item B<migrate> I<domain-id> I<host> [I<OPTIONS>]
-
-Migrate a domain to another Host machine. B<Xend> must be running on
-other host machine, it must be running the same version of xen, it
+=item B<migrate> I<domain-id> I<host> [I<OPTIONS>]
+
+Migrate a domain to another host machine. Xend must be running on
+other host machine, it must be running the same version of Xen, it
must have the migration TCP port open and accepting connections from
@ -258,7 +277,7 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
Set maximum Mbs allowed for migrating the domain. This ensures that
the network link is not saturated with migration traffic while
@@ -293,7 +299,7 @@ Pause a domain. When in a paused state
@@ -293,7 +299,7 @@ allocated resources such as memory, but
allocated resources such as memory, but will not be eligible for
scheduling by the Xen hypervisor.
@ -267,7 +286,7 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
Reboot a domain. This acts just as if the domain had the B<reboot>
command run from the console. The command returns as soon as it has
@@ -301,18 +307,18 @@ executed the reboot action, which may be
@@ -301,18 +307,18 @@ domain actually reboots.
domain actually reboots.
The behavior of what happens to a domain when it reboots is set by the
@ -280,12 +299,14 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
=over 4
-=item B<-a, --all>
+=item B<-a>, B<--all>
-
-Reboot all domains
+Reboot all domains.
-
-=item B<-w, --wait>
+=item B<-a>, B<--all>
+
+Reboot all domains.
+
+=item B<-w>, B<--wait>
Wait for reboot to complete before returning. This may take a while,
@ -299,7 +320,7 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
=item B<save> I<domain-id> I<state-file>
@@ -334,16 +340,16 @@ This is roughly equivalent to doing a hi
@@ -334,16 +340,16 @@ with all the same limitations. Open net
with all the same limitations. Open network connections may be
severed upon restore, as TCP timeouts may have expired.
@ -319,7 +340,7 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
created.
B<OPTIONS>
@@ -386,7 +392,7 @@ Attempting to set the VCPUs to a number
@@ -386,7 +392,7 @@ configured VCPU count is an error. Tryi
configured VCPU count is an error. Trying to set VCPUs to < 1 will be
quietly ignored.
@ -355,7 +376,7 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
Clears Xen's message buffer.
@@ -431,8 +437,8 @@ Print information about the Xen host in
@@ -431,8 +437,8 @@ reporting a Xen bug, please provide this
reporting a Xen bug, please provide this information as part of the
bug report.
@ -366,7 +387,7 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
host : talon
release : 2.6.12.6-xen0
@@ -470,36 +476,36 @@ B<FIELDS>
@@ -470,36 +476,36 @@ Not all fields will be explained here, b
Not all fields will be explained here, but some of the less obvious
ones deserve explanation:
@ -378,22 +399,26 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
field in /proc/cpuinfo on a normal Linux machine.
-=item I<free_memory>
+=item B<free_memory>
-
-Available memory (in MB) not allocated to Xen, or any other Domains.
+Available memory (in MB) not allocated to Xen, or any other domains.
-
-=item I<xen_caps>
+=item B<xen_caps>
-
-The xen version, architecture. Architecture values can be one of:
+=item B<free_memory>
+
+Available memory (in MB) not allocated to Xen, or any other domains.
+
+=item B<xen_caps>
+
+The Xen version and architecture. Architecture values can be one of:
x86_32, x86_32p (i.e. PAE enabled), x86_64, ia64.
-=item I<xen_changeset>
+=item B<xen_changeset>
-
-The xen mercurial changeset id. Very useful for determining exactly
+=item B<xen_changeset>
+
+The Xen mercurial changeset id. Very useful for determining exactly
what version of code your Xen system was built from.
@ -412,7 +437,7 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
domains. Xentop is a curses interface, and reasonably self
explanatory.
@@ -508,13 +514,41 @@ explanatory.
@@ -508,12 +514,40 @@ explanatory.
=head1 SCHEDULER SUBCOMMANDS
Xen ships with a number of domain schedulers, which can be set at boot
@ -424,7 +449,7 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
FIXME: we really need a scheduler expert to write up this section.
=over 4
+
+=item B<sched-credit> [ B<-d> I<domain-id> [ B<-w>[B<=>I<WEIGHT>] | B<-c>[B<=>I<CAP>] ] ]
+
+Set credit scheduler parameters. The credit scheduler is a
@ -452,10 +477,9 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
+no upper cap.
+
+=back
+
=item B<sched-sedf> I<period> I<slice> I<latency-hint> I<extratime> I<weight>
Set Simple EDF (Earliest Deadline First) scheduler parameters. This
@@ -546,7 +580,7 @@ Flag for allowing domain to run in extra
=item I<weight>
@ -496,11 +520,17 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
=back
-=item B<block-detach> I<domain-id> I<devid>
+=item B<block-detach> I<domain-id> I<devid> [B<--force>]
-
-Destroy a domain's virtual block device. devid B<must> be the device
-id given to the device by domain 0. You will need to run I<xm
-block-list> to determine that number.
-
-FIXME: this is currently B<broken>. Even though a block device is
-removed from domU, it appears to still be allocated in the domain 0.
-
-=item B<block-list> I<[-l|--long]> I<domain-id>
+=item B<block-detach> I<domain-id> I<devid> [B<--force>]
+
+Detach a domain's virtual block device. I<devid> may be the symbolic
+name or the numeric device id given to the device by domain 0. You
+will need to run B<xm block-list> to determine that number.
@ -510,11 +540,7 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
+or is still using the device), the detach will fail. The B<--force>
+parameter will forcefully detach the device, but may cause IO errors
+in the domain.
-FIXME: this is currently B<broken>. Even though a block device is
-removed from domU, it appears to still be allocated in the domain 0.
-
-=item B<block-list> I<[-l|--long]> I<domain-id>
+
+=item B<block-list> [B<-l>|B<--long>] I<domain-id>
List virtual block devices for a domain. The returned output is
@ -525,10 +551,11 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
-=item B<network-attach> I<domain-id> I<[script=scriptname]> I<[ip=ipaddr]>
-I<[mac=macaddr]> I<[bridge=bridge-name]> I<[backend=bedomain-id]>
-
-Creates a new network device in the domain specified by domain-id. It
+=item B<network-attach> I<domain-id> [B<script=>I<scriptname>] [B<ip=>I<ipaddr>]
+[B<mac=>I<macaddr>] [B<bridge=>I<bridge-name>] [B<backend=>I<bedomain-id>]
-Creates a new network device in the domain specified by domain-id. It
+
+Creates a new network device in the domain specified by I<domain-id>. It
takes the following optional options:
@ -541,9 +568,10 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
Use the specified script name to bring up the network. Defaults to
-the default setting in xend-config.sxp for I<vif-script>.
+the default setting in xend-config.sxp for B<vif-script>.
-
-=item I<ip=ipaddr>
+the default setting in xend-config.sxp for B<vif-script>.
+
+=item B<ip=>I<ipaddr>
Passes the specified IP Address to the adapter on creation.
@ -563,14 +591,15 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
The name of the bridge to attach the vif to, in case you have more
-than one. This defaults to
+than one. This defaults to xenbr0.
-
-=item I<backend=bedomain-id>
+than one. This defaults to xenbr0.
+
+=item B<backend=>I<bedomain-id>
The backend domain id. By default this is domain 0.
@@ -705,17 +742,17 @@ I<devid> is the virtual interface device
@@ -705,17 +742,17 @@ FIXME: this is currently B<broken>. Net
FIXME: this is currently B<broken>. Network devices aren't completely
removed from domain 0.
@ -601,7 +630,7 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
List vnets.
@@ -762,7 +799,7 @@ subcommands described below. Currently,
@@ -762,7 +799,7 @@ interpret labels:
interpret labels:
(1) Simple Type Enforcement: Labels are interpreted to decide access
@ -634,32 +663,36 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
is 'dom'. The labels are arranged in alphabetical order.
-=item B<addlabel> I<label> dom I<configfile> [I<policy>]
+=item B<addlabel> I<label> B<dom> I<configfile> [I<policy>]
-
-=item B<addlabel> I<label> res I<resource> [I<policy>]
+=item B<addlabel> I<label> B<dom> I<configfile> [I<policy>]
+
+=item B<addlabel> I<label> B<res> I<resource> [I<policy>]
Adds the security label with name I<label> to a domain
I<configfile> (dom) or to the global resource label file for the
@@ -841,17 +878,17 @@ currently enforced access control policy
@@ -841,17 +878,17 @@ verifies that the I<policy> definition s
verifies that the I<policy> definition supports the specified I<label>
name.
-=item B<rmlabel> dom I<configfile>
+=item B<rmlabel> B<dom> I<configfile>
-
-=item B<rmlabel> res I<resource>
+=item B<rmlabel> B<res> I<resource>
-
-Works the same as the I<addlabel> command (above), except that this
+=item B<rmlabel> B<dom> I<configfile>
+
+=item B<rmlabel> B<res> I<resource>
+
+Works the same as the B<addlabel> command (above), except that this
command will remove the label from the domain I<configfile> (dom) or
the global resource label file (res).
-=item B<getlabel> dom I<configfile>
+=item B<getlabel> B<dom> I<configfile>
-
-=item B<getlabel> res I<resource>
+=item B<getlabel> B<dom> I<configfile>
+
+=item B<getlabel> B<res> I<resource>
Shows the label for the given I<configfile> or I<resource>
@ -713,7 +746,7 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
xm block-attach homebanking phy:hda6 sda2 w
@@ -1010,7 +1047,7 @@ Note that labeled resources cannot be us
@@ -1010,7 +1047,7 @@ off. Any attempt to use labeled resourc
off. Any attempt to use labeled resources with security turned off
will result in a failure with a corresponding error message. The
solution is to enable security or, if security is no longer desired,
@ -740,3 +773,4 @@ Index: xen-3.1-testing/docs/man/xm.pod.1
=head1 SEE ALSO
B<xmdomain.cfg>(5), B<xentop>(1)

13
32on64-extra-mem.patch Normal file
View File

@ -0,0 +1,13 @@
Index: xen-3.0.4-testing/tools/python/xen/xend/XendDomainInfo.py
===================================================================
--- xen-3.0.4-testing.orig/tools/python/xen/xend/XendDomainInfo.py
+++ xen-3.0.4-testing/tools/python/xen/xend/XendDomainInfo.py
@@ -1431,7 +1431,7 @@ class XendDomainInfo:
xc.domain_setmaxmem(self.domid, maxmem)
# Make sure there's enough RAM available for the domain
- balloon.free(memory + shadow)
+ balloon.free(memory + shadow + 512)
# Set up the shadow memory
shadow_cur = xc.shadow_mem_control(self.domid, shadow / 1024)

View File

@ -28,6 +28,7 @@ Hypervisor and Tools" icon in YaST.
If you want to install and manage VMs graphically, be sure the following
optional packages are also installed:
vm-install (Optional, to install VMs)
python-gtk (Optional, to install VMs graphically)
virt-manager (Optional, to manage VMs graphically)
tightvnc (Optional, to view VMs outside virt-manager)
@ -41,7 +42,7 @@ kernel, you will boot the Xen hypervisor and a slightly changed Linux kernel.
This Linux kernel runs in the first virtual machine and will drive most of
your hardware.
This approach is called para-virtualization, since it is a partial
This approach is called paravirtualization, since it is a partial
virtualization (the Linux kernel needs to be changed slightly, to make the
virtualization easier). It results in very good performance (consult
http://www.cl.cam.ac.uk/research/srg/netos/xen/performance.html) but has the
@ -170,7 +171,7 @@ Consult the online documentation for more information.
Creating a VM with vm-install
-----------------------------
The vm-install program (part of the xen-tools package, and accessible
The vm-install program (part of the vm-install package, and accessible
through YaST's Control Center) is the recommended method to create VMs. This
program handles creating both the VM's configuration file and disk(s). It can
help install any operating system, not just SUSE.
@ -188,10 +189,10 @@ from _all_ VMs. Never try to share a filesystem that is mounted read-write;
filesystem corruption will result. For sharing writable data between VMs, use
NFS or other networked or cluster filesystems.
Xen does not yet properly support removable media in VMs, so installing an
operating system from CDs can be difficult. Consult the online documentation
for some detailed work-arounds. We recommend using a network installation
source, a DVD, or a DVD ISO.
Xen does not yet properly support removable media in paravirtual VMs, so
installing such an operating system from CDs can be difficult. Consult the
online documentation for some detailed work-arounds. We recommend using a
network installation source, a DVD, or a DVD ISO.
When defining the virtual network adapter(s), we recommend using a static MAC
for the VM rather than allowing Xen to randomly select one each time the VM
@ -243,8 +244,8 @@ the VM server's filesystem, so that it can be used to bootstrap the new VM.
See /etc/xen/examples/xmexample.domUloader for an example.
Next, make a copy of one of the /etc/xen/examples/* files, and modify it to
suit your needs. For para-virtualized VMs, start with
/etc/xen/examples/xmexample1; for fully-virtualized VMs, start with
suit your needs. For paravirtualized VMs, start with
/etc/xen/examples/xmexample1; for fully virtualized VMs, start with
/etc/xen/examples/xmexample.hvm. You'll need to change (at very least) the
"name" and "disk" parameters.
@ -275,20 +276,20 @@ Have a look at the other xm commands by typing "xm help". Note that most xm
commands must be done as root.
Using the Mouse via VNC in Fully-Virtual Mode
Using the Mouse via VNC in Fully Virtual Mode
---------------------------------------------
In a fully virtualized VM, the mouse may be emulated as a PS/2 mouse, USB
mouse, or USB tablet. The vm-install tool selects the best emulation that is
known to be automatically detected and supported by the operating system.
However, when accessing some fully-virtualized operating systems via VNC, the
However, when accessing some fully virtualized operating systems via VNC, the
mouse may be difficult to control if the VM is emulating a PS/2 mouse. PS/2
provides mouse deltas, but VNC only provides absolute coordinates. In such
cases, you may want to manually switch the operating system and VM to use a
USB tablet.
Emulation of a SummaSketch graphics tablet is provided for this reason. To
use the Summa emulation, you will need to configure your fully-virtualized OS.
use the Summa emulation, you will need to configure your fully virtualized OS.
Note that the virtual tablet is connected to the second virtual serial port
(/dev/ttyS1 or COM2).
@ -325,9 +326,9 @@ Then re-import the configuration into xend:
xm new my-vm
HVM Console in Fully-Virtual Mode
HVM Console in Fully Virtual Mode
---------------------------------
When running a VM in fully-virtual mode, a special console is available that
When running a VM in fully virtual mode, a special console is available that
provides some additional ways to control the VM. Press Ctrl-Alt-2 to access
the console; press Ctrl-Alt-1 to return to the VM. While at the console,
type "help" for help.

774
cdrom-removable.patch Normal file
View File

@ -0,0 +1,774 @@
Index: xen-3.1-testing/tools/ioemu/block.c
===================================================================
--- xen-3.1-testing.orig/tools/ioemu/block.c 2007-07-17 08:02:01.000000000 -0600
+++ xen-3.1-testing/tools/ioemu/block.c 2007-07-17 08:05:58.000000000 -0600
@@ -185,6 +185,13 @@
uint8_t *buf;
size_t bufsize = 1024;
+ if ( strcmp(filename, "/dev/cdrom") == 0) {
+ drv = bdrv_find_format("raw");
+ if (drv != NULL) {
+ return(drv);
+ }
+ }
+
fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE);
if (fd < 0) {
buf = NULL;
@@ -536,21 +543,11 @@
return bs->read_only;
}
-int bdrv_is_inserted(BlockDriverState *bs)
-{
- return bs->inserted;
-}
-
int bdrv_is_locked(BlockDriverState *bs)
{
return bs->locked;
}
-void bdrv_set_locked(BlockDriverState *bs, int locked)
-{
- bs->locked = locked;
-}
-
void bdrv_set_change_cb(BlockDriverState *bs,
void (*change_cb)(void *opaque), void *opaque)
{
@@ -697,8 +694,10 @@
fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE);
if (fd < 0) {
fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE);
- if (fd < 0)
- return -1;
+ if (fd < 0 && strstart(filename, "/dev/cd", NULL))
+ fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE | O_NONBLOCK );
+ if (fd < 0)
+ return -1;
bs->read_only = 1;
}
#ifdef _BSD
@@ -769,8 +768,97 @@
BDRVRawState *s = bs->opaque;
bs->total_sectors = 0;
close(s->fd);
+ s->fd = -1;
+}
+
+#include <linux/cdrom.h>
+#include <sys/ioctl.h>
+static int raw_is_inserted(BlockDriverState *bs)
+{
+ BDRVRawState *s = bs->opaque;
+ int ret;
+
+ switch(bs->removable) {
+ case BDRV_TYPE_CDROM:
+ ret = ioctl(s->fd, CDROM_DRIVE_STATUS, CDSL_CURRENT);
+ if (ret == CDS_DISC_OK) {
+ return 1;
+ }
+ if (ret == -1) { // iso case
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ break;
+ default:
+ return 1;
+ }
+}
+
+static int raw_media_changed(BlockDriverState *bs)
+{
+ int ret = 0;
+
+ switch(bs->removable) {
+ case BDRV_TYPE_CDROM:
+ {
+ if( bs->media_changed == 1 )
+ {
+ ret = 1;
+ bs->media_changed = 0;
+ }
+ return ret;
+ }
+ default:
+ return -ENOTSUP;
+ }
+}
+
+
+static int raw_eject(BlockDriverState *bs, int eject_flag)
+{
+ char cmd[sizeof(bs->device_name) + 32];
+
+ switch(bs->removable) {
+ case BDRV_TYPE_CDROM:
+ if (eject_flag) {
+ sprintf(cmd, "eject %s", bs->filename);
+ if (system(cmd) == -1) {
+ perror("CDROMEJECT");
+ }
+ } else {
+ sprintf(cmd, "eject -t %s", bs->filename);
+ if (system(cmd) == -1) {
+ perror("CDROMCLOSETRAY");
+ }
+ }
+ break;
+ default:
+ return -ENOTSUP;
+ }
+ return 0;
+}
+
+static int raw_set_locked(BlockDriverState *bs, int locked)
+{
+ BDRVRawState *s = bs->opaque;
+
+ switch(bs->removable) {
+ case BDRV_TYPE_CDROM:
+ if (ioctl (s->fd, CDROM_LOCKDOOR, locked) < 0) {
+ /* Note: an error can happen if the distribution automatically
+ mounts the CD-ROM */
+ // perror("CDROM_LOCKDOOR");
+ }
+ break;
+ default:
+ return -ENOTSUP;
+ }
+ return 0;
}
+
#ifdef _WIN32
#include <windows.h>
#include <winioctl.h>
@@ -850,6 +938,12 @@
raw_close,
raw_create,
raw_flush,
+
+ /* removable device support */
+ .bdrv_is_inserted = raw_is_inserted,
+ .bdrv_media_changed = raw_media_changed,
+ .bdrv_eject = raw_eject,
+ .bdrv_set_locked = raw_set_locked,
};
void bdrv_init(void)
@@ -866,3 +960,96 @@
bdrv_register(&bdrv_vpc);
bdrv_register(&bdrv_vvfat);
}
+
+/**************************************************************/
+/* removable device support */
+
+/**
+ * Return TRUE if the media is present
+ */
+int bdrv_is_inserted(BlockDriverState *bs)
+{
+ BlockDriver *drv = bs->drv;
+ int ret;
+ if (!drv)
+ return 0;
+ if (!drv->bdrv_is_inserted)
+ return 1;
+ ret = drv->bdrv_is_inserted(bs);
+ return ret;
+}
+
+/**
+ * Return TRUE if the media changed since the last call to this
+ * function.
+ */
+int bdrv_media_changed(BlockDriverState *bs)
+{
+ BlockDriver *drv = bs->drv;
+ int ret;
+
+ if (!drv || !drv->bdrv_media_changed)
+ ret = -ENOTSUP;
+ else
+ ret = drv->bdrv_media_changed(bs);
+ if (ret == -ENOTSUP)
+ ret = bs->media_changed;
+ bs->media_changed = 0;
+ return ret;
+}
+
+
+/**
+ * If eject_flag is TRUE, eject the media. Otherwise, close the tray
+ */
+void bdrv_eject(BlockDriverState *bs, int eject_flag)
+{
+
+ int ret = 0;
+ char cmd[sizeof(bs->device_name) + 32];
+ BlockDriver *drv = bs->drv;
+
+ switch(bs->removable) {
+ case BDRV_TYPE_CDROM:
+ if (eject_flag) {
+ sprintf(cmd, "eject %s", bs->filename);
+ if (system(cmd) == -1) {
+ perror("CDROMEJECT");
+ ret = -ENOTSUP;
+ }
+ } else {
+ sprintf(cmd, "eject -t %s", bs->filename);
+ if (system(cmd) == -1) {
+ perror("CDROMCLOSETRAY");
+ ret = -ENOTSUP;
+ }
+ }
+ break;
+ default:
+ if (!drv || !drv->bdrv_eject) {
+ ret = -ENOTSUP;
+ } else {
+ ret = drv->bdrv_eject(bs, eject_flag);
+ }
+ if (ret == -ENOTSUP) {
+ if (eject_flag)
+ bdrv_close(bs);
+ }
+ }
+ //return ret;
+}
+
+/**
+ * Lock or unlock the media (if it is locked, the user won't be able
+ * to eject it manually).
+ */
+void bdrv_set_locked(BlockDriverState *bs, int locked)
+{
+ BlockDriver *drv = bs->drv;
+
+ bs->locked = locked;
+ if (drv && drv->bdrv_set_locked) {
+ drv->bdrv_set_locked(bs, locked);
+ }
+}
+
Index: xen-3.1-testing/tools/ioemu/block_int.h
===================================================================
--- xen-3.1-testing.orig/tools/ioemu/block_int.h 2007-05-17 09:51:09.000000000 -0600
+++ xen-3.1-testing/tools/ioemu/block_int.h 2007-07-17 08:05:58.000000000 -0600
@@ -41,6 +41,13 @@
int nb_sectors, int *pnum);
int (*bdrv_set_key)(BlockDriverState *bs, const char *key);
int (*bdrv_make_empty)(BlockDriverState *bs);
+
+ /* removable device specific */
+ int (*bdrv_is_inserted)(BlockDriverState *bs);
+ int (*bdrv_media_changed)(BlockDriverState *bs);
+ int (*bdrv_eject)(BlockDriverState *bs, int eject_flag);
+ int (*bdrv_set_locked)(BlockDriverState *bs, int locked);
+
struct BlockDriver *next;
};
@@ -65,6 +72,7 @@
char backing_file[1024]; /* if non zero, the image is a diff of
this file image */
int is_temporary;
+ int media_changed;
BlockDriverState *backing_hd;
Index: xen-3.1-testing/tools/ioemu/hw/ide.c
===================================================================
--- xen-3.1-testing.orig/tools/ioemu/hw/ide.c 2007-05-17 09:51:09.000000000 -0600
+++ xen-3.1-testing/tools/ioemu/hw/ide.c 2007-07-17 08:05:58.000000000 -0600
@@ -278,6 +278,7 @@
#define ASC_ILLEGAL_OPCODE 0x20
#define ASC_LOGICAL_BLOCK_OOR 0x21
#define ASC_INV_FIELD_IN_CMD_PACKET 0x24
+#define ASC_MEDIA_CHANGED 0x28
#define ASC_MEDIUM_NOT_PRESENT 0x3a
#define ASC_SAVING_PARAMETERS_NOT_SUPPORTED 0x39
@@ -393,6 +394,7 @@
} PCIIDEState;
#define DMA_MULTI_THREAD
+#undef DMA_MULTI_THREAD
#ifdef DMA_MULTI_THREAD
@@ -1341,7 +1343,6 @@
} else {
ide_atapi_cmd_error(s, SENSE_NOT_READY,
ASC_MEDIUM_NOT_PRESENT);
- xenstore_check_new_media_present(1000);
}
break;
case GPCMD_MODE_SENSE_10:
@@ -1530,7 +1531,10 @@
if (eject && !start) {
/* eject the disk */
- bdrv_close(s->bs);
+ bdrv_eject(s->bs, 1);
+ } else if (eject && start) {
+ /* close the tray */
+ bdrv_eject(s->bs, 0);
}
ide_atapi_cmd_ok(s);
}
Index: xen-3.1-testing/tools/ioemu/xenstore.c
===================================================================
--- xen-3.1-testing.orig/tools/ioemu/xenstore.c 2007-05-17 09:51:09.000000000 -0600
+++ xen-3.1-testing/tools/ioemu/xenstore.c 2007-07-17 08:05:58.000000000 -0600
@@ -82,7 +82,7 @@
char **e = NULL;
char *buf = NULL, *path;
char *fpath = NULL, *bpath = NULL,
- *dev = NULL, *params = NULL, *type = NULL;
+ *dev = NULL, *params = NULL, *type = NULL, *media_present = NULL;
int i, is_scsi;
unsigned int len, num, hd_index;
@@ -170,6 +170,11 @@
bdrv_set_type_hint(bs_table[hd_index], BDRV_TYPE_CDROM);
if (pasprintf(&buf, "%s/params", bpath) != -1)
xs_watch(xsh, buf, dev);
+ if (pasprintf(&buf, "%s/media-present", bpath) != -1) {
+ free(media_present);
+ media_present = xs_read(xsh, XBT_NULL, buf, &len);
+ xs_watch(xsh, buf, "media_present");
+ }
}
/* open device now if media present */
if (params[0]) {
@@ -313,7 +318,7 @@
void xenstore_process_event(void *opaque)
{
- char **vec, *image = NULL;
+ char **vec, *image = NULL, *media_present = NULL;
unsigned int len, num, hd_index;
vec = xs_read_watch(xsh, &num);
@@ -325,6 +330,40 @@
goto out;
}
+ if (!strcmp(vec[XS_WATCH_TOKEN], "media_present")) {
+ media_present = xs_read(xsh, XBT_NULL, vec[XS_WATCH_PATH], &len);
+ if (media_present) {
+ BlockDriverState *bs;
+ char *buf = NULL, *cp = NULL, *path = NULL, *dev = NULL;
+
+ path = strdup(vec[XS_WATCH_PATH]);
+ cp = strstr(path, "media-present");
+ if (cp){
+ *(cp-1) = '\0';
+ pasprintf(&buf, "%s/dev", path);
+ dev = xs_read(xsh, XBT_NULL, buf, &len);
+ if (dev) {
+ bs = bdrv_find(dev);
+ if (!bs) {
+ term_printf("device not found\n");
+ goto out;
+ }
+ if (strcmp(media_present, "0") == 0 && bs) {
+ bdrv_close(bs);
+ }
+ else if (strcmp(media_present, "1") == 0 && bs != NULL && bs->drv == NULL) {
+ if (bdrv_open(bs, bs->filename, 0 /* snapshot */) < 0) {
+ fprintf(stderr, "qemu: could not open hard disk image '%s'\n",
+ bs->filename);
+ }
+ bs->media_changed = 1;
+ }
+ }
+ }
+ }
+ goto out;
+ }
+
if (strncmp(vec[XS_WATCH_TOKEN], "hd", 2) ||
strlen(vec[XS_WATCH_TOKEN]) != 3)
goto out;
Index: xen-3.1-testing/tools/python/xen/xend/server/HalDaemon.py
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ xen-3.1-testing/tools/python/xen/xend/server/HalDaemon.py 2007-07-17 08:05:58.000000000 -0600
@@ -0,0 +1,228 @@
+#!/usr/bin/env python
+# -*- mode: python; -*-
+#============================================================================
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of version 2.1 of the GNU Lesser General Public
+# License as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#============================================================================
+# Copyright (C) 2007 Pat Campbell <plc@novell.com>
+# Copyright (C) 2007 Novell Inc.
+#============================================================================
+
+"""hald (Hardware Abstraction Layer Daemon) watcher for Xen management
+ of removable block device media.
+
+"""
+
+import gobject
+import dbus
+import dbus.glib
+import os
+import types
+import sys
+import signal
+import traceback
+from xen.xend.xenstore.xstransact import xstransact, complete
+from xen.xend.xenstore.xsutil import xshandle
+from xen.xend import PrettyPrint
+from xen.xend import XendLogging
+from xen.xend.XendLogging import log
+
+class HalDaemon:
+ """The Hald block device watcher for XEN
+ """
+
+ """Default path to the log file. """
+ logfile_default = "/var/log/xen/hald.log"
+
+ """Default level of information to be logged."""
+ loglevel_default = 'INFO'
+
+ def __init__(self):
+
+ XendLogging.init(self.logfile_default, self.loglevel_default)
+ log.debug( "%s", "__init__")
+
+ self.udi_dict = {}
+ self.debug = 0
+ self.dbpath = "/local/domain/0/backend/vbd"
+ self.bus = dbus.SystemBus()
+ self.hal_manager_obj = self.bus.get_object('org.freedesktop.Hal', '/org/freedesktop/Hal/Manager')
+ self.hal_manager = dbus.Interface( self.hal_manager_obj, 'org.freedesktop.Hal.Manager')
+ self.gatherBlockDevices()
+ self.registerDeviceCallbacks()
+
+ def run(self):
+ log.debug( "%s", "In new run" );
+ try:
+ self.mainloop = gobject.MainLoop()
+ self.mainloop.run()
+ except KeyboardInterrupt, ex:
+ log.debug('Keyboard exception handler: %s', ex )
+ self.mainloop.quit()
+ except Exception, ex:
+ log.debug('Generic exception handler: %s', ex )
+ self.mainloop.quit()
+
+ def __del__(self):
+ log.debug( "%s", "In del " );
+ self.unRegisterDeviceCallbacks()
+ self.mainloop.quit()
+
+ def shutdown(self):
+ log.debug( "%s", "In shutdown now " );
+ self.unRegisterDeviceCallbacks()
+ self.mainloop.quit()
+
+ def stop(self):
+ log.debug( "%s", "In stop now " );
+ self.unRegisterDeviceCallbacks()
+ self.mainloop.quit()
+
+ def gatherBlockDevices(self):
+
+ # Get all the current devices from hal and save in a dictionary
+ try:
+ device_names = self.hal_manager.GetAllDevices()
+ i = 0;
+ for name in device_names:
+ #log.debug("device name, device=%s",name)
+ dev_obj = self.bus.get_object ('org.freedesktop.Hal', name)
+ dev = dbus.Interface (dev_obj, 'org.freedesktop.Hal.Device')
+ dev_properties = dev_obj.GetAllProperties(dbus_interface="org.freedesktop.Hal.Device")
+ if dev_properties.has_key('block.device'):
+ dev_str = dev_properties['block.device']
+ dev_major = dev_properties['block.major']
+ dev_minor = dev_properties['block.minor']
+ udi_info = {}
+ udi_info['device'] = dev_str
+ udi_info['major'] = dev_major
+ udi_info['minor'] = dev_minor
+ udi_info['udi'] = name
+ self.udi_dict[i] = udi_info
+ i = i + 1
+ except Exception, ex:
+ print >>sys.stderr, 'Exception gathering block devices:', ex
+ log.warn("Exception gathering block devices (%s)",ex)
+
+ #
+ def registerDeviceCallbacks(self):
+ # setup the callbacks for when the gdl changes
+ self.hal_manager.connect_to_signal('DeviceAdded', self.device_added_callback)
+ self.hal_manager.connect_to_signal('DeviceRemoved', self.device_removed_callback)
+
+ #
+ def unRegisterDeviceCallbacks(self):
+ # setup the callbacks for when the gdl changes
+ self.hal_manager.remove_signal_receiver(self.device_added_callback,'DeviceAdded')
+ self.hal_manager.remove_signal_receiver(self.device_removed_callback,'DeviceRemoved')
+
+ #
+ def device_removed_callback(self,udi):
+ log.debug('UDI %s was removed',udi)
+ self.show_dict(self.udi_dict)
+ for key in self.udi_dict:
+ udi_info = self.udi_dict[key]
+ if udi_info['udi'] == udi:
+ device = udi_info['device']
+ major = udi_info['major']
+ minor = udi_info['minor']
+ self.change_xenstore( "remove", device, major, minor)
+
+ # Adds device to dictionary if not already there
+ def device_added_callback(self,udi):
+ log.debug('UDI %s was added', udi)
+ self.show_dict(self.udi_dict)
+ dev_obj = self.bus.get_object ('org.freedesktop.Hal', udi)
+ dev = dbus.Interface (dev_obj, 'org.freedesktop.Hal.Device')
+ device = dev.GetProperty ('block.device')
+ major = dev.GetProperty ('block.major')
+ minor = dev.GetProperty ('block.minor')
+ udi_info = {}
+ udi_info['device'] = device
+ udi_info['major'] = major
+ udi_info['minor'] = minor
+ udi_info['udi'] = udi
+ already = 0
+ cnt = 0;
+ for key in self.udi_dict:
+ info = self.udi_dict[key]
+ if info['udi'] == udi:
+ already = 1
+ break
+ cnt = cnt + 1
+ if already == 0:
+ self.udi_dict[cnt] = udi_info;
+ log.debug('UDI %s was added, device:%s major:%s minor:%s index:%d\n', udi, device, major, minor, cnt)
+ self.change_xenstore( "add", device, major, minor)
+
+ # Debug helper, shows dictionary contents
+ def show_dict(self,dict=None):
+ if self.debug == 0 :
+ return
+ if dict == None :
+ dict = self.udi_dict
+ for key in dict:
+ log.debug('udi_info %s udi_info:%s',key,dict[key])
+
+ # Set or clear xenstore media-present depending on the action argument
+ # for every vbd that has this block device
+ def change_xenstore(self,action, device, major, minor):
+ domains = xstransact.List(self.dbpath)
+ log.debug('domains: %s', domains)
+ for domain in domains: # for each domain
+ devices = xstransact.List( self.dbpath + '/' + domain)
+ log.debug('devices: %s',devices)
+ for device in devices: # for each vbd device
+ str = device.split('/')
+ vbd_type = None;
+ vbd_physical_device = None
+ vbd_media = None
+ vbd_device_path = self.dbpath + '/' + domain + '/' + device
+ listing = xstransact.List(vbd_device_path)
+ for entry in listing: # for each entry
+ item = self.dbpath + '/' + entry
+ value = xstransact.Read( vbd_device_path + '/' + entry)
+ log.debug('%s=%s',item,value)
+ if item.find('media-present') != -1:
+ vbd_media = item;
+ vbd_media_path = item
+ if item.find('physical-device') != -1:
+ vbd_physical_device = value;
+ if item.find('type') != -1:
+ vbd_type = value;
+ if vbd_type is not None and vbd_physical_device is not None and vbd_media is not None :
+ inode = vbd_physical_device.split(':')
+ imajor = inode[0]
+ iminor = inode[1]
+ log.debug("action:%s major:%s- minor:%s- imajor:%s- iminor:%s- inode: %s",
+ action,major,minor, imajor, iminor, inode)
+ if int(imajor) == int(major) and int(iminor) == int(minor):
+ if action == "add":
+ xs_dict = {'media': "1"}
+ xstransact.Write(vbd_device_path, 'media-present', "1" )
+ log.debug("wrote xenstore media-present 1 path:%s",vbd_media_path)
+ else:
+ xstransact.Write(vbd_device_path, 'media-present', "0" )
+ log.debug("wrote xenstore media 0 path:%s",vbd_media_path)
+
+def mylog( fmt, *args):
+ f = open('/tmp/haldaemon.log', 'a')
+ print >>f, "HalDaemon ", fmt % args
+ f.close()
+
+if __name__ == "__main__":
+ watcher = HalDaemon()
+ watcher.run()
+ print 'Falling off end'
+
+
Index: xen-3.1-testing/tools/python/xen/xend/server/Hald.py
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ xen-3.1-testing/tools/python/xen/xend/server/Hald.py 2007-07-17 08:05:58.000000000 -0600
@@ -0,0 +1,113 @@
+#============================================================================
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of version 2.1 of the GNU Lesser General Public
+# License as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#============================================================================
+# Copyright (C) 2007 Pat Campbell <plc@novell.com>
+# Copyright (C) 2007 Novell Inc.
+#============================================================================
+
+import errno
+import types
+import os
+import sys
+import time
+import signal
+from traceback import print_exc
+
+from xen.xend.XendLogging import log
+
+class Hald:
+ def __init__(self):
+ self.ready = False
+ self.running = True
+
+ def run(self):
+ """Starts the HalDaemon process
+ """
+ self.ready = True
+ try:
+ myfile = self.find("xen/xend/server/HalDaemon.py")
+ args = (["python", myfile ])
+ self.pid = self.daemonize("python", args )
+ #log.debug( "%s %s pid:%d", "Hald.py starting ", args, self.pid )
+ except:
+ self.pid = -1
+ log.debug("Unable to start HalDaemon process")
+
+ def shutdown(self):
+ """Shutdown the HalDaemon process
+ """
+ log.debug("%s pid:%d", "Hald.shutdown()", self.pid)
+ self.running = False
+ self.ready = False
+ if self.pid != -1:
+ try:
+ os.kill(self.pid, signal.SIGINT)
+ except:
+ print_exc()
+
+ def daemonize(self,prog, args):
+ """Runs a program as a daemon with the list of arguments. Returns the PID
+ of the daemonized program, or returns 0 on error.
+ Copied from xm/create.py instead of importing to reduce coupling
+ """
+ r, w = os.pipe()
+ pid = os.fork()
+
+ if pid == 0:
+ os.close(r)
+ w = os.fdopen(w, 'w')
+ os.setsid()
+ try:
+ pid2 = os.fork()
+ except:
+ pid2 = None
+ if pid2 == 0:
+ os.chdir("/")
+ for fd in range(0, 256):
+ try:
+ os.close(fd)
+ except:
+ pass
+ os.open("/dev/null", os.O_RDWR)
+ os.dup2(0, 1)
+ os.dup2(0, 2)
+ os.execvp(prog, args)
+ os._exit(1)
+ else:
+ w.write(str(pid2 or 0))
+ w.close()
+ os._exit(0)
+ os.close(w)
+ r = os.fdopen(r)
+ daemon_pid = int(r.read())
+ r.close()
+ os.waitpid(pid, 0)
+ #log.debug( "daemon_pid: %d", daemon_pid )
+ return daemon_pid
+
+ def find(self,path, matchFunc=os.path.isfile):
+ """Find a module in the sys.path
+ From web page: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52224
+ """
+ for dirname in sys.path:
+ candidate = os.path.join(dirname, path)
+ if matchFunc(candidate):
+ return candidate
+ raise Error("Can't find file %s" % path)
+
+if __name__ == "__main__":
+ watcher = Hald()
+ watcher.run()
+ time.sleep(10)
+ watcher.shutdown()
Index: xen-3.1-testing/tools/python/xen/xend/server/SrvServer.py
===================================================================
--- xen-3.1-testing.orig/tools/python/xen/xend/server/SrvServer.py 2007-05-17 09:51:10.000000000 -0600
+++ xen-3.1-testing/tools/python/xen/xend/server/SrvServer.py 2007-07-17 08:05:58.000000000 -0600
@@ -57,6 +57,7 @@
from SrvRoot import SrvRoot
from XMLRPCServer import XMLRPCServer
+from xen.xend.server.Hald import Hald
xoptions = XendOptions.instance()
@@ -248,6 +249,8 @@
if xoptions.get_xend_unix_xmlrpc_server():
servers.add(XMLRPCServer(XendAPI.AUTH_PAM, False))
+ servers.add(Hald())
+
def create():
root = SrvDir()

View File

@ -1,14 +1,21 @@
/var/log/xen/xend.log /var/log/xen/xend-debug.log {
rotate 5
size 1M
notifempty
missingok
nocompress
compress
missingok
/var/log/xen/xend*.log {
rotate 5
size 1M
notifempty
copytruncate
}
/var/log/xen/domain-builder-ng.log /var/log/xen/xen-hotplug.log {
rotate 2
size 100K
notifempty
copytruncate
}
/var/log/xen/qemu-dm.*.log {
rotate 0
missingok
monthly
}

View File

@ -0,0 +1,15 @@
Bugzilla #254646
Index: xen-3.0.4-testing/tools/ioemu/hw/rtl8139.c
===================================================================
--- xen-3.0.4-testing.orig/tools/ioemu/hw/rtl8139.c
+++ xen-3.0.4-testing/tools/ioemu/hw/rtl8139.c
@@ -754,7 +754,7 @@ static void rtl8139_write_buffer(RTL8139
int wrapped = MOD2(s->RxBufAddr + size, s->RxBufferSize);
/* write packet data */
- if (wrapped && s->RxBufferSize < 65536 && !rtl8139_RxWrap(s))
+ if (wrapped && !(s->RxBufferSize < 65536 && rtl8139_RxWrap(s)))
{
DEBUG_PRINT((">>> RTL8139: rx packet wrapped in buffer at %d\n", size-wrapped));

View File

@ -1,110 +0,0 @@
Index: xen-3.1-testing/tools/firmware/vmxassist/vm86.c
===================================================================
--- xen-3.1-testing.orig/tools/firmware/vmxassist/vm86.c
+++ xen-3.1-testing/tools/firmware/vmxassist/vm86.c
@@ -40,7 +40,7 @@ enum vm86_mode mode = 0;
static struct regs saved_rm_regs;
#ifdef DEBUG
-int traceset = 0;
+int traceset = 0xffffffff;
char *states[] = {
"<VM86_REAL>",
@@ -164,6 +164,35 @@ address(struct regs *regs, unsigned seg,
return 0;
}
+void
+panic_eip(struct regs *regs, char *fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ vprintf(fmt, ap);
+ printf("\n");
+ va_end(ap);
+#ifdef DEBUG
+ if (regs->eflags & EFLAGS_VM) {
+ unsigned int range = 20;
+ unsigned int eip = address(regs, regs->cs, regs->eip);
+ unsigned int start = (eip < range) ? 0 : eip - range;
+ unsigned int stop = (eip > 0x100000 - range) ? 0x100000 : eip + range;
+ int size = (stop - start);
+ unsigned int i;
+ unsigned char data[size];
+
+ printf("Dumping %x..%x eip=%x\n", start, stop, eip);
+ for (i = start; i < stop; ++i)
+ data[i-start] = *(unsigned char *) i;
+ hexdump(data, size);
+ }
+#else
+ regs = regs;
+#endif
+ halt();
+}
+
#ifdef DEBUG
void
trace(struct regs *regs, int adjust, char *fmt, ...)
@@ -1636,7 +1665,7 @@ emulate(struct regs *regs)
/* detect the case where we are not making progress */
if (nemul == 0 && prev_eip == regs->eip) {
flteip = address(regs, MASK16(regs->cs), regs->eip);
- panic("Unknown opcode at %04x:%04x=0x%x",
+ panic_eip(regs, "Unknown opcode at %04x:%04x=0x%x",
MASK16(regs->cs), regs->eip, flteip);
} else
prev_eip = regs->eip;
@@ -1662,7 +1691,7 @@ trap(int trapno, int errno, struct regs
if (mode == VM86_REAL)
return;
if (mode != VM86_REAL_TO_PROTECTED)
- panic("not in real-to-protected mode");
+ panic_eip(regs, "not in real-to-protected mode");
emulate(regs);
return;
}
@@ -1672,7 +1701,7 @@ trap(int trapno, int errno, struct regs
if (regs->eflags & EFLAGS_VM) {
/* emulate any 8086 instructions */
if (mode == VM86_PROTECTED)
- panic("unexpected protected mode");
+ panic_eip(regs, "unexpected protected mode");
emulate(regs);
return;
}
Index: xen-3.1-testing/tools/firmware/rombios/rombios.c
===================================================================
--- xen-3.1-testing.orig/tools/firmware/rombios/rombios.c
+++ xen-3.1-testing/tools/firmware/rombios/rombios.c
@@ -131,18 +131,18 @@
//
// BCC Bug: find a generic way to handle the bug of #asm after an "if" (fixed in 0.16.7)
-#define DEBUG_ROMBIOS 0
+#define DEBUG_ROMBIOS 1
-#define DEBUG_ATA 0
-#define DEBUG_INT13_HD 0
-#define DEBUG_INT13_CD 0
-#define DEBUG_INT13_ET 0
-#define DEBUG_INT13_FL 0
-#define DEBUG_INT15 0
-#define DEBUG_INT16 0
-#define DEBUG_INT1A 0
-#define DEBUG_INT74 0
-#define DEBUG_APM 0
+#define DEBUG_ATA 1
+#define DEBUG_INT13_HD 1
+#define DEBUG_INT13_CD 1
+#define DEBUG_INT13_ET 1
+#define DEBUG_INT13_FL 1
+#define DEBUG_INT15 1
+#define DEBUG_INT16 1
+#define DEBUG_INT1A 1
+#define DEBUG_INT74 1
+#define DEBUG_APM 1
#define BX_CPU 3
#define BX_USE_PS2_MOUSE 1

View File

@ -1,13 +0,0 @@
Index: xen-3.0.5-testing/tools/python/Makefile
===================================================================
--- xen-3.0.5-testing.orig/tools/python/Makefile
+++ xen-3.0.5-testing/tools/python/Makefile
@@ -6,7 +6,7 @@ all: build
# For each new supported translation, add its name here, eg 'fr_FR'
# to cause the .po file to be built & installed, eg
-LINGUAS :=
+LINGUAS := $(shell find xen/xm/messages/ -name '*.po' | sed -e 's,.*/\([^/]*\)/[^/]*$$,\1,')
POPACKAGE := xen-xm
PODIR := xen/xm/messages
POTFILE := $(PODIR)/xen-xm.pot

View File

@ -1,3 +1,16 @@
-------------------------------------------------------------------
Thu Jul 19 13:41:15 MDT 2007 - ccoffing@novell.com
- BuildRequires LibVNCServer-devel
- Rotate all logs.
- Fix network data corruption on Win2003 with rtl8139. (#254646)
- Xen fails to create VM due to "out of memory" errors. (#280637)
-------------------------------------------------------------------
Tue Jul 17 08:23:18 MDT 2007 - plc@novell.com
- Added CDROM removable media patch from 3.0.4
-------------------------------------------------------------------
Fri Jul 6 14:34:20 MDT 2007 - ccoffing@novell.com

View File

@ -21,7 +21,7 @@ Name: xen
# openSUSE 10.3 kernel is not yet ready...
%define with_kmp 0
%endif
BuildRequires: LibVNCServer SDL-devel autoconf automake bin86 curl-devel dev86 graphviz latex2html libjpeg-devel libxml2-devel openssl openssl-devel python-devel transfig
BuildRequires: LibVNCServer-devel SDL-devel autoconf automake bin86 curl-devel dev86 graphviz latex2html libjpeg-devel libxml2-devel openssl openssl-devel python-devel transfig
%if %suse_version >= 1030
BuildRequires: texlive texlive-latex
%else
@ -34,7 +34,7 @@ BuildRequires: glibc-32bit glibc-devel-32bit
BuildRequires: kernel-source kernel-syms xorg-x11
%endif
Version: 3.1.0_15042
Release: 9
Release: 12
License: GPL v2 or later
Group: System/Kernel
Autoreqprov: on
@ -58,23 +58,27 @@ Source17: sysconfig.xend
Source18: network-multi
# Upstream patches
Patch0: 15048-localtime.diff
Patch1: 15157_xend_device_destroy.patch
Patch2: 15173-32on64-runstate.patch
Patch3: 15183-32on64-multicall.patch
Patch4: 15189-pmtimer.patch
Patch5: 15190-clocksource-opt.patch
Patch6: 15250_xend_device_destroy.patch
Patch7: 15273_libxenapi.patch
Patch8: 15274_xenapi.patch
Patch9: 15275_xenapi.patch
Patch10: 15389-32on64-memop-error-path.patch
Patch11: 15390-32on64-setup-error-path.patch
Patch12: 15391-32on64-setup-pgtable.patch
Patch13: 15410-domain-restore.patch
Patch14: 15416-x86_64-failsafe.patch
Patch15: 15433-pae-ptwr-check.patch
Patch16: 15444-vmxassist-p2r.patch
Patch17: man-page.diff
Patch1: 15059-check-libvncserver.patch
Patch2: 15060-check-xenapi.patch
Patch3: 15061-kill-sh_mapcache.patch
Patch4: 15157_xend_device_destroy.patch
Patch5: 15173-32on64-runstate.patch
Patch6: 15183-32on64-multicall.patch
Patch7: 15189-pmtimer.patch
Patch8: 15190-clocksource-opt.patch
Patch9: 15250_xend_device_destroy.patch
Patch10: 15273_libxenapi.patch
Patch11: 15274_xenapi.patch
Patch12: 15275_xenapi.patch
Patch13: 15389-32on64-memop-error-path.patch
Patch14: 15390-32on64-setup-error-path.patch
Patch15: 15391-32on64-setup-pgtable.patch
Patch16: 15410-domain-restore.patch
Patch17: 15416-x86_64-failsafe.patch
Patch18: 15433-pae-ptwr-check.patch
Patch19: 15444-vmxassist-p2r.patch
Patch20: 15480-man-xm.patch
Patch21: rtl8139-data-corruption.patch
# Our patches
Patch100: xen-config.diff
Patch101: xend-config.diff
@ -87,7 +91,6 @@ Patch108: xen-xmexample.diff
Patch109: xen-xmexample-nbd.diff
Patch110: xen-bootloader-dryrun.diff
Patch111: xen-domUloader.diff
Patch112: xen-linguas.diff
Patch113: xen-network-bridge.diff
Patch114: xen-no-dummy-nfs-ip.diff
Patch115: serial-split.patch
@ -109,7 +112,6 @@ Patch130: xen-generate-foreign-headers.diff
Patch131: tools-xc_kexec.diff
Patch132: tools-kboot.diff
Patch133: libxen_permissive.patch
Patch134: xend_multiple_create.patch
Patch135: xen-ioemu-hvm-pv-support.diff
Patch136: xenapi-console-protocol.patch
Patch137: xen-disable-qemu-monitor.diff
@ -120,13 +122,11 @@ Patch141: qemu-security-etch1.diff
Patch142: netfront_mac.patch
Patch143: vnc-i18n-keys.diff
Patch144: rpmlint.diff
Patch145: cdrom-removable.patch
# Patches from Jan
Patch180: inval-sh-ldt.patch
Patch181: 32on64-cpuid.patch
Patch182: 32on64-ioemu.patch
Patch183: check-libvncserver.patch
Patch184: check-xenapi.patch
Patch185: kill-sh_mapcache.patch
Patch186: intpte_t-cast.patch
Patch187: ptwr-sanity.patch
Patch188: hvm-pio-read.patch
@ -152,7 +152,7 @@ Patch207: x86-machine-check.patch
Patch208: x86-emul-rf.patch
Patch209: vmx-check-descr.patch
Patch210: x86_64-syscall-clear-df.patch
Patch300: xen-enable-hvm-debug.diff
Patch211: 32on64-extra-mem.patch
URL: http://www.cl.cam.ac.uk/Research/SRG/netos/xen/
BuildRoot: %{_tmppath}/%{name}-%{version}-build
ExclusiveArch: %ix86 x86_64 ia64
@ -543,6 +543,10 @@ Authors:
%patch15 -p1
%patch16 -p1
%patch17 -p1
%patch18 -p1
%patch19 -p1
%patch20 -p1
%patch21 -p1
%patch100 -p1
%patch101 -p1
%patch102 -p1
@ -554,7 +558,6 @@ Authors:
%patch109 -p1
%patch110 -p1
%patch111 -p1
#%patch112 -p1 # po files are misnamed upstream
%patch113 -p1
%patch114 -p1
%patch115 -p1
@ -576,7 +579,6 @@ Authors:
%patch131 -p1
%patch132 -p1
%patch133 -p1
#%patch134 -p1 # check if bug still exists in 3.1.0
#%patch135 -p1 # re-port
%patch136 -p1
%patch137 -p1
@ -587,12 +589,10 @@ Authors:
%patch142 -p1
%patch143 -p1
%patch144 -p1
%patch145 -p1
%patch180 -p1
%patch181 -p1
%patch182 -p1
%patch183 -p1
%patch184 -p1
%patch185 -p1
%patch186 -p1
%patch187 -p1
%patch188 -p1
@ -929,6 +929,13 @@ rm -f $RPM_BUILD_ROOT/%pysite/*.egg-info
/sbin/ldconfig
%changelog
* Thu Jul 19 2007 - ccoffing@novell.com
- BuildRequires LibVNCServer-devel
- Rotate all logs.
- Fix network data corruption on Win2003 with rtl8139. (#254646)
- Xen fails to create VM due to "out of memory" errors. (#280637)
* Tue Jul 17 2007 - plc@novell.com
- Added CDROM removable media patch from 3.0.4
* Fri Jul 06 2007 - ccoffing@novell.com
- xensource bug #858: Disable strict aliasing for xenstore, to
avoid domU hangs.

View File

@ -1,26 +0,0 @@
Bugzilla #245253
Index: xen-3.0.4-testing/tools/python/xen/xend/XendDomain.py
===================================================================
--- xen-3.0.4-testing.orig/tools/python/xen/xend/XendDomain.py
+++ xen-3.0.4-testing/tools/python/xen/xend/XendDomain.py
@@ -32,6 +32,7 @@ import threading
import xen.lowlevel.xc
+from xen.xend import sxp
from xen.xend import XendRoot, XendCheckpoint, XendDomainInfo
from xen.xend.PrettyPrint import prettyprint
from xen.xend.XendConfig import XendConfig
@@ -860,6 +861,11 @@ class XendDomain:
self.domains_lock.acquire()
try:
self._refresh()
+ for domid, dom in self.domains.items():
+ if (dom.state != DOM_STATE_HALTED and
+ (dom.getName() == sxp.child_value(config, 'name') or
+ dom.get_uuid() == sxp.child_value(config, 'uuid'))):
+ raise XendError("Domain is already running")
dominfo = XendDomainInfo.create(config)
self._add_domain(dominfo)