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 19:13:13 -0800 [thread overview]
Message-ID: <1265253193.31341.151.camel@localhost.localdomain> (raw)
In-Reply-To: <35c90d961002031659v2a58a80cwdd86c17dc093a07d@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.
>
> Patch attached.
patch has been applied. Please keep the commit message to 72 chars so
that git log doesn't exceed on an 80 chars terminal. Also your hcidump
seems to line wrap. I had to fix that ;)
Regards
Marcel
next prev parent reply other threads:[~2010-02-04 3:13 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
2010-02-04 0:59 ` Nick Pelly
2010-02-04 3:13 ` Marcel Holtmann [this message]
[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=1265253193.31341.151.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