[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Merge.
# HG changeset patch # User adsharma@xxxxxxxxxxxxxxxxxxxx # Node ID dc61689b4781882b886edad3591240bc3a813274 # Parent 3d31c0ecdbd80bb5e70e830ac4501e27ee8753d9 # Parent 14aa0818c1cab85a6ed0bfb1f9759729967b3df4 Merge. diff -r 3d31c0ecdbd8 -r dc61689b4781 linux-2.6-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32 --- a/linux-2.6-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32 Tue Aug 9 22:57:45 2005 +++ b/linux-2.6-xen-sparse/arch/xen/configs/xenU_defconfig_x86_32 Wed Aug 10 18:44:42 2005 @@ -415,7 +415,7 @@ # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set -# CONFIG_CRAMFS is not set +CONFIG_CRAMFS=y # CONFIG_VXFS_FS is not set # CONFIG_HPFS_FS is not set # CONFIG_QNX4FS_FS is not set diff -r 3d31c0ecdbd8 -r dc61689b4781 linux-2.6-xen-sparse/arch/xen/configs/xenU_defconfig_x86_64 --- a/linux-2.6-xen-sparse/arch/xen/configs/xenU_defconfig_x86_64 Tue Aug 9 22:57:45 2005 +++ b/linux-2.6-xen-sparse/arch/xen/configs/xenU_defconfig_x86_64 Wed Aug 10 18:44:42 2005 @@ -748,7 +748,7 @@ # CONFIG_BEFS_DEBUG is not set CONFIG_BFS_FS=m CONFIG_EFS_FS=m -CONFIG_CRAMFS=m +CONFIG_CRAMFS=y CONFIG_VXFS_FS=m # CONFIG_HPFS_FS is not set CONFIG_QNX4FS_FS=m diff -r 3d31c0ecdbd8 -r dc61689b4781 linux-2.6-xen-sparse/arch/xen/i386/kernel/pci-dma.c --- a/linux-2.6-xen-sparse/arch/xen/i386/kernel/pci-dma.c Tue Aug 9 22:57:45 2005 +++ b/linux-2.6-xen-sparse/arch/xen/i386/kernel/pci-dma.c Wed Aug 10 18:44:42 2005 @@ -182,8 +182,8 @@ if ((((unsigned int)ptr & ~PAGE_MASK) + size) <= PAGE_SIZE) { dma = virt_to_bus(ptr); } else { - BUG_ON((bnc = dma_alloc_coherent(dev, size, &dma, 0)) == NULL); - BUG_ON((ent = kmalloc(sizeof(*ent), GFP_KERNEL)) == NULL); + BUG_ON((bnc = dma_alloc_coherent(dev, size, &dma, GFP_ATOMIC)) == NULL); + BUG_ON((ent = kmalloc(sizeof(*ent), GFP_ATOMIC)) == NULL); if (direction != DMA_FROM_DEVICE) memcpy(bnc, ptr, size); ent->dma = dma; diff -r 3d31c0ecdbd8 -r dc61689b4781 linux-2.6-xen-sparse/arch/xen/i386/kernel/time.c --- a/linux-2.6-xen-sparse/arch/xen/i386/kernel/time.c Tue Aug 9 22:57:45 2005 +++ b/linux-2.6-xen-sparse/arch/xen/i386/kernel/time.c Wed Aug 10 18:44:42 2005 @@ -144,8 +144,6 @@ return 1; } __setup("independent_wallclock", __independent_wallclock); -#define INDEPENDENT_WALLCLOCK() \ - (independent_wallclock || (xen_start_info.flags & SIF_INITDOMAIN)) int tsc_disable __initdata = 0; @@ -173,13 +171,16 @@ static inline u64 scale_delta(u64 delta, u32 mul_frac, int shift) { u64 product; +#ifdef __i386__ u32 tmp1, tmp2; +#endif if ( shift < 0 ) delta >>= -shift; else delta <<= shift; +#ifdef __i386__ __asm__ ( "mul %5 ; " "mov %4,%%eax ; " @@ -190,6 +191,11 @@ "adc %5,%%edx ; " : "=A" (product), "=r" (tmp1), "=r" (tmp2) : "a" ((u32)delta), "1" ((u32)(delta >> 32)), "2" (mul_frac) ); +#else + __asm__ ( + "mul %%rdx ; shrd $32,%%rdx,%%rax" + : "=a" (product) : "0" (delta), "d" ((u64)mul_frac) ); +#endif return product; } @@ -203,8 +209,6 @@ cpu_khz = __cpu_khz >> -info->tsc_shift; else cpu_khz = __cpu_khz << info->tsc_shift; - printk(KERN_INFO "Xen reported: %lu.%03lu MHz processor.\n", - cpu_khz / 1000, cpu_khz % 1000); } static u64 get_nsec_offset(struct shadow_time_info *shadow) @@ -239,10 +243,7 @@ } while ((s->wc_version & 1) | (shadow_tv_version ^ s->wc_version)); - if (INDEPENDENT_WALLCLOCK()) - return; - - if ((time_status & STA_UNSYNC) != 0) + if (independent_wallclock) return; /* Adjust wall-clock time base based on wall_jiffies ticks. */ @@ -417,7 +418,7 @@ if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC) return -EINVAL; - if (!INDEPENDENT_WALLCLOCK()) + if (!independent_wallclock && !(xen_start_info.flags & SIF_INITDOMAIN)) return 0; /* Silent failure? */ cpu = get_cpu(); @@ -463,7 +464,8 @@ time_esterror = NTP_PHASE_LIMIT; #ifdef CONFIG_XEN_PRIVILEGED_GUEST - if (xen_start_info.flags & SIF_INITDOMAIN) { + if ((xen_start_info.flags & SIF_INITDOMAIN) && + !independent_wallclock) { dom0_op_t op; op.cmd = DOM0_SETTIME; op.u.settime.secs = xentime.tv_sec; @@ -790,13 +792,15 @@ } #endif get_time_values_from_xen(); - update_wallclock(); - set_normalized_timespec(&wall_to_monotonic, - -xtime.tv_sec, -xtime.tv_nsec); + processed_system_time = per_cpu(shadow_time, 0).system_timestamp; per_cpu(processed_system_time, 0) = processed_system_time; + update_wallclock(); + init_cpu_khz(); + printk(KERN_INFO "Xen reported: %lu.%03lu MHz processor.\n", + cpu_khz / 1000, cpu_khz % 1000); #if defined(__x86_64__) vxtime.mode = VXTIME_TSC; @@ -871,14 +875,12 @@ { init_cpu_khz(); - /* Get timebases for new environment. */ get_time_values_from_xen(); + + processed_system_time = per_cpu(shadow_time, 0).system_timestamp; + per_cpu(processed_system_time, 0) = processed_system_time; + update_wallclock(); - - /* Reset our own concept of passage of system time. */ - processed_system_time = - per_cpu(shadow_time, smp_processor_id()).system_timestamp; - per_cpu(processed_system_time, 0) = processed_system_time; per_cpu(timer_irq, 0) = bind_virq_to_irq(VIRQ_TIMER); (void)setup_irq(per_cpu(timer_irq, 0), &irq_timer); diff -r 3d31c0ecdbd8 -r dc61689b4781 linux-2.6-xen-sparse/arch/xen/x86_64/kernel/pci-dma.c --- a/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/pci-dma.c Tue Aug 9 22:57:45 2005 +++ b/linux-2.6-xen-sparse/arch/xen/x86_64/kernel/pci-dma.c Wed Aug 10 18:44:42 2005 @@ -234,8 +234,8 @@ if (((((unsigned long)ptr) & ~PAGE_MASK) + size) <= PAGE_SIZE) { dma = virt_to_bus(ptr); } else { - BUG_ON((bnc = dma_alloc_coherent(dev, size, &dma, 0)) == NULL); - BUG_ON((ent = kmalloc(sizeof(*ent), GFP_KERNEL)) == NULL); + BUG_ON((bnc = dma_alloc_coherent(dev, size, &dma, GFP_ATOMIC)) == NULL); + BUG_ON((ent = kmalloc(sizeof(*ent), GFP_ATOMIC)) == NULL); if (direction != DMA_FROM_DEVICE) memcpy(bnc, ptr, size); ent->dma = dma; diff -r 3d31c0ecdbd8 -r dc61689b4781 tools/console/daemon/io.c --- a/tools/console/daemon/io.c Tue Aug 9 22:57:45 2005 +++ b/tools/console/daemon/io.c Wed Aug 10 18:44:42 2005 @@ -231,6 +231,7 @@ if (!write_sync(xcs_data_fd, &msg, sizeof(msg))) { dolog(LOG_ERR, "Write to xcs failed: %m"); + exit(1); } } else { close(dom->tty_fd); @@ -262,6 +263,7 @@ if (!read_sync(fd, &msg, sizeof(msg))) { dolog(LOG_ERR, "read from xcs failed! %m"); + exit(1); } else if (msg.type == XCS_REQUEST) { struct domain *dom; diff -r 3d31c0ecdbd8 -r dc61689b4781 tools/console/daemon/utils.c --- a/tools/console/daemon/utils.c Tue Aug 9 22:57:45 2005 +++ b/tools/console/daemon/utils.c Wed Aug 10 18:44:42 2005 @@ -59,6 +59,8 @@ if (len < 1) { if (len == -1 && (errno == EAGAIN || errno == EINTR)) { + continue; + } else { return false; } } else { diff -r 3d31c0ecdbd8 -r dc61689b4781 tools/misc/xend --- a/tools/misc/xend Tue Aug 9 22:57:45 2005 +++ b/tools/misc/xend Wed Aug 10 18:44:42 2005 @@ -24,6 +24,7 @@ import socket import signal import time +import commands XCS_PATH = "/var/lib/xen/xcs_socket" XCS_EXEC = "/usr/sbin/xcs" @@ -116,8 +117,7 @@ return def start_xenstored(): - if os.fork() == 0: - os.execvp('/usr/sbin/xenstored', ['/usr/sbin/xenstored']); + s,o = commands.getstatusoutput("/usr/sbin/xenstored --pid-file=/var/run/xenstore.pid"); def start_consoled(): if os.fork() == 0: diff -r 3d31c0ecdbd8 -r dc61689b4781 tools/python/xen/xm/main.py --- a/tools/python/xen/xm/main.py Tue Aug 9 22:57:45 2005 +++ b/tools/python/xen/xm/main.py Wed Aug 10 18:44:42 2005 @@ -651,7 +651,7 @@ sys.exit(1) except XendError, ex: if len(args) > 0: - handle_xend_error(argv[1], args[0], ex) + handle_xend_error(argv[1], args[1], ex) else: print "Unexpected error:", sys.exc_info()[0] print diff -r 3d31c0ecdbd8 -r dc61689b4781 tools/xenstore/Makefile --- a/tools/xenstore/Makefile Tue Aug 9 22:57:45 2005 +++ b/tools/xenstore/Makefile Wed Aug 10 18:44:42 2005 @@ -1,6 +1,5 @@ XEN_ROOT=../.. include $(XEN_ROOT)/tools/Rules.mk -LIBDIR = lib XEN_LIBXC = $(XEN_ROOT)/tools/libxc INSTALL = install diff -r 3d31c0ecdbd8 -r dc61689b4781 tools/xenstore/utils.c --- a/tools/xenstore/utils.c Tue Aug 9 22:57:45 2005 +++ b/tools/xenstore/utils.c Wed Aug 10 18:44:42 2005 @@ -80,30 +80,6 @@ barf("malloc of %zu failed", size); } -/* Stevens. */ -void daemonize(void) -{ - pid_t pid; - - /* Separate from our parent via fork, so init inherits us. */ - if ((pid = fork()) < 0) - barf_perror("Failed to fork daemon"); - if (pid != 0) - exit(0); - - close(STDIN_FILENO); - close(STDOUT_FILENO); - close(STDERR_FILENO); - - /* Session leader so ^C doesn't whack us. */ - setsid(); - /* Move off any mount points we might be in. */ - chdir("/"); - /* Discard our parent's old-fashioned umask prejudices. */ - umask(0); -} - - /* This version adds one byte (for nul term) */ void *grab_file(const char *filename, unsigned long *size) { diff -r 3d31c0ecdbd8 -r dc61689b4781 tools/xenstore/utils.h --- a/tools/xenstore/utils.h Tue Aug 9 22:57:45 2005 +++ b/tools/xenstore/utils.h Wed Aug 10 18:44:42 2005 @@ -40,9 +40,6 @@ void *grab_file(const char *filename, unsigned long *size); void release_file(void *data, unsigned long size); -/* For writing daemons, based on Stevens. */ -void daemonize(void); - /* Signal handling: returns fd to listen on. */ int signal_to_fd(int signal); void close_signal(int fd); diff -r 3d31c0ecdbd8 -r dc61689b4781 tools/xenstore/xenstored_core.c --- a/tools/xenstore/xenstored_core.c Tue Aug 9 22:57:45 2005 +++ b/tools/xenstore/xenstored_core.c Wed Aug 10 18:44:42 2005 @@ -931,8 +931,7 @@ } node = canonicalize(conn, vec[0]); - if (/*suppress error on write outside transaction*/ 0 && - !within_transaction(conn->transaction, node)) { + if (!within_transaction(conn->transaction, node)) { send_error(conn, EROFS); return; } @@ -1541,10 +1540,49 @@ xs_daemon_transactions()); } +static void write_pidfile(const char *pidfile) +{ + char buf[100]; + int len; + int fd; + + fd = open(pidfile, O_RDWR | O_CREAT, 0600); + if (fd == -1) + barf_perror("Opening pid file %s", pidfile); + + /* We exit silently if daemon already running. */ + if (lockf(fd, F_TLOCK, 0) == -1) + exit(0); + + len = sprintf(buf, "%d\n", getpid()); + write(fd, buf, len); +} + +/* Stevens. */ +static void daemonize(void) +{ + pid_t pid; + + /* Separate from our parent via fork, so init inherits us. */ + if ((pid = fork()) < 0) + barf_perror("Failed to fork daemon"); + if (pid != 0) + exit(0); + + /* Session leader so ^C doesn't whack us. */ + setsid(); + /* Move off any mount points we might be in. */ + chdir("/"); + /* Discard our parent's old-fashioned umask prejudices. */ + umask(0); +} + + static struct option options[] = { { "no-fork", 0, NULL, 'N' }, { "verbose", 0, NULL, 'V' }, { "output-pid", 0, NULL, 'P' }, { "trace-file", 1, NULL, 'T' }, + { "pid-file", 1, NULL, 'F' }, { NULL, 0, NULL, 0 } }; int main(int argc, char *argv[]) @@ -1554,6 +1592,7 @@ fd_set inset, outset; bool dofork = true; bool outputpid = false; + const char *pidfile = NULL; while ((opt = getopt_long(argc, argv, "DVT:", options, NULL)) != -1) { switch (opt) { @@ -1573,10 +1612,19 @@ optarg); write(tracefd, "\n***\n", strlen("\n***\n")); break; + case 'F': + pidfile = optarg; } } if (optind != argc) barf("%s: No arguments desired", argv[0]); + + if (dofork) { + openlog("xenstored", 0, LOG_DAEMON); + daemonize(); + } + if (pidfile) + write_pidfile(pidfile); talloc_enable_leak_report_full(); @@ -1624,19 +1672,18 @@ /* Restore existing connections. */ restore_existing_connections(); - /* Debugging: daemonize() closes standard fds, so dup here. */ - tmpout = dup(STDOUT_FILENO); - if (dofork) { - openlog("xenstored", 0, LOG_DAEMON); - daemonize(); - } - if (outputpid) { char buffer[20]; sprintf(buffer, "%i\n", getpid()); write(tmpout, buffer, strlen(buffer)); } - close(tmpout); + + /* close stdin/stdout now we're ready to accept connections */ + if (dofork) { + close(STDIN_FILENO); + close(STDOUT_FILENO); + close(STDERR_FILENO); + } #ifdef TESTING signal(SIGUSR1, stop_failtest); diff -r 3d31c0ecdbd8 -r dc61689b4781 xen/arch/x86/domain_build.c --- a/xen/arch/x86/domain_build.c Tue Aug 9 22:57:45 2005 +++ b/xen/arch/x86/domain_build.c Wed Aug 10 18:44:42 2005 @@ -78,8 +78,8 @@ unsigned long pfn, mfn; unsigned long nr_pages; unsigned long nr_pt_pages; - unsigned long alloc_start; - unsigned long alloc_end; + unsigned long alloc_spfn; + unsigned long alloc_epfn; unsigned long count; struct pfn_info *page = NULL; start_info_t *si; @@ -145,8 +145,8 @@ ((image_len + PAGE_SIZE - 1) >> PAGE_SHIFT); if ( (page = alloc_largest(d, nr_pages)) == NULL ) panic("Not enough RAM for DOM0 reservation.\n"); - alloc_start = page_to_phys(page); - alloc_end = alloc_start + (d->tot_pages << PAGE_SHIFT); + alloc_spfn = page_to_pfn(page); + alloc_epfn = alloc_spfn + d->tot_pages; if ( (rc = parseelfimage(&dsi)) != 0 ) return rc; @@ -166,7 +166,7 @@ return -EINVAL; } if (strstr(dsi.xen_section_string, "SHADOW=translate")) - opt_dom0_translate = 1; + opt_dom0_translate = 1; /* Align load address to 4MB boundary. */ dsi.v_start &= ~((1UL<<22)-1); @@ -215,12 +215,12 @@ #endif } - if ( (v_end - dsi.v_start) > (alloc_end - alloc_start) ) + if ( ((v_end - dsi.v_start) >> PAGE_SHIFT) > (alloc_epfn - alloc_spfn) ) panic("Insufficient contiguous RAM to build kernel image.\n"); printk("PHYSICAL MEMORY ARRANGEMENT:\n" - " Dom0 alloc.: %p->%p", - _p(alloc_start), _p(alloc_end)); + " Dom0 alloc.: %"PRIphysaddr"->%"PRIphysaddr, + pfn_to_phys(alloc_spfn), pfn_to_phys(alloc_epfn)); if ( d->tot_pages < nr_pages ) printk(" (%lu pages to be allocated)", nr_pages - d->tot_pages); @@ -249,7 +249,8 @@ return -ENOMEM; } - mpt_alloc = (vpt_start - dsi.v_start) + alloc_start; + mpt_alloc = (vpt_start - dsi.v_start) + + (unsigned long)pfn_to_phys(alloc_spfn); /* * We're basically forcing default RPLs to 1, so that our "what privilege @@ -306,7 +307,7 @@ #endif l2tab += l2_linear_offset(dsi.v_start); - mfn = alloc_start >> PAGE_SHIFT; + mfn = alloc_spfn; for ( count = 0; count < ((v_end-dsi.v_start)>>PAGE_SHIFT); count++ ) { if ( !((unsigned long)l1tab & (PAGE_SIZE-1)) ) @@ -428,7 +429,7 @@ v->arch.guest_table = mk_pagetable(__pa(l4start)); l4tab += l4_table_offset(dsi.v_start); - mfn = alloc_start >> PAGE_SHIFT; + mfn = alloc_spfn; for ( count = 0; count < ((v_end-dsi.v_start)>>PAGE_SHIFT); count++ ) { if ( !((unsigned long)l1tab & (PAGE_SIZE-1)) ) @@ -563,11 +564,11 @@ /* Write the phys->machine and machine->phys table entries. */ for ( pfn = 0; pfn < d->tot_pages; pfn++ ) { - mfn = pfn + (alloc_start>>PAGE_SHIFT); + mfn = pfn + alloc_spfn; #ifndef NDEBUG #define REVERSE_START ((v_end - dsi.v_start) >> PAGE_SHIFT) if ( !opt_dom0_translate && (pfn > REVERSE_START) ) - mfn = (alloc_end>>PAGE_SHIFT) - (pfn - REVERSE_START); + mfn = alloc_epfn - (pfn - REVERSE_START); #endif ((u32 *)vphysmap_start)[pfn] = mfn; machine_to_phys_mapping[mfn] = pfn; @@ -580,7 +581,7 @@ { mfn = page_to_pfn(page); #ifndef NDEBUG -#define pfn (nr_pages - 1 - (pfn - ((alloc_end - alloc_start) >> PAGE_SHIFT))) +#define pfn (nr_pages - 1 - (pfn - (alloc_epfn - alloc_spfn))) #endif ((u32 *)vphysmap_start)[pfn] = mfn; machine_to_phys_mapping[mfn] = pfn; @@ -620,13 +621,13 @@ if ( opt_dom0_shadow || opt_dom0_translate ) { - printk("dom0: shadow enable\n"); + printk("dom0: shadow enable\n"); shadow_mode_enable(d, (opt_dom0_translate ? SHM_enable | SHM_refcounts | SHM_translate : SHM_enable)); if ( opt_dom0_translate ) { - printk("dom0: shadow translate\n"); + printk("dom0: shadow translate\n"); #if defined(__i386__) && defined(CONFIG_X86_PAE) printk("FIXME: PAE code needed here: %s:%d (%s)\n", __FILE__, __LINE__, __FUNCTION__); @@ -659,7 +660,7 @@ } update_pagetables(v); /* XXX SMP */ - printk("dom0: shadow setup done\n"); + printk("dom0: shadow setup done\n"); } return 0; diff -r 3d31c0ecdbd8 -r dc61689b4781 xen/arch/x86/time.c --- a/xen/arch/x86/time.c Tue Aug 9 22:57:45 2005 +++ b/xen/arch/x86/time.c Wed Aug 10 18:44:42 2005 @@ -103,13 +103,16 @@ static inline u64 scale_delta(u64 delta, struct time_scale *scale) { u64 product; +#ifdef CONFIG_X86_32 u32 tmp1, tmp2; +#endif if ( scale->shift < 0 ) delta >>= -scale->shift; else delta <<= scale->shift; +#ifdef CONFIG_X86_32 __asm__ ( "mul %5 ; " "mov %4,%%eax ; " @@ -120,6 +123,11 @@ "adc %5,%%edx ; " : "=A" (product), "=r" (tmp1), "=r" (tmp2) : "a" ((u32)delta), "1" ((u32)(delta >> 32)), "2" (scale->mul_frac) ); +#else + __asm__ ( + "mul %%rdx ; shrd $32,%%rdx,%%rax" + : "=a" (product) : "0" (delta), "d" ((u64)scale->mul_frac) ); +#endif return product; } diff -r 3d31c0ecdbd8 -r dc61689b4781 xen/common/page_alloc.c --- a/xen/common/page_alloc.c Tue Aug 9 22:57:45 2005 +++ b/xen/common/page_alloc.c Wed Aug 10 18:44:42 2005 @@ -52,7 +52,6 @@ * One bit per page of memory. Bit set => page is allocated. */ -static unsigned long bitmap_size; /* in bytes */ static unsigned long *alloc_bitmap; #define PAGES_PER_MAPWORD (sizeof(unsigned long) * 8) @@ -135,10 +134,16 @@ /* Initialise allocator to handle up to @max_page pages. */ physaddr_t init_boot_allocator(physaddr_t bitmap_start) { + unsigned long bitmap_size; + bitmap_start = round_pgup(bitmap_start); - /* Allocate space for the allocation bitmap. */ + /* + * Allocate space for the allocation bitmap. Include an extra longword + * of padding for possible overrun in map_alloc and map_free. + */ bitmap_size = max_page / 8; + bitmap_size += sizeof(unsigned long); bitmap_size = round_pgup(bitmap_size); alloc_bitmap = (unsigned long *)phys_to_virt(bitmap_start); @@ -171,7 +176,7 @@ else if ( *p != '\0' ) break; - if ( (bad_pfn < (bitmap_size*8)) && !allocated_in_map(bad_pfn) ) + if ( (bad_pfn < max_page) && !allocated_in_map(bad_pfn) ) { printk("Marking page %lx as bad\n", bad_pfn); map_alloc(bad_pfn, 1); @@ -183,7 +188,7 @@ { unsigned long pg, i; - for ( pg = 0; (pg + nr_pfns) < (bitmap_size*8); pg += pfn_align ) + for ( pg = 0; (pg + nr_pfns) < max_page; pg += pfn_align ) { for ( i = 0; i < nr_pfns; i++ ) if ( allocated_in_map(pg + i) ) @@ -362,7 +367,7 @@ printk("Scrubbing Free RAM: "); - for ( pfn = 0; pfn < (bitmap_size * 8); pfn++ ) + for ( pfn = 0; pfn < max_page; pfn++ ) { /* Every 100MB, print a progress dot. */ if ( (pfn % ((100*1024*1024)/PAGE_SIZE)) == 0 ) diff -r 3d31c0ecdbd8 -r dc61689b4781 xen/include/asm-x86/page.h --- a/xen/include/asm-x86/page.h Tue Aug 9 22:57:45 2005 +++ b/xen/include/asm-x86/page.h Wed Aug 10 18:44:42 2005 @@ -188,6 +188,9 @@ #define phys_to_page(kaddr) (frame_table + ((kaddr) >> PAGE_SHIFT)) #define virt_to_page(kaddr) (frame_table + (__pa(kaddr) >> PAGE_SHIFT)) #define pfn_valid(_pfn) ((_pfn) < max_page) + +#define pfn_to_phys(pfn) ((physaddr_t)(pfn) << PAGE_SHIFT) +#define phys_to_pfn(pa) ((unsigned long)((pa) >> PAGE_SHIFT)) /* High table entries are reserved by the hypervisor. */ #if defined(CONFIG_X86_32) && !defined(CONFIG_X86_PAE) diff -r 3d31c0ecdbd8 -r dc61689b4781 xen/include/asm-x86/types.h --- a/xen/include/asm-x86/types.h Tue Aug 9 22:57:45 2005 +++ b/xen/include/asm-x86/types.h Wed Aug 10 18:44:42 2005 @@ -38,13 +38,16 @@ typedef unsigned long long u64; #if defined(CONFIG_X86_PAE) typedef u64 physaddr_t; +#define PRIphysaddr "016llx" #else -typedef u32 physaddr_t; +typedef unsigned long physaddr_t; +#define PRIphysaddr "08lx" #endif #elif defined(__x86_64__) typedef signed long s64; typedef unsigned long u64; -typedef u64 physaddr_t; +typedef unsigned long physaddr_t; +#define PRIphysaddr "016lx" #endif typedef unsigned long size_t; diff -r 3d31c0ecdbd8 -r dc61689b4781 xen/include/asm-x86/x86_32/uaccess.h --- a/xen/include/asm-x86/x86_32/uaccess.h Tue Aug 9 22:57:45 2005 +++ b/xen/include/asm-x86/x86_32/uaccess.h Wed Aug 10 18:44:42 2005 @@ -67,7 +67,7 @@ " .long 1b,4b\n" \ " .long 2b,4b\n" \ ".previous" \ - : "=r" (retval), "=A" (x) \ + : "=r" (retval), "=&A" (x) \ : "r" (addr), "i"(errret), "0"(retval)) #define __get_user_size(x,ptr,size,retval,errret) \ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |