From: Marcel Holtmann <marcel@holtmann.org>
To: Nick Pelly <npelly@google.com>
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: What is the motivation for conn->power_save
Date: Wed, 03 Feb 2010 12:20:15 -0800 [thread overview]
Message-ID: <1265228415.31341.135.camel@localhost.localdomain> (raw)
In-Reply-To: <35c90d960911161055y695933fdjd221ad3b689ae3cf@mail.gmail.com>
Hi Nick,
> >> >> If I understand correctly, conn->power_save prevents the host stack
> >> >> from requesting active mode if it was not the host stack that
> >> >> requested sniff mode.
> >> >>
> >> >> I don't understand the motivation for this. If we have ACL data to
> >> >> send, then it seems like a good idea for the host stack to explicitly
> >> >> request active mode, regardless of the reason that we entered sniff
> >> >> mode.
> >> >>
> >> >> We want to enter active mode more aggressively when setting up SCO
> >> >> connections, to avoid a 5 second delay with certain sniff modes. But
> >> >> the conn->power_save code is getting in the way and doesn't appear to
> >> >> be useful in the first place.
> >> >
> >> > we have discussed this a few times. And if you lock through the code
> >> > history then you see that initially we just took devices out of sniff
> >> > mode if we had to send data. However with HID devices this falls flat on
> >> > its face. They need to stay in control of sniff mode if they initiated
> >> > it. Some of them crash and others just drain the battery. With sniff
> >> > mode you can send small amounts of data even while in sniff and for HID
> >> > that is sometimes used. So the remote side better not interfere.
> >> >
> >> > What we really need is a socket option where we can control this on a
> >> > per socket basis if we take devices out of sniff mode. And one extra
> >> > case might be when we try to establish a SCO channel, because then it is
> >> > clearly not an HID device. However even A2DP has this sort of problems
> >> > sometimes where the stream setup takes time.
> >>
> >> Makes sense. Thanks for the explanation.
> >
> > this means you will be working on a patch for this :)
> >
> >> > Not sure if we have to make SCO setup special. The only reason would be
> >> > if there is a case where we don't get an AT command before SCO needs to
> >> > be established.
> >>
> >> If you are in-call, and transfer audio from handset to BT headset,
> >> then there is SCO setup without any AT command.
> >
> > Fair enough.
> >
> >> I think for the SCO setup case we would always want to enter active
> >> mode. I could modify enter_active_mode() to take a parameter like 'int
> >> force' that would force us to enter active mode regardless of the
> >> state of power_save, and use this when setting up SCO. What do you
> >> think?
> >
> > Actually when you leave sniff mode, then all bets for the power_save
> > value are off again. So you better set power_save and just call
> > enter_active_mode. Something like this:
> >
> > diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c
> > index a975098..e4591e0 100644
> > --- a/net/bluetooth/hci_conn.c
> > +++ b/net/bluetooth/hci_conn.c
> > @@ -376,6 +376,9 @@ struct hci_conn *hci_connect(struct hci_dev *hdev, int type,
> >
> > if (acl->state == BT_CONNECTED &&
> > (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
> > + acl->power_save = 1;
> > + hci_conn_enter_active_mode(acl);
> > +
> > if (lmp_esco_capable(hdev))
> > hci_setup_sync(sco, acl->handle);
> > else
> >
> > Alternatively we could create hci_conn_force_active_mode() or just
> > implement a proper per socket sniff/active policy.
> >
>
> Patch submitted to Android tree as:
>
> http://android.git.kernel.org/?p=kernel/common.git;a=commit;h=201ac2f225a31dffcb05f1db4d609c467c9c694c
can you please send a version to the mailing list so I can easily apply
it and also have it here for reference in the archives.
Regards
Marcel
next prev parent reply other threads:[~2010-02-03 20:20 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-13 0:39 What is the motivation for conn->power_save Nick Pelly
2009-11-13 3:14 ` Marcel Holtmann
2009-11-13 3:31 ` Nick Pelly
2009-11-13 3:52 ` Marcel Holtmann
2009-11-16 18:55 ` Nick Pelly
2010-02-03 2:15 ` Nick Pelly
2010-02-03 20:20 ` Marcel Holtmann [this message]
2010-02-04 0:59 ` Nick Pelly
2010-02-04 3:13 ` Marcel Holtmann
[not found] ` <35c90d960911131445w16076c70sa0473e9b459d7d15@mail.gmail.com>
2010-01-13 4:46 ` Nick Pelly
2010-01-13 7:04 ` Marcel Holtmann
2010-07-08 15:07 ` Andrei Emeltchenko
2010-07-08 18:37 ` Nick Pelly
2010-08-03 9:31 ` Liang Bao
2010-08-03 16:16 ` Nick Pelly
2010-08-03 16:20 ` Nick Pelly
2010-08-03 9:32 ` Liang Bao
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=1265228415.31341.135.camel@localhost.localdomain \
--to=marcel@holtmann.org \
--cc=linux-bluetooth@vger.kernel.org \
--cc=npelly@google.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox