From owner-freebsd-chromium@freebsd.org Sat Jul 11 03:37:32 2015 Return-Path: Delivered-To: freebsd-chromium@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7415E996D3B for ; Sat, 11 Jul 2015 03:37:32 +0000 (UTC) (envelope-from bounces+73574-e33c-freebsd-chromium=freebsd.org@sendgrid.net) Received: from o3.shared.sendgrid.net (o3.shared.sendgrid.net [208.117.48.85]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3777381B for ; Sat, 11 Jul 2015 03:37:31 +0000 (UTC) (envelope-from bounces+73574-e33c-freebsd-chromium=freebsd.org@sendgrid.net) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sendgrid.info; h=from:mime-version:to:subject:references:in-reply-to:content-type:content-transfer-encoding; s=smtpapi; bh=FWOq7dzng4Ne/7yTPpCCEB4dOJg=; b=h067rNpCV8L7tnHL+6 oit0h3N5LJyceFUGngEu5HXUvZq/WgxVxCzc42nDAu5Oe1/khZTAeHo+nmY+RnUI RPO9iH8GabrQy5rU+2y68D4P6pIH9/vftN5HuSCWZUOC/O8fp9GyTcI9sVf8NP14 D/kVK6BSpktYNzEQutAEvApZ8= Received: by filter0588p1mdw1.sendgrid.net with SMTP id filter0588p1mdw1.24791.55A08F4E16 2015-07-11 03:36:51.586185153 +0000 UTC Received: from mail.tarsnap.com (ec2-54-86-246-204.compute-1.amazonaws.com [54.86.246.204]) by ismtpd-032 (SG) with ESMTP id 14e7b2fddd5.136.3a359 for ; Sat, 11 Jul 2015 03:36:51 +0000 (UTC) Received: (qmail 43105 invoked from network); 11 Jul 2015 03:33:07 -0000 Received: from unknown (HELO clamshell.daemonology.net) (127.0.0.1) by ec2-107-20-205-189.compute-1.amazonaws.com with ESMTP; 11 Jul 2015 03:33:07 -0000 Received: (qmail 9313 invoked from network); 11 Jul 2015 03:35:52 -0000 Received: from unknown (HELO clamshell.daemonology.net) (127.0.0.1) by clamshell.daemonology.net with SMTP; 11 Jul 2015 03:35:52 -0000 Message-ID: <55A08F18.7060803@freebsd.org> Date: Fri, 10 Jul 2015 20:35:52 -0700 From: Colin Percival User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Konstantin Belousov , freebsd-chromium@freebsd.org Subject: chrome processes stuck at 100% cpu [Re: svn commit: r272566 - head/sys/kern] References: <201410051736.s95Ha0U7010634@svn.freebsd.org> In-Reply-To: <201410051736.s95Ha0U7010634@svn.freebsd.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SG-EID: XhyBwObMhraAR+zdwMupjVGEs/UG/hkvmklqQBd8XaaHnRZel/ukO99ClrfA/k7X/WWf/BOcvqgowX img42ucLTUKFWbnIGvbFLEtpTwPmD02GOGYUmjgDPyszBw673pcVq/Pq+SjjrtjXhrEmXZ54uFknk9 rZzUN6wvEeJwjg9v+rRlLg7uD8aMtwS8l6z/ X-BeenThere: freebsd-chromium@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FreeBSD-specific Chromium issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2015 03:37:32 -0000 The bug fixed by this commit is causing chrome processes to get stuck spinning at 100% CPU on my FreeBSD 10.1-RELEASE laptop -- chrome is trying to read the kern.proc.pid.# sysctl (I think in order to get the status of a crashed rendering process) and it's going into an infinite ERESTART loop. Is anyone else seeing the 100%-CPU-usage chrome problem? It seems to be triggered by a crashing chrome rendering process, and I don't know what's causing that, so it's possible that this isn't affecting many other people. Konstantin, if this turns out to be affecting a lot of people, do you think we could get an errata notice for this? Colin Percival On 10/05/14 10:36, Konstantin Belousov wrote: > Author: kib > Date: Sun Oct 5 17:35:59 2014 > New Revision: 272566 > URL: https://svnweb.freebsd.org/changeset/base/272566 > > Log: > On error, sbuf_bcat() returns -1. Some callers returned this -1 to > the upper layers, which interpret it as errno value, which happens to > be ERESTART. The result was spurious restarts of the sysctls in loop, > e.g. kern.proc.proc, instead of returning ENOMEM to caller. > > Convert -1 from sbuf_bcat() to ENOMEM, when returning to the callers > expecting errno. > > In collaboration with: pho > Sponsored by: The FreeBSD Foundation (kib) > MFC after: 1 week > > Modified: > head/sys/kern/kern_descrip.c > head/sys/kern/kern_proc.c > > Modified: head/sys/kern/kern_descrip.c > ============================================================================== > --- head/sys/kern/kern_descrip.c Sun Oct 5 11:16:16 2014 (r272565) > +++ head/sys/kern/kern_descrip.c Sun Oct 5 17:35:59 2014 (r272566) > @@ -3097,7 +3097,7 @@ export_kinfo_to_sb(struct export_fd_buf > } > efbuf->remainder -= kif->kf_structsize; > } > - return (sbuf_bcat(efbuf->sb, kif, kif->kf_structsize)); > + return (sbuf_bcat(efbuf->sb, kif, kif->kf_structsize) == 0 ? 0 : ENOMEM); > } > > static int > > Modified: head/sys/kern/kern_proc.c > ============================================================================== > --- head/sys/kern/kern_proc.c Sun Oct 5 11:16:16 2014 (r272565) > +++ head/sys/kern/kern_proc.c Sun Oct 5 17:35:59 2014 (r272566) > @@ -1208,21 +1208,25 @@ kern_proc_out(struct proc *p, struct sbu > #ifdef COMPAT_FREEBSD32 > if ((flags & KERN_PROC_MASK32) != 0) { > freebsd32_kinfo_proc_out(&ki, &ki32); > - error = sbuf_bcat(sb, &ki32, sizeof(ki32)); > + if (sbuf_bcat(sb, &ki32, sizeof(ki32)) != 0) > + error = ENOMEM; > } else > #endif > - error = sbuf_bcat(sb, &ki, sizeof(ki)); > + if (sbuf_bcat(sb, &ki, sizeof(ki)) != 0) > + error = ENOMEM; > } else { > FOREACH_THREAD_IN_PROC(p, td) { > fill_kinfo_thread(td, &ki, 1); > #ifdef COMPAT_FREEBSD32 > if ((flags & KERN_PROC_MASK32) != 0) { > freebsd32_kinfo_proc_out(&ki, &ki32); > - error = sbuf_bcat(sb, &ki32, sizeof(ki32)); > + if (sbuf_bcat(sb, &ki32, sizeof(ki32)) != 0) > + error = ENOMEM; > } else > #endif > - error = sbuf_bcat(sb, &ki, sizeof(ki)); > - if (error) > + if (sbuf_bcat(sb, &ki, sizeof(ki)) != 0) > + error = ENOMEM; > + if (error != 0) > break; > } > } > @@ -1777,7 +1781,8 @@ proc_getauxv(struct thread *td, struct p > else > #endif > size = vsize * sizeof(Elf_Auxinfo); > - error = sbuf_bcat(sb, auxv, size); > + if (sbuf_bcat(sb, auxv, size) != 0) > + error = ENOMEM; > free(auxv, M_TEMP); > } > return (error); > @@ -2363,9 +2368,10 @@ kern_proc_vmmap_out(struct proc *p, stru > strlen(kve->kve_path) + 1; > kve->kve_structsize = roundup(kve->kve_structsize, > sizeof(uint64_t)); > - error = sbuf_bcat(sb, kve, kve->kve_structsize); > + if (sbuf_bcat(sb, kve, kve->kve_structsize) != 0) > + error = ENOMEM; > vm_map_lock_read(map); > - if (error) > + if (error != 0) > break; > if (last_timestamp != map->timestamp) { > vm_map_lookup_entry(map, addr - 1, &tmp_entry); > > > -- Colin Percival Security Officer Emeritus, FreeBSD | The power to serve Founder, Tarsnap | www.tarsnap.com | Online backups for the truly paranoid