Various fixes to some source files to compile as a stubdomain.
Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
---
block-vbd.c | 3 ++-
exec-all.h | 6 +++++-
hw/scsi-disk.c | 2 +-
hw/vga.c | 3 +++
i386-dm/exec-dm.c | 4 ++--
vl.c | 32 ++++++++++++++++++++++++--------
xen-vl-extra.c | 17 +++++++++++++++++
xenfbfront.c | 6 ++++--
xenstore.c | 3 +--
9 files changed, 59 insertions(+), 17 deletions(-)
diff --git a/block-vbd.c b/block-vbd.c
index 10f7a21..9c74952 100644
--- a/block-vbd.c
+++ b/block-vbd.c
@@ -22,7 +22,8 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
-#include "vl.h"
+#include "qemu-common.h"
+#include "audio/sys-queue.h"
#include "block_int.h"
#include <assert.h>
#include <xenbus.h>
diff --git a/exec-all.h b/exec-all.h
index 8d4e6f6..f9475df 100644
--- a/exec-all.h
+++ b/exec-all.h
@@ -307,7 +307,9 @@ extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];
#include <spinlock.h>
-#elif defined(__hppa__)
+#else
+
+#if defined(__hppa__)
typedef int spinlock_t[4];
@@ -519,6 +521,8 @@ static inline int spin_trylock(spinlock_t *lock)
}
#endif
+#endif
+
extern spinlock_t tb_lock;
extern int tb_invalidated_flag;
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index 3f78166..e3d8069 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -36,7 +36,7 @@ do { fprintf(stderr, "scsi-disk: " fmt , ##args); } while (0)
#ifdef CONFIG_STUBDOM
#include <xen/io/blkif.h>
-#define SCSI_DMA_BUF_SIZE (BLKIF_MAX_SEGMENTS_PER_REQUEST *
TARGET_PAGE_SIZE)
+#define SCSI_DMA_BUF_SIZE ((BLKIF_MAX_SEGMENTS_PER_REQUEST - 1) * PAGE_SIZE)
#else
#define SCSI_DMA_BUF_SIZE 131072
#endif
diff --git a/hw/vga.c b/hw/vga.c
index 9e0dea8..65c710a 100644
--- a/hw/vga.c
+++ b/hw/vga.c
@@ -27,6 +27,9 @@
#include "pci.h"
#include "vga_int.h"
#include <sys/mman.h>
+#include "sysemu.h"
+#include "qemu-xen.h"
+#include "exec-all.h"
//#define DEBUG_VGA
//#define DEBUG_VGA_MEM
diff --git a/i386-dm/exec-dm.c b/i386-dm/exec-dm.c
index d511021..dec4aa8 100644
--- a/i386-dm/exec-dm.c
+++ b/i386-dm/exec-dm.c
@@ -574,8 +574,8 @@ void cpu_physical_memory_rw(target_phys_addr_t _addr,
uint8_t *buf,
#ifdef CONFIG_STUBDOM
if (logdirty_bitmap != NULL)
xc_hvm_modified_memory(xc_handle, domid, _addr >> TARGET_PAGE_BITS,
- (_addr + _len + TARGET_PAGE_SIZE - 1) >> TARGET_PAGE_BITS
- - _addr >> TARGET_PAGE_BITS);
+ ((_addr + _len + TARGET_PAGE_SIZE - 1) >> TARGET_PAGE_BITS)
+ - (_addr >> TARGET_PAGE_BITS));
#endif
mapcache_unlock();
diff --git a/vl.c b/vl.c
index 3f14553..e215af7 100644
--- a/vl.c
+++ b/vl.c
@@ -38,6 +38,7 @@
#include "qemu-char.h"
#include "block.h"
#include "audio/audio.h"
+#include "qemu-xen.h"
#include <unistd.h>
#include <stdlib.h>
@@ -114,6 +115,7 @@ int inet_aton(const char *cp, struct in_addr *ia);
#include <mmsystem.h>
#define getopt_long_only getopt_long
#define memalign(align, size) malloc(size)
+#define NO_UNIX_SOCKETS 1
#endif
#include "qemu_socket.h"
@@ -3104,7 +3106,7 @@ static void udp_chr_update_read_handler(CharDriverState
*chr)
}
int parse_host_port(struct sockaddr_in *saddr, const char *str);
-#ifndef _WIN32
+#ifndef NO_UNIX_SOCKETS
static int parse_unix_path(struct sockaddr_un *uaddr, const char *str);
#endif
int parse_host_src_port(struct sockaddr_in *haddr,
@@ -3312,7 +3314,7 @@ static void tcp_chr_accept(void *opaque)
CharDriverState *chr = opaque;
TCPCharDriver *s = chr->opaque;
struct sockaddr_in saddr;
-#ifndef _WIN32
+#ifndef NO_UNIX_SOCKETS
struct sockaddr_un uaddr;
#endif
struct sockaddr *addr;
@@ -3320,7 +3322,7 @@ static void tcp_chr_accept(void *opaque)
int fd;
for(;;) {
-#ifndef _WIN32
+#ifndef NO_UNIX_SOCKETS
if (s->is_unix) {
len = sizeof(uaddr);
addr = (struct sockaddr *)&uaddr;
@@ -3369,13 +3371,13 @@ static CharDriverState *qemu_chr_open_tcp(const char
*host_str,
int do_nodelay = 0;
const char *ptr;
struct sockaddr_in saddr;
-#ifndef _WIN32
+#ifndef NO_UNIX_SOCKETS
struct sockaddr_un uaddr;
#endif
struct sockaddr *addr;
socklen_t addrlen;
-#ifndef _WIN32
+#ifndef NO_UNIX_SOCKETS
if (is_unix) {
addr = (struct sockaddr *)&uaddr;
addrlen = sizeof(uaddr);
@@ -3414,7 +3416,7 @@ static CharDriverState *qemu_chr_open_tcp(const char
*host_str,
if (!s)
goto fail;
-#ifndef _WIN32
+#ifndef NO_UNIX_SOCKETS
if (is_unix)
fd = socket(PF_UNIX, SOCK_STREAM, 0);
else
@@ -3439,7 +3441,7 @@ static CharDriverState *qemu_chr_open_tcp(const char
*host_str,
if (is_listen) {
/* allow fast reuse */
-#ifndef _WIN32
+#ifndef NO_UNIX_SOCKETS
if (is_unix) {
char path[109];
strncpy(path, uaddr.sun_path, 108);
@@ -4270,7 +4272,7 @@ static int tap_open(char *ifname, int ifname_size)
fcntl(fd, F_SETFL, O_NONBLOCK);
return fd;
}
-#else
+#elif defined(__linux__)
static int tap_open(char *ifname, int ifname_size)
{
struct ifreq ifr;
@@ -8699,7 +8701,17 @@ int main(int argc, char **argv)
bdrv_init();
xc_handle = xc_interface_open();
+#ifdef CONFIG_STUBDOM
+ {
+ char *domid_s, *msg;
+ if ((msg = xenbus_read(XBT_NIL, "domid", &domid_s)))
+ fprintf(stderr,"Can not read our own domid: %s\n", msg);
+ else
+ xenstore_parse_domain_config(atoi(domid_s));
+ }
+#else
xenstore_parse_domain_config(domid);
+#endif /* CONFIG_STUBDOM */
/* we always create the cdrom drive, even if no disk is there */
@@ -8729,6 +8741,10 @@ int main(int argc, char **argv)
/* terminal init */
memset(&display_state, 0, sizeof(display_state));
+#ifdef CONFIG_STUBDOM
+ if (xenfb_pv_display_init(ds) == 0) {
+ } else
+#endif
if (nographic) {
if (curses) {
fprintf(stderr, "fatal: -nographic can't be used with -curses\n");
diff --git a/xen-vl-extra.c b/xen-vl-extra.c
index 4baada2..8c3dc6b 100644
--- a/xen-vl-extra.c
+++ b/xen-vl-extra.c
@@ -88,3 +88,20 @@ void do_loadvm(const char *name)
struct qemu_alarm_timer;
static int unix_start_timer(struct qemu_alarm_timer *t) { return 0; }
static void unix_stop_timer(struct qemu_alarm_timer *t) { }
+
+#ifdef CONFIG_STUBDOM
+#include <netfront.h>
+static int tap_open(char *ifname, int ifname_size)
+{
+ char nodename[64];
+ static int num = 1; // 0 is for our own TCP/IP networking
+ snprintf(nodename, sizeof(nodename), "device/vif/%d", num++);
+ return netfront_tap_open(nodename);
+}
+
+#undef DEFAULT_NETWORK_SCRIPT
+#define DEFAULT_NETWORK_SCRIPT ""
+#undef DEFAULT_NETWORK_DOWN_SCRIPT
+#define DEFAULT_NETWORK_DOWN_SCRIPT ""
+#endif
+
diff --git a/xenfbfront.c b/xenfbfront.c
index 16691fd..3a67ada 100644
--- a/xenfbfront.c
+++ b/xenfbfront.c
@@ -4,11 +4,12 @@
#include <semaphore.h>
#include <sched.h>
#include <fbfront.h>
+#include <hw/hw.h>
+#include <hw/pc.h>
+#include <console.h>
#include <hw/xenfb.h>
-#include "vl.h"
-
typedef struct XenFBState {
struct semaphore kbd_sem;
struct kbdfront_dev *kbd_dev;
@@ -70,6 +71,7 @@ static void xenfb_pv_resize_shared(DisplayState *ds, int w,
int h, int depth, in
if (ds->shared_buf) {
offset = pixels - xs->vga_vram;
ds->data = pixels;
+ fbfront_resize(fb_dev, ds->width, ds->height, ds->linesize, ds->depth,
offset);
} else {
ds->data = xs->nonshared_vram;
fbfront_resize(fb_dev, w, h, linesize, ds->depth, VGA_RAM_SIZE);
diff --git a/xenstore.c b/xenstore.c
index c0fe95a..99792c4 100644
--- a/xenstore.c
+++ b/xenstore.c
@@ -305,8 +305,7 @@ void xenstore_parse_domain_config(int hvm_domid)
continue;
if (bdrv_open2(bs, buf, 0 /* snapshot */, &bdrv_vbd) == 0) {
pstrcpy(bs->filename, sizeof(bs->filename), params);
- continue;
- }
+ } else
#endif
if (params[0]) {
--
1.5.4.3
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|