From owner-freebsd-emulation@FreeBSD.ORG Mon Sep 29 21:33:21 2008 Return-Path: Delivered-To: freebsd-emulation@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 46C471065691; Mon, 29 Sep 2008 21:33:21 +0000 (UTC) (envelope-from root@dchagin.dialup.corbina.ru) Received: from contrabass.post.ru (contrabass.post.ru [85.21.78.5]) by mx1.freebsd.org (Postfix) with ESMTP id D11DD8FC2B; Mon, 29 Sep 2008 21:33:20 +0000 (UTC) (envelope-from root@dchagin.dialup.corbina.ru) Received: from corbina.ru (mail.post.ru [195.14.50.16]) by contrabass.post.ru (Postfix) with ESMTP id B5DFD1F61F4; Tue, 30 Sep 2008 01:33:18 +0400 (MSD) X-Virus-Scanned: by cgpav Uf39PSi9pFi9oFi9 Received: from dchagin.dialup.corbina.ru ([78.107.232.239] verified) by corbina.ru (CommuniGate Pro SMTP 5.1.14) with ESMTPS id 1237468825; Tue, 30 Sep 2008 01:33:18 +0400 Received: from dchagin.dialup.corbina.ru (localhost.chd.net [127.0.0.1]) by dchagin.dialup.corbina.ru (8.14.3/8.14.2) with ESMTP id m8TLXHFr071831; Tue, 30 Sep 2008 01:33:17 +0400 (MSD) (envelope-from root@dchagin.dialup.corbina.ru) Received: (from root@localhost) by dchagin.dialup.corbina.ru (8.14.3/8.14.2/Submit) id m8TLXCe8071830; Tue, 30 Sep 2008 01:33:12 +0400 (MSD) (envelope-from root) Date: Tue, 30 Sep 2008 01:33:12 +0400 From: Chagin Dmitry To: Roman Divacky Message-ID: <20080929213312.GA71793@dchagin.dialup.corbina.ru> References: <20080929200237.GA68300@dchagin.dialup.corbina.ru> <20080929211303.GB7605@freebsd.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080929211303.GB7605@freebsd.org> User-Agent: Mutt/1.4.2.3i Cc: freebsd-emulation@freebsd.org Subject: Re: firefox & flash9 patches X-BeenThere: freebsd-emulation@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Development of Emulators of other operating systems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Sep 2008 21:33:21 -0000 On Mon, Sep 29, 2008 at 11:13:03PM +0200, Roman Divacky wrote: > On Tue, Sep 30, 2008 at 12:02:37AM +0400, Chagin Dmitry wrote: > > > > Hi, > > > > please, test following patches (just -current). > > with them firefox && flash9 forks for me, > > I tested only on ia32@amd64 with 2.6.16 enabled, > > firefox 2.0.0.16 and flash9 plugin. > > > > If all is good, I will ask des@ and kib@ to review&commit them. thnx! > > > > diff --git a/src/sys/compat/linux/linux_misc.c b/src/sys/compat/linux/linux_misc.c > > index 585c853..073bedb 100644 > > --- a/src/sys/compat/linux/linux_misc.c > > +++ b/src/sys/compat/linux/linux_misc.c > > @@ -1831,9 +1831,9 @@ linux_sched_getaffinity(struct thread *td, > > cga.level = CPU_LEVEL_WHICH; > > cga.which = CPU_WHICH_PID; > > cga.id = args->pid; > > - cga.cpusetsize = sizeof(cpumask_t); > > + cga.cpusetsize = sizeof(cpuset_t); > > this makes sense... in linux this is called "cpumask_t" but it is > in fact our cpuset_t so I belive this change is correct > > > cga.mask = (cpuset_t *) args->user_mask_ptr; > > - > > + > > if ((error = cpuset_getaffinity(td, &cga)) == 0) > > td->td_retval[0] = sizeof(cpumask_t); > > > > > > > > diff --git a/src/sys/compat/linprocfs/linprocfs.c b/src/sys/compat/linprocfs/linprocfs.c > > index 646d6b2..bbb0556 100644 > > --- a/src/sys/compat/linprocfs/linprocfs.c > > +++ b/src/sys/compat/linprocfs/linprocfs.c > > @@ -873,14 +873,12 @@ linprocfs_doprocenviron(PFS_FILL_ARGS) > > static int > > linprocfs_doprocmaps(PFS_FILL_ARGS) > > { > > - char mebuffer[512]; > > vm_map_t map = &p->p_vmspace->vm_map; > > vm_map_entry_t entry, tmp_entry; > > vm_object_t obj, tobj, lobj; > > vm_offset_t saved_end; > > vm_ooffset_t off = 0; > > char *name = "", *freename = NULL; > > - size_t len; > > ino_t ino; > > unsigned int last_timestamp; > > int ref_count, shadow_count, flags; > > @@ -898,13 +896,9 @@ linprocfs_doprocmaps(PFS_FILL_ARGS) > > if (uio->uio_rw != UIO_READ) > > return (EOPNOTSUPP); > > > > - if (uio->uio_offset != 0) > > - return (0); > > - > > error = 0; > > vm_map_lock_read(map); > > - for (entry = map->header.next; > > - ((uio->uio_resid > 0) && (entry != &map->header)); > > + for (entry = map->header.next; entry != &map->header; > > entry = entry->next) { > > name = ""; > > freename = NULL; > > @@ -953,7 +947,7 @@ linprocfs_doprocmaps(PFS_FILL_ARGS) > > * format: > > * start, end, access, offset, major, minor, inode, name. > > */ > > - snprintf(mebuffer, sizeof mebuffer, > > + error = sbuf_printf(sb, > > "%08lx-%08lx %s%s%s%s %08lx %02x:%02x %lu%s%s\n", > > (u_long)entry->start, (u_long)entry->end, > > (entry->protection & VM_PROT_READ)?"r":"-", > > @@ -969,18 +963,11 @@ linprocfs_doprocmaps(PFS_FILL_ARGS) > > ); > > if (freename) > > free(freename, M_TEMP); > > - len = strlen(mebuffer); > > - if (len > uio->uio_resid) > > - len = uio->uio_resid; /* > > - * XXX We should probably return > > - * EFBIG here, as in procfs. > > - */ > > last_timestamp = map->timestamp; > > vm_map_unlock_read(map); > > - error = uiomove(mebuffer, len, uio); > > + if (error == -1) > > + return (0); > > vm_map_lock_read(map); > > - if (error) > > - break; > > if (last_timestamp + 1 != map->timestamp) { > > /* > > * Look again for the entry because the map was > > I dont understand this change.... you just changed it from stack-based > to using sbufs? can you explain how/why this fixes the problem? > pthread_getattr_np() uses /proc//maps for some strange thread stack size? calculation. it reads maps chunk by chunk, but current version linprocfs_doprocmaps() disallow this: > > - if (uio->uio_offset != 0) > > - return (0); also, please, see kern/101453 for explanation :) thnx! -- Have fun! chd