From: Felipe Balbi <balbi@ti.com>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: Felipe Balbi <balbi@ti.com>,
Krzysztof Opasiak <k.opasiak@samsung.com>,
"'Robert Baldyga'" <r.baldyga@samsung.com>,
<gregkh@linuxfoundation.org>, <linux-usb@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <mina86@mina86.com>,
<andrzej.p@samsung.com>
Subject: Re: [PATCH] usb: gadget: f_fs: add "zombie" mode
Date: Tue, 7 Oct 2014 13:57:06 -0500 [thread overview]
Message-ID: <20141007185706.GC17409@saruman> (raw)
In-Reply-To: <Pine.LNX.4.44L0.1410071429500.1504-100000@iolanthe.rowland.org>
[-- Attachment #1: Type: text/plain, Size: 3513 bytes --]
Hi,
On Tue, Oct 07, 2014 at 02:42:33PM -0400, Alan Stern wrote:
> > > It seems to me that we should imitate what an ordinary USB device would
> > > do. If part of the firmware crashes, generally you would expect none
> > > of the endpoints associated with that function to work. Either they
> > > refuse to accept output from the host or they stall everything. But
> > > endpoints associated with other parts of the firmware might very well
> > > continue to work okay.
> >
> > dunno, I have never seen a USB device firmware crash and I don't think
> > anybody deliberately does anything to make sure other parts of the
> > device work. If it _does_ work, I'd assume it's really by chance.
>
> I've seen it happen lots of times, but only on single-function devices.
> When it somes to multi-function devices, who knows?
>
> Still, with the single-function devices, firmware crashes generally
> don't lead to disconnections. Sometimes they do, but usually they
> don't.
>
> > > Don't buffer requests. Either allow the internal FIFOs to fill up or
> > > else reject everything. Any reasonable host will start getting timeout
> > > expirations and will realize that something is wrong.
> >
> > Right, but if we allow this, I can already see folks abusing to connect
> > to the host early and only when necessary do some trickery to e.g. start
> > adbd (not saying Android will do this, just using it as an easy
> > example).
>
> We can still keep the pullup turned off until all the functions are
> ready. That's a part of normal behavior -- unlike what happens when a
> userspace component crashes or is killed.
>
> > Sure, we can deactivate and only activate when files are opened but is
> > there any guarantee that when a process receives segfault that we will
> > have, from FFS point of view, any information to know that the thing
> > crashed ? I mean, a userland application can register its own handler
> > for SIGSEGV/SIGKILL, right ? And that handler could very well just call
> > close() on all file descriptors. Then how do we differentiate a normal
> > close() from a "oh-crap-I-died" close() ?
>
> We can't, so why worry about it?
because on close(), I want to disconnect data pullups :-) Everything has
been tore down and there's nothing else to do.
> If a file handle was closed for normal reasons then userspace probably
> in the middle of shutting down the gadget anyway. If not then the
> user will get what they deserve.
yeah, I think the same way about a crashing functionfs daemon :-)
> If the file handle was closed for abnormal reasons, we can behave like
> crashed firmware. Which means, in the end, doing the same thing as in
> the normal-reason case -- i.e., do nothing. In particular, don't
> disconnect.
>
> If you want to allow for the possibility of orderly shutdown (and maybe
> even possible restart) of a userspace handler, the function library
> should first tell the kernel explicitly to disconnect. Then function
> components can be changed around completely, and when everything is
> ready, userspace can tell the kernel to connect again.
I still feel iffy about it, but I must say I understand where you're
coming from. It's weird to force a disconnect, sure. I guess we could
accept this with a new option (just not 'zombie', perhaps no_disconnect
:-) but only if we still have the same "delay pullups until daemon is
running" requirement.
/me hides
--
balbi
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2014-10-07 18:57 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-06 11:25 [PATCH] usb: gadget: f_fs: add "zombie" mode Robert Baldyga
2014-10-06 12:36 ` Michal Nazarewicz
2014-10-06 12:51 ` Robert Baldyga
2014-10-06 14:07 ` Michal Nazarewicz
2014-10-07 2:28 ` Felipe Balbi
2014-10-07 6:33 ` Robert Baldyga
2014-10-07 14:06 ` Felipe Balbi
2014-10-07 15:01 ` Krzysztof Opasiak
2014-10-07 15:28 ` Felipe Balbi
2014-10-07 16:37 ` Krzysztof Opasiak
2014-10-07 16:51 ` Felipe Balbi
2014-10-07 17:15 ` Alan Stern
2014-10-07 17:57 ` Felipe Balbi
2014-10-07 18:42 ` Alan Stern
2014-10-07 18:57 ` Felipe Balbi [this message]
2014-10-07 19:16 ` Alan Stern
2014-10-07 20:08 ` Michal Nazarewicz
2014-10-08 10:09 ` Krzysztof Opasiak
2014-10-08 11:28 ` Michal Nazarewicz
2014-10-08 14:52 ` Alan Stern
2014-10-09 10:56 ` Michal Nazarewicz
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=20141007185706.GC17409@saruman \
--to=balbi@ti.com \
--cc=andrzej.p@samsung.com \
--cc=gregkh@linuxfoundation.org \
--cc=k.opasiak@samsung.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mina86@mina86.com \
--cc=r.baldyga@samsung.com \
--cc=stern@rowland.harvard.edu \
/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.