All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Christoph Egger" <Christoph.Egger@amd.com>
To: xen-devel@lists.xensource.com
Subject: [PATCH][TOOLS] ioemu: Build fixes for BSD and bug fixes from BSD
Date: Thu, 27 Sep 2007 13:35:05 +0200	[thread overview]
Message-ID: <200709271335.05614.Christoph.Egger@amd.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 696 bytes --]


Hi!

Attached patch makes ioemu build on *BSD.
It also applies bug fixes from *BSD for Linux and *BSD :-)

Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>

P.S.: Could someone with contact to qemu people make this patch
go upstream to qemu, please?


-- 
AMD Saxony, Dresden, Germany
Operating System Research Center

Legal Information:
AMD Saxony Limited Liability Company & Co. KG
Sitz (Geschäftsanschrift):
   Wilschdorfer Landstr. 101, 01109 Dresden, Deutschland
Registergericht Dresden: HRA 4896
vertretungsberechtigter Komplementär:
   AMD Saxony LLC (Sitz Wilmington, Delaware, USA)
Geschäftsführer der AMD Saxony LLC:
   Dr. Hans-R. Deppe, Thomas McCoy

[-- Attachment #2: tools_ioemu.diff --]
[-- Type: text/plain, Size: 20898 bytes --]

diff -r 0b04a48f65cc tools/ioemu/aes.c
--- a/tools/ioemu/aes.c	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/aes.c	Thu Sep 27 11:50:43 2007 +0000
@@ -30,7 +30,9 @@
 #include "vl.h"
 #include "aes.h"
 
+#ifndef NDEBUG
 #define NDEBUG
+#endif
 #include <assert.h>
 
 typedef uint32_t u32;
diff -r 0b04a48f65cc tools/ioemu/audio/audio.c
--- a/tools/ioemu/audio/audio.c	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/audio/audio.c	Thu Sep 27 11:50:43 2007 +0000
@@ -207,7 +207,7 @@ static char *audio_alloc_prefix (const c
         strcat (r, s);
 
         for (i = 0; i < len; ++i) {
-            u[i] = toupper (u[i]);
+            u[i] = toupper ((uint8_t)u[i]);
         }
     }
     return r;
@@ -446,7 +446,7 @@ static void audio_process_options (const
 
         /* copy while upper-casing, including trailing zero */
         for (i = 0; i <= preflen; ++i) {
-            optname[i + sizeof (qemu_prefix) - 1] = toupper (prefix[i]);
+            optname[i + sizeof (qemu_prefix) - 1] = toupper ((uint8_t)prefix[i]);
         }
         strcat (optname, "_");
         strcat (optname, opt->name);
diff -r 0b04a48f65cc tools/ioemu/audio/mixeng.c
--- a/tools/ioemu/audio/mixeng.c	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/audio/mixeng.c	Thu Sep 27 11:50:43 2007 +0000
@@ -102,6 +102,7 @@
 #undef SHIFT
 
 t_sample *mixeng_conv[2][2][2][2] = {
+#ifndef _BSD
     {
         {
             {
@@ -146,9 +147,11 @@ t_sample *mixeng_conv[2][2][2][2] = {
             }
         }
     }
+#endif /* !_BSD */
 };
 
 f_sample *mixeng_clip[2][2][2][2] = {
+#ifndef _BSD
     {
         {
             {
@@ -193,6 +196,7 @@ f_sample *mixeng_clip[2][2][2][2] = {
             }
         }
     }
+#endif /* !_BSD */
 };
 
 /*
diff -r 0b04a48f65cc tools/ioemu/audio/ossaudio.c
--- a/tools/ioemu/audio/ossaudio.c	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/audio/ossaudio.c	Thu Sep 27 11:50:43 2007 +0000
@@ -21,10 +21,15 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
+#include <stdlib.h>
 #include <sys/mman.h>
 #include <sys/types.h>
 #include <sys/ioctl.h>
+#if defined(__OpenBSD__)
+#include <soundcard.h>
+#else
 #include <sys/soundcard.h>
+#endif
 #include "vl.h"
 
 #define AUDIO_CAP "oss"
@@ -231,7 +236,7 @@ static int oss_open (int in, struct oss_
         goto err;
     }
 
-    if (ioctl (fd, SNDCTL_DSP_NONBLOCK)) {
+    if (ioctl (fd, SNDCTL_DSP_NONBLOCK, NULL)) {
         oss_logerr2 (errno, typ, "Failed to set non-blocking mode\n");
         goto err;
     }
diff -r 0b04a48f65cc tools/ioemu/block-qcow2.c
--- a/tools/ioemu/block-qcow2.c	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/block-qcow2.c	Thu Sep 27 11:50:43 2007 +0000
@@ -1884,6 +1884,8 @@ static int grow_refcount_table(BlockDriv
     int new_table_size, new_table_size2, refcount_table_clusters, i, ret;
     uint64_t *new_table;
     int64_t table_offset;
+    int old_table_size;
+    int64_t old_table_offset;
     uint64_t data64;
     uint32_t data32;
 
@@ -1931,10 +1933,14 @@ static int grow_refcount_table(BlockDriv
                     &data32, sizeof(data32)) != sizeof(data32))
         goto fail;
     qemu_free(s->refcount_table);
+    old_table_offset = s->refcount_table_offset;
+    old_table_size = s->refcount_table_size;
     s->refcount_table = new_table;
     s->refcount_table_size = new_table_size;
+    s->refcount_table_offset = table_offset;
 
     update_refcount(bs, table_offset, new_table_size2, 1);
+    free_clusters(bs, old_table_offset, old_table_size * sizeof(uint64_t));
     return 0;
  fail:
     free_clusters(bs, table_offset, new_table_size2);
diff -r 0b04a48f65cc tools/ioemu/block-raw.c
--- a/tools/ioemu/block-raw.c	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/block-raw.c	Thu Sep 27 11:50:43 2007 +0000
@@ -53,8 +53,13 @@
 #include <linux/cdrom.h>
 #include <linux/fd.h>
 #endif
-#ifdef __FreeBSD__
+#if defined(__FreeBSD__)
 #include <sys/disk.h>
+#endif
+#if defined(__OpenBSD__)
+#include <sys/ioctl.h>
+#include <sys/disklabel.h>
+#include <sys/dkio.h>
 #endif
 
 //#define DEBUG_FLOPPY
@@ -496,6 +501,23 @@ static int raw_truncate(BlockDriverState
     return 0;
 }
 
+#ifdef __OpenBSD__
+static int64_t  raw_getlength(BlockDriverState *bs)
+{
+	int fd = ((BDRVRawState*)bs->opaque)->fd;
+	struct stat st;
+	if(fstat(fd, &st))
+	  return -1;
+	if(S_ISCHR(st.st_mode) || S_ISBLK(st.st_mode)){
+	  struct disklabel dl;
+	  if(ioctl(fd, DIOCGDINFO, &dl))
+	    return -1;
+	  return (uint64_t)dl.d_secsize *
+		dl.d_partitions[DISKPART(st.st_rdev)].p_size;
+	}else
+	  return st.st_size;
+}
+#else /* !__OpenBSD__ */
 static int64_t  raw_getlength(BlockDriverState *bs)
 {
     BDRVRawState *s = bs->opaque;
@@ -542,6 +564,7 @@ static int64_t  raw_getlength(BlockDrive
     }
     return size;
 }
+#endif
 
 static int raw_create(const char *filename, int64_t total_size,
                       const char *backing_file, int flags)
diff -r 0b04a48f65cc tools/ioemu/block-vvfat.c
--- a/tools/ioemu/block-vvfat.c	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/block-vvfat.c	Thu Sep 27 11:50:43 2007 +0000
@@ -1017,7 +1017,7 @@ DLOG(if (stderr == NULL) {
 
     i = strrchr(dirname, ':') - dirname;
     assert(i >= 3);
-    if (dirname[i-2] == ':' && isalpha(dirname[i-1]))
+    if (dirname[i-2] == ':' && isalpha((uint8_t)dirname[i-1]))
 	/* workaround for DOS drive names */
 	dirname += i-1;
     else
diff -r 0b04a48f65cc tools/ioemu/bswap.h
--- a/tools/ioemu/bswap.h	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/bswap.h	Thu Sep 27 11:50:43 2007 +0000
@@ -4,6 +4,11 @@
 #include "config-host.h"
 
 #include <inttypes.h>
+
+#ifdef _BSD
+#include <sys/endian.h>
+#include <sys/types.h>
+#else
 
 #ifdef HAVE_BYTESWAP_H
 #include <byteswap.h>
@@ -73,6 +78,8 @@ static inline void bswap64s(uint64_t *s)
     *s = bswap64(*s);
 }
 
+#endif /* _BSD */
+
 #if defined(WORDS_BIGENDIAN)
 #define be_bswap(v, size) (v)
 #define le_bswap(v, size) bswap ## size(v)
diff -r 0b04a48f65cc tools/ioemu/cpu-all.h
--- a/tools/ioemu/cpu-all.h	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/cpu-all.h	Thu Sep 27 11:50:43 2007 +0000
@@ -1010,13 +1010,22 @@ static inline int64_t cpu_get_real_ticks
 #endif
 }
 #else
-/* The host CPU doesn't have an easily accessible cycle counter.
-   Just return a monotonically increasing vlue.  This will be totally wrong,
-   but hopefully better than nothing.  */
+
+#include <sys/time.h>
+#include <time.h>
+
 static inline int64_t cpu_get_real_ticks (void)
 {
-    static int64_t ticks = 0;
-    return ticks++;
+	struct timeval tv;
+	static int64_t i = 0;
+	int64_t j;
+	
+	gettimeofday(&tv, NULL);
+	do {
+		j = (tv.tv_sec * (uint64_t) 1000000) + tv.tv_usec;
+	} while (i == j);
+	i = j;
+	return j;
 }
 #endif
 
diff -r 0b04a48f65cc tools/ioemu/cutils.c
--- a/tools/ioemu/cutils.c	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/cutils.c	Thu Sep 27 11:50:43 2007 +0000
@@ -23,7 +23,7 @@
  */
 #include "vl.h"
 
-void pstrcpy(char *buf, int buf_size, const char *str)
+void pstrcpy(char *buf, size_t buf_size, const char *str)
 {
     int c;
     char *q = buf;
@@ -41,7 +41,7 @@ void pstrcpy(char *buf, int buf_size, co
 }
 
 /* strcat and truncate. */
-char *pstrcat(char *buf, int buf_size, const char *s)
+char *pstrcat(char *buf, size_t buf_size, const char *s)
 {
     int len;
     len = strlen(buf);
@@ -72,7 +72,7 @@ int stristart(const char *str, const cha
     p = str;
     q = val;
     while (*q != '\0') {
-        if (toupper(*p) != toupper(*q))
+        if (toupper((uint8_t)*p) != toupper((uint8_t)*q))
             return 0;
         p++;
         q++;
diff -r 0b04a48f65cc tools/ioemu/dis-asm.h
--- a/tools/ioemu/dis-asm.h	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/dis-asm.h	Thu Sep 27 11:50:43 2007 +0000
@@ -13,6 +13,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <inttypes.h>
+#include "config.h"
 
 #define PARAMS(x) x
 typedef void *PTR;
diff -r 0b04a48f65cc tools/ioemu/hw/acpi.c
--- a/tools/ioemu/hw/acpi.c	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/hw/acpi.c	Thu Sep 27 11:50:43 2007 +0000
@@ -473,7 +473,7 @@ void piix4_pm_init(PCIBus *bus, int devf
 {
     PIIX4PMState *s;
     uint8_t *pci_conf;
-    uint32_t pm_io_base, smb_io_base;
+    uint32_t smb_io_base;
 
     s = (PIIX4PMState *)pci_register_device(bus,
                                          "PM", sizeof(PIIX4PMState),
diff -r 0b04a48f65cc tools/ioemu/hw/fdc.c
--- a/tools/ioemu/hw/fdc.c	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/hw/fdc.c	Thu Sep 27 11:50:43 2007 +0000
@@ -176,7 +176,7 @@ typedef struct fd_format_t {
     uint8_t last_sect;
     uint8_t max_track;
     uint8_t max_head;
-    const unsigned char *str;
+    const char *str;
 } fd_format_t;
 
 static fd_format_t fd_formats[] = {
diff -r 0b04a48f65cc tools/ioemu/hw/ne2000.c
--- a/tools/ioemu/hw/ne2000.c	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/hw/ne2000.c	Thu Sep 27 11:50:43 2007 +0000
@@ -207,7 +207,7 @@ static int ne2000_buffer_full(NE2000Stat
 
     index = s->curpag << 8;
     boundary = s->boundary << 8;
-    if (index <= boundary)
+    if (index < boundary)
         avail = boundary - index;
     else
         avail = (s->stop - s->start) - (index - boundary);
diff -r 0b04a48f65cc tools/ioemu/hw/pc.c
--- a/tools/ioemu/hw/pc.c	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/hw/pc.c	Thu Sep 27 11:50:43 2007 +0000
@@ -480,7 +480,9 @@ static void pc_init1(uint64_t ram_size, 
     int piix3_devfn = -1;
     CPUState *env;
     NICInfo *nd;
+#ifdef CONFIG_PASSTHROUGH
     int rc;
+#endif
 
     linux_boot = (kernel_filename != NULL);
 
@@ -782,7 +784,7 @@ static void pc_init1(uint64_t ram_size, 
 #if 0
     /* ??? Need to figure out some way for the user to
        specify SCSI devices.  */
-    if (pci_enabled) {
+    if (pci_enabled && scsi_enabled) {
         void *scsi;
         BlockDriverState *bdrv;
 
diff -r 0b04a48f65cc tools/ioemu/monitor.c
--- a/tools/ioemu/monitor.c	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/monitor.c	Thu Sep 27 11:50:43 2007 +0000
@@ -1890,7 +1890,7 @@ static int get_str(char *buf, int buf_si
 
     q = buf;
     p = *pp;
-    while (isspace(*p))
+    while (isspace((uint8_t)*p))
         p++;
     if (*p == '\0') {
     fail:
@@ -1935,7 +1935,7 @@ static int get_str(char *buf, int buf_si
         }
         p++;
     } else {
-        while (*p != '\0' && !isspace(*p)) {
+        while (*p != '\0' && !isspace((uint8_t)*p)) {
             if ((q - buf) < buf_size - 1) {
                 *q++ = *p;
             }
@@ -1975,12 +1975,12 @@ static void monitor_handle_command(const
     /* extract the command name */
     p = cmdline;
     q = cmdname;
-    while (isspace(*p))
+    while (isspace((uint8_t)*p))
         p++;
     if (*p == '\0')
         return;
     pstart = p;
-    while (*p != '\0' && *p != '/' && !isspace(*p))
+    while (*p != '\0' && *p != '/' && !isspace((uint8_t)*p))
         p++;
     len = p - pstart;
     if (len > sizeof(cmdname) - 1)
@@ -2016,7 +2016,7 @@ static void monitor_handle_command(const
                 int ret;
                 char *str;
                 
-                while (isspace(*p)) 
+                while (isspace((uint8_t)*p)) 
                     p++;
                 if (*typestr == '?') {
                     typestr++;
@@ -2195,7 +2195,7 @@ static void monitor_handle_command(const
                 c = *typestr++;
                 if (c == '\0')
                     goto bad_type;
-                while (isspace(*p)) 
+                while (isspace((uint8_t)*p)) 
                     p++;
                 has_option = 0;
                 if (*p == '-') {
@@ -2225,7 +2225,7 @@ static void monitor_handle_command(const
         }
     }
     /* check that all arguments were parsed */
-    while (isspace(*p))
+    while (isspace((uint8_t)*p))
         p++;
     if (*p != '\0') {
         term_printf("%s: extraneous characters at the end of line\n", 
diff -r 0b04a48f65cc tools/ioemu/osdep.h
--- a/tools/ioemu/osdep.h	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/osdep.h	Thu Sep 27 11:50:43 2007 +0000
@@ -2,6 +2,10 @@
 #define QEMU_OSDEP_H
 
 #include <stdarg.h>
+#ifdef __OpenBSD__
+#include <sys/types.h>
+#include <sys/signal.h>
+#endif
 
 #define qemu_printf printf
 
diff -r 0b04a48f65cc tools/ioemu/target-i386-dm/exec-dm.c
--- a/tools/ioemu/target-i386-dm/exec-dm.c	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/target-i386-dm/exec-dm.c	Thu Sep 27 11:50:43 2007 +0000
@@ -168,8 +168,8 @@ void cpu_set_log_filename(const char *fi
 #else
     setvbuf(logfile, NULL, _IOLBF, 0);
 #endif
-    stdout = logfile;
-    stderr = logfile;
+    dup2(fileno(logfile), 1);
+    dup2(fileno(logfile), 2);
 }
 
 /* mask must never be zero, except for A20 change call */
diff -r 0b04a48f65cc tools/ioemu/vl.c
--- a/tools/ioemu/vl.c	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/vl.c	Thu Sep 27 11:50:43 2007 +0000
@@ -24,6 +24,7 @@
 #include "vl.h"
 
 #include <unistd.h>
+#include <stdlib.h>
 #include <fcntl.h>
 #include <signal.h>
 #include <time.h>
@@ -38,22 +39,29 @@
 #include <sys/poll.h>
 #include <sys/mman.h>
 #include <sys/ioctl.h>
+#include <sys/resource.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
+#include <net/if.h>
+#if defined(__NetBSD__)
+#include <net/if_tap.h>
+#endif
+#if defined(__linux__) || defined(__Linux__)
+#include <linux/if_tun.h>
+#endif
 #include <arpa/inet.h>
 #include <dirent.h>
 #include <netdb.h>
 #ifdef _BSD
 #include <sys/stat.h>
-#ifndef __APPLE__
+#ifndef _BSD
 #include <libutil.h>
+#else
+#include <util.h>
 #endif
 #else
 #ifndef __sun__
-#include <linux/if.h>
-#include <linux/if_tun.h>
 #include <pty.h>
-#include <malloc.h>
 #include <linux/rtc.h>
 #include <linux/ppdev.h>
 #endif
@@ -65,7 +73,6 @@
 #endif
 
 #ifdef _WIN32
-#include <malloc.h>
 #include <sys/timeb.h>
 #include <windows.h>
 #define getopt_long_only getopt_long
@@ -91,7 +98,11 @@
 
 #include <xen/hvm/params.h>
 #define DEFAULT_NETWORK_SCRIPT "/etc/xen/qemu-ifup"
+#ifdef _BSD
+#define DEFAULT_BRIDGE "bridge0"
+#else 
 #define DEFAULT_BRIDGE "xenbr0"
+#endif
 #ifdef __sun__
 #define SMBD_COMMAND "/usr/sfw/sbin/smbd"
 #else
@@ -1794,7 +1805,7 @@ static int store_dev_info(char *devName,
     return 0;
 }
 
-#if defined(__linux__)
+#if defined(__linux__) || defined(__NetBSD__) || defined(__OpenBSD__)
 static CharDriverState *qemu_chr_open_pty(void)
 {
     struct termios tty;
@@ -1949,6 +1960,7 @@ static CharDriverState *qemu_chr_open_tt
     return chr;
 }
 
+#if defined(__linux__)
 static int pp_ioctl(CharDriverState *chr, int cmd, void *arg)
 {
     int fd = (int)chr->opaque;
@@ -2013,13 +2025,14 @@ static CharDriverState *qemu_chr_open_pp
 
     return chr;
 }
+#endif /* __linux__ */
 
 #else
 static CharDriverState *qemu_chr_open_pty(void)
 {
     return NULL;
 }
-#endif
+#endif /* __linux__ || __NetBSD__ || __OpenBSD__ */
 
 #endif /* !defined(_WIN32) */
 
@@ -2958,7 +2971,7 @@ static int parse_macaddr(uint8_t *macadd
     return 0;
 }
 
-static int get_str_sep(char *buf, int buf_size, const char **pp, int sep)
+static int get_str_sep(char *buf, size_t buf_size, const char **pp, int sep)
 {
     const char *p, *p1;
     int len;
@@ -3031,7 +3044,7 @@ int parse_host_port(struct sockaddr_in *
     if (buf[0] == '\0') {
         saddr->sin_addr.s_addr = 0;
     } else {
-        if (isdigit(buf[0])) {
+        if (isdigit((uint8_t)buf[0])) {
             if (!inet_aton(buf, &saddr->sin_addr))
                 return -1;
         } else {
@@ -3373,18 +3386,30 @@ static int tap_open(char *ifname, int if
 static int tap_open(char *ifname, int ifname_size)
 {
     int fd;
+#ifndef TAPGIFNAME
     char *dev;
     struct stat s;
+#endif
+    struct ifreq ifr;
 
     fd = open("/dev/tap", O_RDWR);
     if (fd < 0) {
-        fprintf(stderr, "warning: could not open /dev/tap: no virtual network emulation\n");
+        fprintf(stderr, "warning: could not open /dev/tap: no virtual network emulation %s\n", strerror(errno));
         return -1;
     }
 
+#ifdef TAPGIFNAME
+    if (ioctl (fd, TAPGIFNAME, (void*)&ifr) < 0) {
+       fprintf(stderr, "warning: could not open get tap name: %s\n",
+           strerror(errno));
+       return -1;
+    }
+    pstrcpy(ifname, ifname_size, ifr.ifr_name);
+#else
     fstat(fd, &s);
     dev = devname(s.st_rdev, S_IFCHR);
     pstrcpy(ifname, ifname_size, dev);
+#endif
 
     fcntl(fd, F_SETFL, O_NONBLOCK);
     return fd;
@@ -3434,6 +3459,8 @@ static int net_tap_init(VLANState *vlan,
     char *args[4];
     char **parg;
     char ifname[128];
+
+    memset(ifname, 0, sizeof(ifname));
 
     if (ifname1 != NULL)
         pstrcpy(ifname, sizeof(ifname), ifname1);
@@ -3611,7 +3638,7 @@ static int net_socket_mcast_create(struc
 
     val = 1;
     ret=setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, 
-                   (const char *)&val, sizeof(val));
+                   (const char *)&val, sizeof(char));
     if (ret < 0) {
 	perror("setsockopt(SOL_SOCKET, SO_REUSEADDR)");
 	goto fail;
@@ -3893,7 +3920,7 @@ static int net_socket_mcast_init(VLANSta
 
 }
 
-static int get_param_value(char *buf, int buf_size,
+static int get_param_value(char *buf, size_t buf_size,
                            const char *tag, const char *str)
 {
     const char *p;
@@ -4019,6 +4046,10 @@ static int net_client_init(const char *s
         char setup_script[1024];
         char bridge[16];
         int fd;
+
+	memset(ifname, 0, sizeof(ifname));
+	memset(setup_script, 0, sizeof(setup_script));
+
         if (get_param_value(buf, sizeof(buf), "fd", p) > 0) {
             fd = strtol(buf, NULL, 0);
             ret = -1;
@@ -6914,7 +6945,6 @@ static int qemu_map_cache_init(void)
     nr_buckets = (((MAX_MCACHE_SIZE >> PAGE_SHIFT) +
                    (1UL << (MCACHE_BUCKET_SHIFT - PAGE_SHIFT)) - 1) >>
                   (MCACHE_BUCKET_SHIFT - PAGE_SHIFT));
-    fprintf(logfile, "qemu_map_cache_init nr_buckets = %lx\n", nr_buckets);
 
     /*
      * Use mmap() directly: lets us allocate a big hash table with no up-front
@@ -6923,8 +6953,9 @@ static int qemu_map_cache_init(void)
      */
     size = nr_buckets * sizeof(struct map_cache);
     size = (size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1);
+    fprintf(logfile, "qemu_map_cache_init nr_buckets = %lx size %lu\n", nr_buckets, size);
     mapcache_entry = mmap(NULL, size, PROT_READ|PROT_WRITE,
-                          MAP_SHARED|MAP_ANONYMOUS, 0, 0);
+                          MAP_SHARED|MAP_ANON, -1, 0);
     if (mapcache_entry == MAP_FAILED) {
         errno = ENOMEM;
         return -1;
@@ -7061,6 +7092,7 @@ int main(int argc, char **argv)
     unsigned long ioreq_pfn;
     extern void *shared_page;
     extern void *buffered_io_page;
+    struct rlimit rl;
 #ifdef __ia64__
     unsigned long nr_pages;
     xen_pfn_t *page_array;
@@ -7069,6 +7101,32 @@ int main(int argc, char **argv)
     sigset_t set;
     char qemu_dm_logfilename[128];
     const char *direct_pci = NULL;
+
+    /* XXX required for now */
+    if (setenv("PTHREAD_DIAGASSERT", "A", 1) != 0)
+       perror("setenv");
+    if (getrlimit(RLIMIT_STACK, &rl) != 0) {
+       perror("getrlimit(RLIMIT_STACK)");
+       exit(1);
+    }
+    rl.rlim_cur = rl.rlim_max;
+    if (setrlimit(RLIMIT_STACK, &rl) != 0)
+       perror("setrlimit(RLIMIT_STACK)");
+    if (getrlimit(RLIMIT_DATA, &rl) != 0) {
+       perror("getrlimit(RLIMIT_DATA)");
+       exit(1);
+    }
+    rl.rlim_cur = rl.rlim_max;
+    if (setrlimit(RLIMIT_DATA, &rl) != 0)
+       perror("setrlimit(RLIMIT_DATA)");
+    rl.rlim_cur = RLIM_INFINITY;
+    rl.rlim_max = RLIM_INFINITY;
+    if (setrlimit(RLIMIT_RSS, &rl) != 0)
+       perror("setrlimit(RLIMIT_RSS)");
+    rl.rlim_cur = RLIM_INFINITY;
+    rl.rlim_max = RLIM_INFINITY;
+    if (setrlimit(RLIMIT_MEMLOCK, &rl) != 0)
+       perror("setrlimit(RLIMIT_MEMLOCK)");
 
     /* Ensure that SIGUSR2 is blocked by default when a new thread is created,
        then only the threads that use the signal unblock it -- this fixes a
diff -r 0b04a48f65cc tools/ioemu/vl.h
--- a/tools/ioemu/vl.h	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/vl.h	Thu Sep 27 11:50:43 2007 +0000
@@ -103,8 +103,8 @@ static inline char *realpath(const char 
 #endif
 
 /* cutils.c */
-void pstrcpy(char *buf, int buf_size, const char *str);
-char *pstrcat(char *buf, int buf_size, const char *s);
+void pstrcpy(char *buf, size_t buf_size, const char *str);
+char *pstrcat(char *buf, size_t buf_size, const char *s);
 int strstart(const char *str, const char *val, const char **ptr);
 int stristart(const char *str, const char *val, const char **ptr);
 
diff -r 0b04a48f65cc tools/ioemu/vnc.c
--- a/tools/ioemu/vnc.c	Wed Sep 26 17:11:07 2007 +0100
+++ b/tools/ioemu/vnc.c	Thu Sep 27 11:50:43 2007 +0000
@@ -24,6 +24,9 @@
  * THE SOFTWARE.
  */
 
+#include <sys/stat.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
 #include "vl.h"
 #include "qemu_socket.h"
 #include <assert.h>

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

             reply	other threads:[~2007-09-27 11:35 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-09-27 11:35 Christoph Egger [this message]
2007-09-27 14:19 ` [PATCH][TOOLS] ioemu: Build fixes for BSD and bug fixes from BSD Keir Fraser
2007-09-27 14:35   ` Christoph Egger
2007-09-27 15:39 ` Keir Fraser
2007-09-28  8:07   ` Christoph Egger
2007-09-28 10:31     ` Ian Campbell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200709271335.05614.Christoph.Egger@amd.com \
    --to=christoph.egger@amd.com \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.