public inbox for linux-bluetooth@vger.kernel.org
 help / color / mirror / Atom feed
From: Marcel Holtmann <marcel@holtmann.org>
To: Chan-Yeol Park <chanyeol.park@samsung.com>
Cc: linux-bluetooth@vger.kernel.org
Subject: RE: Does anybody know conn->power_save variable in hci_conn.c?
Date: Tue, 07 Jul 2009 22:09:43 -0700	[thread overview]
Message-ID: <1247029783.3384.32.camel@localhost.localdomain> (raw)
In-Reply-To: <004601c9ff87$2f239a20$8d6ace60$%park@samsung.com>

Hi Chan-Yeol,

> >>> >> /*bluetooth kernel hci_conn.c */
> >>> >> 382 void hci_conn_enter_active_mode(struct hci_conn *conn)
> >>> >> 390
> >>> >> 391         if (conn->mode != HCI_CM_SNIFF || !conn->power_save)
> >>> >> 392                 goto timer;
> >>> >> 393 
> >>> >> 394         if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND,
> >>> &conn->pend)) {
> >>> >> 395                 struct hci_cp_exit_sniff_mode cp;
> >>> >> 396                 cp.handle = __cpu_to_le16(conn->handle);
> >>> >> 397                 hci_send_cmd(hdev, OGF_LINK_POLICY,
> >>> >> 398                                 OCF_EXIT_SNIFF_MODE, sizeof(cp),
> >>> >> 
> >>> >> If possible, could you explain why this code checks !conn->power_save
> >>> var.? 
> >>> >> 
> >>> >> Without this , if  conn->mode==HCI_CM_SNIFF , we simply exit sniff
> >>> >> mode,"OCF_EXIT_SNIFF_MODE".
> >>> >> 
> >>> >> As far as I understood, whenever conn->mode is HCI_CM_SNIFF
> >>> conn->power_save
> >>> >> is 0.
> >>> >> The reason is that  hci_mode_change_evt() set conn->power_save as "0"
> >>> when
> >>> >> conn->mode !=HCI_CM_ACTIVE.
> >>> >> 
> >>> >> Consequently we don't need to check that variable.
> >>> >
> >>> >we do need that variable, because otherwise devices like HID which do
> >>> >active sniff mode management fall over if we always try to exit sniff
> >>> >mode only for a few bytes.
> >>> 
> >>> In case of HID, active sniff mode could be no problem 
> >>> because its data rate is light compared to other profile.
> >>> 
> >>> But other case such as Sony Ericsson HBH-DS970,980 A2DP profile , it
> could
> >>> be problem.
> >>> As you may already know, 
> >>> they request sniff mode while HFP so their connection is too late...
> >>> It made AVDTP signal so slow..
> >>> 
> >>> Without conn->power_save variable check procedure, I found Sony Headset
> >>> works well! because they exit sniff mode 
> >>> Consequently, I think conn->power_save variable procedure should be
> removed
> >>> except only HID case.
> >>> 
> >>> If you think this is totally Sony headset problem, could you explain
> that?
> >>
> >>it is a headset problem since it is too stupid to get out of sniff mode
> >>even when it put itself into it and then tries to actively transmit
> >>data. However we can ensure to leave sniff mode in that case, but that
> >>needs to be a per socket option.
> >>
> >>As I said, if you have a HID device, you have to let the HID device
> >>control the sniff mode since it knows best anyway.
> >>
> 
> Thanks to you
> I could conclude this problem is from the stupid headset.
> 
> But we can't ignore these kind of headset-.-;, 
> As you know this headset is so popular and their family model has the same
> problem unfortunately.
> Moreover I check another phone[CSR or commercial stack] wakes up sniff mode.
> 
> So I have a plan to patch our kernel like below,
> 
> 1. Simply remove conn->power_save check procedure:
> This option is only used for HID profile(as far as I know) and currently we
> don't support HID.
> But I worry about this, because another profiles may need this option and
> this patch apply to all the ACL connection...
> 
> Could you tell me the side effect of this patch except HID profile case? 

it might and if it does, don't come here and ask us for debugging your
kernel.

> 2. Socket Option by Febien Chevalier:
> I think this is similar with your recommendation.
> 
> In BlueZ-dev mailing list, socket option patch is already proposed by Fabien
> Chevalier [fabchevalier@free.fr]
> But I couldn't find the conclusion ,its patch and your comments.
> 
> His last patch is located on "
> http://marc.info/?l=linux-bluetooth&m=122142307223008&w=2"
> 
> I think this option is more safe, because this patch is only for
> user-selected connection.
> 
> On a long term view, it's recommended to accept this kind of problem and
> path BlueZ kernel. 
> because many user may suffer from this headset , and they don't think this
> problem due to the headset.
> [The reason is that another commercial stack device supports this well]

We are using SOL_BLUETOOTH now. So that needs fixing and some other
aspects of the patch are not good enough for upstream inclusion.

Regards

Marcel



      reply	other threads:[~2009-07-08  5:09 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-07  8:28 Does anybody know conn->power_save variable in hci_conn.c? Chan-Yeol Park
2009-07-07 17:36 ` Marcel Holtmann
2009-07-08  1:36   ` Chan-Yeol Park
2009-07-08  3:38     ` Marcel Holtmann
2009-07-08  4:47       ` Chan-Yeol Park
2009-07-08  5:09         ` Marcel Holtmann [this message]

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=1247029783.3384.32.camel@localhost.localdomain \
    --to=marcel@holtmann.org \
    --cc=chanyeol.park@samsung.com \
    --cc=linux-bluetooth@vger.kernel.org \
    /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