* Re: [PATCH v5 0/6] rfcomm: Implement rfcomm as a proper tty_port
From: Alexander Holler @ 2013-08-28 11:24 UTC (permalink / raw)
To: Peter Hurley
Cc: gustavo, Gianluca Anzolin, marcel, linux-bluetooth, gregkh,
jslaby
In-Reply-To: <521CE6E1.2020206@hurleysoftware.com>
Am 27.08.2013 19:50, schrieb Peter Hurley:
> On 08/27/2013 09:57 AM, Alexander Holler wrote:
>> Am 19.08.2013 22:20, schrieb Peter Hurley:
>>> On 07/31/2013 01:50 PM, Peter Hurley wrote:
>>
>>>> I reviewed these changes and retested. All ok.
>>>
>>> Gustavo,
>>>
>>> This series fixes a crashing regression from 3.10+ forward.
>>> Why is this not in linux-next yet?
>>
>> 3.8+ to be exact, just in case someone has to deal with older kernels.
>
> Thanks for the reminder.
>
> This series is too extensive to consider for -stable. Any ideas for
> how to address this crash for -stable?
Besides the BUG_ON() to prevent that something really bad happens, no.
Btw, I've just tested the series with 3.10.9, seems to work.
Thanks a lot,
Alexander Holler
^ permalink raw reply
* Re: How to test/debug bluetooth advertising [with hciconfig]?
From: Andrei Emeltchenko @ 2013-08-28 11:54 UTC (permalink / raw)
To: Richard Neill; +Cc: linux-bluetooth
In-Reply-To: <521DDAB3.2050407@richardneill.org>
Hi Richard,
On Wed, Aug 28, 2013 at 12:10:43PM +0100, Richard Neill wrote:
>
> >On Wed, Aug 28, 2013 at 11:22:01AM +0100, Richard Neill wrote:
> >>Dear All,
> >>
> >>I'm trying to get "hello world" working from the shell between 2
> >>Bluetooth 4 dongles, in LE advertising mode. I wonder whether I
> >>could ask for some pointers?
> >
> >Check ogf and ocf from the Bluetooth Specification.
>
> Dear Andrei,
>
> Thanks for your reply. That was actually very helpful: by searching
> specifically for "ogf ocf Bluetooth specification", I was able to
> locate the right part of the relevant document (a 600 page PDF of
> Bluetooth 4.0 core).
>
> However, before I delve into this in great detail, I wonder whether
> I am about to "re-invent the wheel". For example, if I wanted to
> use "ping" in a shell-script, I wouldn't normally begin by poking
> registers in the ethernet card.
Then you should not use "hcitool cmd". Better use high level API.
Best regards
Andrei Emeltchenko
^ permalink raw reply
* Re: How to test/debug bluetooth advertising [with hciconfig]?
From: Andrei Emeltchenko @ 2013-08-28 12:12 UTC (permalink / raw)
To: Richard Neill; +Cc: linux-bluetooth
In-Reply-To: <521DDAB3.2050407@richardneill.org>
Hi Richard,
> Thanks for your reply. That was actually very helpful: by searching
> specifically for "ogf ocf Bluetooth specification", I was able to
> locate the right part of the relevant document (a 600 page PDF of
> Bluetooth 4.0 core).
>
> However, before I delve into this in great detail, I wonder whether
Those ogf and ocf are just command identifiers, search by command you want
to run and you will find them.
Best regards
Andrei Emeltchenko
^ permalink raw reply
* Re: LE GATT service discovery Over BR/EDR
From: Claudio Takahasi @ 2013-08-28 13:19 UTC (permalink / raw)
To: Sathish Narasimman; +Cc: linux-bluetooth@vger.kernel.org
In-Reply-To: <5214C9DD.3090000@globaledgesoft.com>
Hi Sathish:
On Wed, Aug 21, 2013 at 11:08 AM, Sathish Narasimman
<sathish.n@globaledgesoft.com> wrote:
> Hi,
>
> I am reading core spec 4.0.
> GATT Features regarding Primary Service Discovery in page: 1911
>
> "GATT service discovery over BR/EDR transport will list services that only
> run
> over an LE transport and therefore only SDP service discovery shall be used
> on BR/EDR."
>
> Though SDP Service Discovery is able to get all the related service
> information. What is the use of
> GATT Service Discovery which gives only LE Information on BR/EDR Controller.
SDP record will not provide information related to characteristics and
descriptors.
For BR/EDR, GATT procedures are still required to discover, read and
write characteristics.
Below is an example of a SDP record for GATT based services:
Service Name: Generic Access Profile
Service Provider: BlueZ
Service RecHandle: 0x10001
Service Class ID List:
"" (0x1800)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 31
"ATT" (0x0007)
uint16: 0x1
uint16: 0x5
BR,
Claudio
^ permalink raw reply
* Re: Simultaneous BLE connections
From: Claudio Takahasi @ 2013-08-28 13:52 UTC (permalink / raw)
To: jonsmirl@gmail.com; +Cc: BlueZ development
In-Reply-To: <CAKON4OziwQbTUymPddfu7i_6g2oMMXJsbf8RE3kZWZPDVbcFqQ@mail.gmail.com>
Hi Jon:
On Tue, Aug 27, 2013 at 6:04 PM, jonsmirl@gmail.com <jonsmirl@gmail.com> wrote:
> How are multiple BLE connections implemented in Bluez? Is it a
> function of host memory like IOS with a high limit (1000's)? I see an
> old post saying that Bluez only supports one connection at a time.
BlueZ implements General Connection establishment procedure, multiple
connections can be active at a time. There is a plan to move the
"core" BLE connection management to the kernel, but at the moment
connection attempts and scanning are controlled by the user-space.
If your question is related to white-list, we don't support Selective
or Auto Connection procedures. The controllers that I have the
white-list size is limited to 16 to 64 entries, if you need to handle
more than the limit your host will need to implement some logic to
select the devices that you want to connect to. Another point is, if
you need to resolve address the entries in the list need to be more
dynamic.
>
> This has a large impact on host power consumption. With a connection
> you know the windows where you have to listen for a peripheral
> connection. If instead you use advertising to trigger the connection
> the host has to always be scanning since you never know when the
> peripheral is going to advertise.
>
> An example system might have twenty BLE sensors that send alerts when
> they are tripped. Wouldn't it be better to have 20 long lasting
> connections to these sensors? Now the host only has to wake up at the
> windows where it is legal for the peripheral to transmit. And the
> peripherals can take advantage of their ability to skip transmission
> windows.
In this case, peripheral could use the signalling channel and starts
the Connection Update Parameter procedure.
BR,
Claudio
^ permalink raw reply
* Re: How to test/debug bluetooth advertising [with hciconfig]?
From: Claudio Takahasi @ 2013-08-28 14:10 UTC (permalink / raw)
To: Andrei Emeltchenko, Richard Neill, BlueZ development
In-Reply-To: <20130828121249.GF15469@aemeltch-MOBL1>
Hi Richard:
On Wed, Aug 28, 2013 at 9:12 AM, Andrei Emeltchenko
<andrei.emeltchenko.news@gmail.com> wrote:
> Hi Richard,
>
>> Thanks for your reply. That was actually very helpful: by searching
>> specifically for "ogf ocf Bluetooth specification", I was able to
>> locate the right part of the relevant document (a 600 page PDF of
>> Bluetooth 4.0 core).
>>
>> However, before I delve into this in great detail, I wonder whether
>
> Those ogf and ocf are just command identifiers, search by command you want
> to run and you will find them.
>
> Best regards
> Andrei Emeltchenko
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Sets the advertising data:
$sudo hcitool -i hci0 cmd 0x08 0x0008 03 02 01 06 $(perl -e 'print "00
" x 28 . "\n"')
Remember that the data needs to follow the EIR/AD format: see Core Spec page1761
Enable adv
$sudo hciconfig hci0 leadv
BR,
Claudio
^ permalink raw reply
* Re: How to test/debug bluetooth advertising [with hciconfig]?
From: Richard Neill @ 2013-08-28 14:35 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <20130828115343.GE15469@aemeltch-MOBL1>
Dear Andrei,
Thanks for your help.
>>
>> However, before I delve into this in great detail, I wonder whether
>> I am about to "re-invent the wheel". For example, if I wanted to
>> use "ping" in a shell-script, I wouldn't normally begin by poking
>> registers in the ethernet card.
>
> Then you should not use "hcitool cmd". Better use high level API.
I'd love to use a high level API. But where can I find it? There doesn't
seem to be any documentation, or any example code for Bluetooth Low
Energy on Linux.
BTLE documentation only seem to be documented for Windows, iOS, or
Android. I'm sorry if I seem to be being dense, but while I can find
lots of references to 2007-era bluetooth tutorials, lots of information
on how wonderful BTLE is, and a lot of questions on eg stackexchange
asking *how* to do this, there doesn't seem to be any starting point for
actually doing it.
hciconfig looks to be the natural place to start (it has the commands to
enable and disable LE advertising, but appears to have omit the command
to set the advertising data itself).
Regards,
Richard
^ permalink raw reply
* Re: How to test/debug bluetooth advertising [with hciconfig]?
From: Richard Neill @ 2013-08-28 14:45 UTC (permalink / raw)
Cc: BlueZ development
In-Reply-To: <CAKT1EBc+Dyz5OfBdpEj6u1G5iiL36qG4jS0X4rzRf_mW4g1Gkg@mail.gmail.com>
On 28/08/13 15:10, Claudio Takahasi wrote:
> Sets the advertising data:
> $sudo hcitool -i hci0 cmd 0x08 0x0008 03 02 01 06 $(perl -e 'print "00
> " x 28 . "\n"')
> Remember that the data needs to follow the EIR/AD format: see Core Spec page1761
>
> Enable adv
> $sudo hciconfig hci0 leadv
>
> BR,
> Claudio
Dear Claudio,
Thanks very much - that's really helpful :-)
Best wishes,
Richard
^ permalink raw reply
* [PATCH 0/4] Make sdp independent from adapter
From: Grzegorz Kolodziejczyk @ 2013-08-29 9:56 UTC (permalink / raw)
To: linux-bluetooth
Make sdp independent from adapter. Now adapter invokes sdp functions
without revoking itself.
Solutions to consider:
- Access db has been expanded via sdp_get_access_list
- sdp_access_t moved to sdpd.h
Grzegorz Kolodziejczyk (4):
sdp: Move sdp server init to adapter
sdp: Move spd_init_services_list to adapter
sdp: Make sdp_record_add to be handled by adapter
sdp: Make sdp_record_remove to be handled by adapter
profiles/audio/a2dp.c | 10 ++--
profiles/audio/avrcp.c | 8 ++--
profiles/health/hdp.c | 2 +-
profiles/health/hdp_util.c | 4 +-
profiles/network/server.c | 6 +--
profiles/sap/server.c | 4 +-
src/adapter.c | 109 +++++++++++++++++++++++++++++++++++++++++++-
src/adapter.h | 7 +++
src/attrib-server.c | 8 ++--
src/main.c | 2 +-
src/profile.c | 9 ++--
src/sdpd-database.c | 53 ++++-----------------
src/sdpd.h | 8 +++-
13 files changed, 155 insertions(+), 75 deletions(-)
--
1.7.9.5
^ permalink raw reply
* [PATCH 1/4] sdp: Move sdp server init to adapter
From: Grzegorz Kolodziejczyk @ 2013-08-29 9:56 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1377770207-22688-1-git-send-email-grzegorz.kolodziejczyk@tieto.com>
Change-Id: Ie8440d59a00750f3d8aec49924d6b209bc6ebe2f
---
src/adapter.c | 12 ++++++++++++
src/adapter.h | 1 +
src/main.c | 2 +-
3 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/src/adapter.c b/src/adapter.c
index 17f5508..d2d829e 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -6295,3 +6295,15 @@ void adapter_shutdown(void)
if (!adapter_remaining)
btd_exit();
}
+
+void adapter_start_sdp_server(uint16_t sdp_mtu, uint32_t sdp_flags)
+{
+ sdp_list_t *services;
+
+ info("Start sdp server");
+ start_sdp_server(sdp_mtu, sdp_flags);
+
+ services = sdp_get_record_list();
+ for (; services; services = services->next)
+ adapter_foreach(adapter_service_insert, services->data);
+}
diff --git a/src/adapter.h b/src/adapter.h
index 32b12c0..a60a29f 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -79,6 +79,7 @@ struct smp_ltk_info {
int adapter_init(void);
void adapter_cleanup(void);
void adapter_shutdown(void);
+void adapter_start_sdp_server(uint16_t sdp_mtu, uint32_t sdp_flags);
struct btd_adapter *adapter_find(const bdaddr_t *sba);
struct btd_adapter *adapter_find_by_id(int id);
diff --git a/src/main.c b/src/main.c
index dc0478e..7e68d1e 100644
--- a/src/main.c
+++ b/src/main.c
@@ -548,7 +548,7 @@ int main(int argc, char *argv[])
if (option_compat == TRUE)
sdp_flags |= SDP_SERVER_COMPAT;
- start_sdp_server(sdp_mtu, sdp_flags);
+ adapter_start_sdp_server(sdp_mtu, sdp_flags);
/* Loading plugins has to be done after D-Bus has been setup since
* the plugins might wanna expose some paths on the bus. However the
--
1.7.9.5
^ permalink raw reply related
* [PATCH 2/4] sdp: Move spd_init_services_list to adapter
From: Grzegorz Kolodziejczyk @ 2013-08-29 9:56 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1377770207-22688-1-git-send-email-grzegorz.kolodziejczyk@tieto.com>
Make sdp_init_services_list to be runned in adapter instead of
sdp-database. sdp_init_service is invoked by adapter_register function.
Change-Id: Iddf5afbe410608ca96df727a7c9bb791e457ca77
---
src/adapter.c | 27 ++++++++++++++++++++++++++-
src/adapter.h | 1 +
src/sdpd-database.c | 31 ++++++++-----------------------
src/sdpd.h | 3 +--
4 files changed, 36 insertions(+), 26 deletions(-)
diff --git a/src/adapter.c b/src/adapter.c
index d2d829e..ba7be8a 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -5603,7 +5603,7 @@ static int adapter_register(struct btd_adapter *adapter)
agent_unref(agent);
}
- sdp_init_services_list(&adapter->bdaddr);
+ adapter_sdp_init_services_list(&adapter->bdaddr);
btd_adapter_gatt_server_start(adapter);
@@ -6307,3 +6307,28 @@ void adapter_start_sdp_server(uint16_t sdp_mtu, uint32_t sdp_flags)
for (; services; services = services->next)
adapter_foreach(adapter_service_insert, services->data);
}
+
+void adapter_sdp_init_services_list(bdaddr_t *device)
+{
+ sdp_list_t *p;
+
+ p = sdp_get_access_list();
+
+ DBG("");
+
+ for (; p != NULL; p = p->next) {
+ sdp_access_t *access = p->data;
+ sdp_record_t *rec;
+
+ if (bacmp(BDADDR_ANY, &access->device))
+ continue;
+
+ rec = sdp_record_find(access->handle);
+ if (rec == NULL)
+ continue;
+
+ SDPDBG("adding record with handle %x", access->handle);
+
+ adapter_foreach(adapter_service_insert, rec);
+ }
+}
diff --git a/src/adapter.h b/src/adapter.h
index a60a29f..bd54372 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -214,3 +214,4 @@ gboolean btd_adapter_check_oob_handler(struct btd_adapter *adapter);
void btd_adapter_for_each_device(struct btd_adapter *adapter,
void (*cb)(struct btd_device *device, void *data),
void *data);
+void adapter_sdp_init_services_list(bdaddr_t *device);
diff --git a/src/sdpd-database.c b/src/sdpd-database.c
index cf33f19..7228cd7 100644
--- a/src/sdpd-database.c
+++ b/src/sdpd-database.c
@@ -285,6 +285,14 @@ sdp_list_t *sdp_get_record_list(void)
return service_db;
}
+/*
+ * Return a pointer to the linked list containing the access db in sorted order
+ */
+sdp_list_t *sdp_get_access_list(void)
+{
+ return access_db;
+}
+
int sdp_check_access(uint32_t handle, bdaddr_t *device)
{
sdp_list_t *p = access_locate(handle);
@@ -314,26 +322,3 @@ uint32_t sdp_next_handle(void)
return handle;
}
-
-void sdp_init_services_list(bdaddr_t *device)
-{
- sdp_list_t *p;
-
- DBG("");
-
- for (p = access_db; p != NULL; p = p->next) {
- sdp_access_t *access = p->data;
- sdp_record_t *rec;
-
- if (bacmp(BDADDR_ANY, &access->device))
- continue;
-
- rec = sdp_record_find(access->handle);
- if (rec == NULL)
- continue;
-
- SDPDBG("adding record with handle %x", access->handle);
-
- adapter_foreach(adapter_service_insert, rec);
- }
-}
diff --git a/src/sdpd.h b/src/sdpd.h
index 9a0e1e9..ad384bd 100644
--- a/src/sdpd.h
+++ b/src/sdpd.h
@@ -68,6 +68,7 @@ sdp_record_t *sdp_record_find(uint32_t handle);
void sdp_record_add(const bdaddr_t *device, sdp_record_t *rec);
int sdp_record_remove(uint32_t handle);
sdp_list_t *sdp_get_record_list(void);
+sdp_list_t *sdp_get_access_list(void);
int sdp_check_access(uint32_t handle, bdaddr_t *device);
uint32_t sdp_next_handle(void);
@@ -81,5 +82,3 @@ void stop_sdp_server(void);
int add_record_to_server(const bdaddr_t *src, sdp_record_t *rec);
int remove_record_from_server(uint32_t handle);
-
-void sdp_init_services_list(bdaddr_t *device);
--
1.7.9.5
^ permalink raw reply related
* [PATCH 3/4] sdp: Make sdp_record_add to be handled by adapter
From: Grzegorz Kolodziejczyk @ 2013-08-29 9:56 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1377770207-22688-1-git-send-email-grzegorz.kolodziejczyk@tieto.com>
Make sdp_record_add to be called from adapter. First write services to
sdp db then to adapter db without revokes to adapter.
Change-Id: I65d638096c91aadacc3cb5ef7a8a9181fa4dae6e
---
profiles/audio/a2dp.c | 2 +-
profiles/audio/avrcp.c | 4 ++--
profiles/health/hdp_util.c | 2 +-
profiles/network/server.c | 2 +-
profiles/sap/server.c | 2 +-
src/adapter.c | 28 ++++++++++++++++++++++++++++
src/adapter.h | 3 +++
src/attrib-server.c | 2 +-
src/profile.c | 7 +++----
src/sdpd-database.c | 10 ----------
10 files changed, 41 insertions(+), 21 deletions(-)
diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c
index 3f3cc1b..4b8d4f3 100644
--- a/profiles/audio/a2dp.c
+++ b/profiles/audio/a2dp.c
@@ -1298,7 +1298,7 @@ struct a2dp_sep *a2dp_add_sep(struct btd_adapter *adapter, uint8_t type,
return NULL;
}
- if (add_record_to_server(adapter_get_address(server->adapter),
+ if (adapter_add_record_to_server_adapter(server->adapter,
record) < 0) {
error("Unable to register A2DP service record");
sdp_record_free(record);
diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
index 9f164e4..d64f228 100644
--- a/profiles/audio/avrcp.c
+++ b/profiles/audio/avrcp.c
@@ -3829,7 +3829,7 @@ done:
return -1;
}
- if (add_record_to_server(adapter_get_address(adapter), record) < 0) {
+ if (adapter_add_record_to_server_adapter(adapter, record) < 0) {
error("Unable to register AVRCP target service record");
avrcp_target_server_remove(p, adapter);
sdp_record_free(record);
@@ -3912,7 +3912,7 @@ done:
return -1;
}
- if (add_record_to_server(adapter_get_address(adapter), record) < 0) {
+ if (adapter_add_record_to_server_adapter(adapter, record) < 0) {
error("Unable to register AVRCP service record");
avrcp_controller_server_remove(p, adapter);
sdp_record_free(record);
diff --git a/profiles/health/hdp_util.c b/profiles/health/hdp_util.c
index b53f1db..7692ca2 100644
--- a/profiles/health/hdp_util.c
+++ b/profiles/health/hdp_util.c
@@ -733,7 +733,7 @@ gboolean hdp_update_sdp_record(struct hdp_adapter *adapter, GSList *app_list)
if (sdp_set_record_state(sdp_record, adapter->record_state++) < 0)
goto fail;
- if (add_record_to_server(adapter_get_address(adapter->btd_adapter),
+ if (adapter_add_record_to_server_adapter(adapter->btd_adapter,
sdp_record) < 0)
goto fail;
adapter->sdp_handler = sdp_record->handle;
diff --git a/profiles/network/server.c b/profiles/network/server.c
index de48bec..d321998 100644
--- a/profiles/network/server.c
+++ b/profiles/network/server.c
@@ -587,7 +587,7 @@ static uint32_t register_server_record(struct network_server *ns)
return 0;
}
- if (add_record_to_server(&ns->src, record) < 0) {
+ if (adapter_add_record_to_server_bdaddr(&ns->src, record) < 0) {
error("Failed to register service record");
sdp_record_free(record);
return 0;
diff --git a/profiles/sap/server.c b/profiles/sap/server.c
index dfcf0f1..d1e2581 100644
--- a/profiles/sap/server.c
+++ b/profiles/sap/server.c
@@ -1358,7 +1358,7 @@ int sap_server_register(const char *path, const bdaddr_t *src)
goto sdp_err;
}
- if (add_record_to_server(src, record) < 0) {
+ if (adapter_add_record_to_server_bdaddr(src, record) < 0) {
error("Adding SAP SDP record to the SDP server failed.");
sdp_record_free(record);
goto sdp_err;
diff --git a/src/adapter.c b/src/adapter.c
index ba7be8a..6478ca7 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -6308,6 +6308,34 @@ void adapter_start_sdp_server(uint16_t sdp_mtu, uint32_t sdp_flags)
adapter_foreach(adapter_service_insert, services->data);
}
+int adapter_add_record_to_server_adapter(struct btd_adapter *adapter, sdp_record_t *rec)
+{
+ return adapter_add_record_to_server_bdaddr(adapter_get_address(adapter), rec);
+}
+
+int adapter_add_record_to_server_bdaddr(const bdaddr_t *device, sdp_record_t *rec)
+{
+ int error;
+ struct btd_adapter *adapter;
+
+ error = add_record_to_server(device, rec);
+
+ /* Check if add_record_to server error occurs */
+ if (!error) {
+ /* Add rec for each adapter */
+ if (bacmp(device, BDADDR_ANY) == 0) {
+ adapter_foreach(adapter_service_insert, rec);
+ return error;
+ }
+ /* Add rec for single adapter */
+ adapter = adapter_find(device);
+ if (adapter)
+ adapter_service_insert(adapter, rec);
+ }
+
+ return error;
+}
+
void adapter_sdp_init_services_list(bdaddr_t *device)
{
sdp_list_t *p;
diff --git a/src/adapter.h b/src/adapter.h
index bd54372..8a5fc73 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -214,4 +214,7 @@ gboolean btd_adapter_check_oob_handler(struct btd_adapter *adapter);
void btd_adapter_for_each_device(struct btd_adapter *adapter,
void (*cb)(struct btd_device *device, void *data),
void *data);
+
+int adapter_add_record_to_server_adapter(struct btd_adapter *adapter, sdp_record_t *rec);
+int adapter_add_record_to_server_bdaddr(const bdaddr_t *device, sdp_record_t *rec);
void adapter_sdp_init_services_list(bdaddr_t *device);
diff --git a/src/attrib-server.c b/src/attrib-server.c
index 3f629b0..19b878d 100644
--- a/src/attrib-server.c
+++ b/src/attrib-server.c
@@ -326,7 +326,7 @@ static uint32_t attrib_create_sdp_new(struct gatt_server *server,
"http://www.bluez.org/");
}
- if (add_record_to_server(adapter_get_address(server->adapter), record)
+ if (adapter_add_record_to_server_adapter(server->adapter, record)
== 0)
return record->handle;
diff --git a/src/profile.c b/src/profile.c
index 90c3535..9a1687d 100644
--- a/src/profile.c
+++ b/src/profile.c
@@ -1197,7 +1197,7 @@ static void ext_direct_connect(GIOChannel *io, GError *err, gpointer user_data)
static uint32_t ext_register_record(struct ext_profile *ext,
struct ext_io *l2cap,
struct ext_io *rfcomm,
- const bdaddr_t *src)
+ struct btd_adapter *adapter)
{
sdp_record_t *rec;
char *dyn_record = NULL;
@@ -1220,7 +1220,7 @@ static uint32_t ext_register_record(struct ext_profile *ext,
return 0;
}
- if (add_record_to_server(src, rec) < 0) {
+ if (adapter_add_record_to_server_adapter(adapter, rec) < 0) {
error("Failed to register service record");
sdp_record_free(rec);
return 0;
@@ -1322,8 +1322,7 @@ static uint32_t ext_start_servers(struct ext_profile *ext,
}
}
- return ext_register_record(ext, l2cap, rfcomm,
- adapter_get_address(adapter));
+ return ext_register_record(ext, l2cap, rfcomm, adapter);
failed:
if (l2cap) {
diff --git a/src/sdpd-database.c b/src/sdpd-database.c
index 7228cd7..335ea0e 100644
--- a/src/sdpd-database.c
+++ b/src/sdpd-database.c
@@ -168,7 +168,6 @@ void sdp_svcdb_set_collectable(sdp_record_t *record, int sock)
*/
void sdp_record_add(const bdaddr_t *device, sdp_record_t *rec)
{
- struct btd_adapter *adapter;
sdp_access_t *dev;
SDPDBG("Adding rec : 0x%lx", (long) rec);
@@ -184,15 +183,6 @@ void sdp_record_add(const bdaddr_t *device, sdp_record_t *rec)
dev->handle = rec->handle;
access_db = sdp_list_insert_sorted(access_db, dev, access_sort);
-
- if (bacmp(device, BDADDR_ANY) == 0) {
- adapter_foreach(adapter_service_insert, rec);
- return;
- }
-
- adapter = adapter_find(device);
- if (adapter)
- adapter_service_insert(adapter, rec);
}
static sdp_list_t *record_locate(uint32_t handle)
--
1.7.9.5
^ permalink raw reply related
* [PATCH 4/4] sdp: Make sdp_record_remove to be handled by adapter
From: Grzegorz Kolodziejczyk @ 2013-08-29 9:56 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1377770207-22688-1-git-send-email-grzegorz.kolodziejczyk@tieto.com>
Make sdp_record_remove to be called from adapter. First remove service
from sdp db then from adapter db without revokes to adapter.
Change-Id: I13a3113909bab2b4494a00ef05e25dc8d113e3ac
---
profiles/audio/a2dp.c | 8 ++++----
profiles/audio/avrcp.c | 4 ++--
profiles/health/hdp.c | 2 +-
profiles/health/hdp_util.c | 2 +-
profiles/network/server.c | 4 ++--
profiles/sap/server.c | 2 +-
src/adapter.c | 42 ++++++++++++++++++++++++++++++++++++++++++
src/adapter.h | 2 ++
src/attrib-server.c | 6 +++---
src/profile.c | 2 +-
src/sdpd-database.c | 12 ------------
src/sdpd.h | 5 +++++
12 files changed, 64 insertions(+), 27 deletions(-)
diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c
index 4b8d4f3..364383b 100644
--- a/profiles/audio/a2dp.c
+++ b/profiles/audio/a2dp.c
@@ -1327,7 +1327,7 @@ void a2dp_remove_sep(struct a2dp_sep *sep)
return;
server->sources = g_slist_remove(server->sources, sep);
if (server->sources == NULL && server->source_record_id) {
- remove_record_from_server(server->source_record_id);
+ adapter_remove_record_from_server(server->source_record_id);
server->source_record_id = 0;
}
} else {
@@ -1335,7 +1335,7 @@ void a2dp_remove_sep(struct a2dp_sep *sep)
return;
server->sinks = g_slist_remove(server->sinks, sep);
if (server->sinks == NULL && server->sink_record_id) {
- remove_record_from_server(server->sink_record_id);
+ adapter_remove_record_from_server(server->sink_record_id);
server->sink_record_id = 0;
}
}
@@ -1944,7 +1944,7 @@ static void a2dp_source_server_remove(struct btd_profile *p,
(GDestroyNotify) a2dp_unregister_sep);
if (server->source_record_id) {
- remove_record_from_server(server->source_record_id);
+ adapter_remove_record_from_server(server->source_record_id);
server->source_record_id = 0;
}
@@ -1989,7 +1989,7 @@ static void a2dp_sink_server_remove(struct btd_profile *p,
g_slist_free_full(server->sinks, (GDestroyNotify) a2dp_unregister_sep);
if (server->sink_record_id) {
- remove_record_from_server(server->sink_record_id);
+ adapter_remove_record_from_server(server->sink_record_id);
server->sink_record_id = 0;
}
diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
index d64f228..da8d06a 100644
--- a/profiles/audio/avrcp.c
+++ b/profiles/audio/avrcp.c
@@ -3797,7 +3797,7 @@ static void avrcp_target_server_remove(struct btd_profile *p,
return;
if (server->tg_record_id != 0) {
- remove_record_from_server(server->tg_record_id);
+ adapter_remove_record_from_server(server->tg_record_id);
server->tg_record_id = 0;
}
@@ -3880,7 +3880,7 @@ static void avrcp_controller_server_remove(struct btd_profile *p,
return;
if (server->ct_record_id != 0) {
- remove_record_from_server(server->ct_record_id);
+ adapter_remove_record_from_server(server->ct_record_id);
server->ct_record_id = 0;
}
diff --git a/profiles/health/hdp.c b/profiles/health/hdp.c
index 7f24756..eeac102 100644
--- a/profiles/health/hdp.c
+++ b/profiles/health/hdp.c
@@ -1403,7 +1403,7 @@ void hdp_adapter_unregister(struct btd_adapter *adapter)
hdp_adapter = l->data;
adapters = g_slist_remove(adapters, hdp_adapter);
if (hdp_adapter->sdp_handler > 0)
- remove_record_from_server(hdp_adapter->sdp_handler);
+ adapter_remove_record_from_server(hdp_adapter->sdp_handler);
release_adapter_instance(hdp_adapter);
btd_adapter_unref(hdp_adapter->btd_adapter);
g_free(hdp_adapter);
diff --git a/profiles/health/hdp_util.c b/profiles/health/hdp_util.c
index 7692ca2..55f1fb9 100644
--- a/profiles/health/hdp_util.c
+++ b/profiles/health/hdp_util.c
@@ -693,7 +693,7 @@ gboolean hdp_update_sdp_record(struct hdp_adapter *adapter, GSList *app_list)
sdp_record_t *sdp_record;
if (adapter->sdp_handler > 0)
- remove_record_from_server(adapter->sdp_handler);
+ adapter_remove_record_from_server(adapter->sdp_handler);
if (app_list == NULL) {
adapter->sdp_handler = 0;
diff --git a/profiles/network/server.c b/profiles/network/server.c
index d321998..6e36818 100644
--- a/profiles/network/server.c
+++ b/profiles/network/server.c
@@ -628,7 +628,7 @@ static void server_disconnect(DBusConnection *conn, void *user_data)
ns->watch_id = 0;
if (ns->record_id) {
- remove_record_from_server(ns->record_id);
+ adapter_remove_record_from_server(ns->record_id);
ns->record_id = 0;
}
@@ -722,7 +722,7 @@ static void server_free(void *data)
server_remove_sessions(ns);
if (ns->record_id)
- remove_record_from_server(ns->record_id);
+ adapter_remove_record_from_server(ns->record_id);
g_free(ns->name);
g_free(ns->bridge);
diff --git a/profiles/sap/server.c b/profiles/sap/server.c
index d1e2581..c837668 100644
--- a/profiles/sap/server.c
+++ b/profiles/sap/server.c
@@ -1318,7 +1318,7 @@ static void server_remove(struct sap_server *server)
sap_server_remove_conn(server);
- remove_record_from_server(server->record_id);
+ adapter_remove_record_from_server(server->record_id);
if (server->listen_io) {
g_io_channel_shutdown(server->listen_io, TRUE, NULL);
diff --git a/src/adapter.c b/src/adapter.c
index 6478ca7..57ae6b3 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -6336,6 +6336,48 @@ int adapter_add_record_to_server_bdaddr(const bdaddr_t *device, sdp_record_t *re
return error;
}
+int adapter_remove_record_from_server(uint32_t handle)
+{
+ int error;
+ sdp_list_t *p;
+ sdp_record_t *r;
+ sdp_access_t *a;
+ sdp_record_t rh, ah;
+
+ error = remove_record_from_server(handle);
+
+ /* if no errors for removing records from sdp server */
+ if (!error) {
+ /* record locate */
+ rh.handle = handle;
+ p = sdp_list_find(sdp_get_record_list(), &rh, record_sort);
+
+ r = p->data;
+
+ /* device locate */
+ ah.handle = handle;
+ p = sdp_list_find(sdp_get_access_list(), &ah, record_sort);
+
+ if (p == NULL || p->data == NULL)
+ return 0;
+
+ a = p->data;
+
+ /* remove services from adapter/s */
+ if (bacmp(&a->device, BDADDR_ANY) != 0) {
+ struct btd_adapter *adapter = adapter_find(&a->device);
+ if (adapter)
+ adapter_service_remove(adapter, r);
+ } else
+ adapter_foreach(adapter_service_remove, r);
+
+ free(a);
+ }
+
+ /* return 0 if no error */
+ return error;
+}
+
void adapter_sdp_init_services_list(bdaddr_t *device)
{
sdp_list_t *p;
diff --git a/src/adapter.h b/src/adapter.h
index 8a5fc73..a56e8f7 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -217,4 +217,6 @@ void btd_adapter_for_each_device(struct btd_adapter *adapter,
int adapter_add_record_to_server_adapter(struct btd_adapter *adapter, sdp_record_t *rec);
int adapter_add_record_to_server_bdaddr(const bdaddr_t *device, sdp_record_t *rec);
+int adapter_remove_record_from_server(uint32_t handle);
+
void adapter_sdp_init_services_list(bdaddr_t *device);
diff --git a/src/attrib-server.c b/src/attrib-server.c
index 19b878d..65952d3 100644
--- a/src/attrib-server.c
+++ b/src/attrib-server.c
@@ -139,10 +139,10 @@ static void gatt_server_free(struct gatt_server *server)
g_slist_free_full(server->clients, (GDestroyNotify) channel_free);
if (server->gatt_sdp_handle > 0)
- remove_record_from_server(server->gatt_sdp_handle);
+ adapter_remove_record_from_server(server->gatt_sdp_handle);
if (server->gap_sdp_handle > 0)
- remove_record_from_server(server->gap_sdp_handle);
+ adapter_remove_record_from_server(server->gap_sdp_handle);
if (server->adapter != NULL)
btd_adapter_unref(server->adapter);
@@ -1380,7 +1380,7 @@ uint32_t attrib_create_sdp(struct btd_adapter *adapter, uint16_t handle,
void attrib_free_sdp(uint32_t sdp_handle)
{
- remove_record_from_server(sdp_handle);
+ adapter_remove_record_from_server(sdp_handle);
}
static uint16_t find_uuid16_avail(struct btd_adapter *adapter, uint16_t nitems)
diff --git a/src/profile.c b/src/profile.c
index 9a1687d..08ce410 100644
--- a/src/profile.c
+++ b/src/profile.c
@@ -1389,7 +1389,7 @@ static void ext_remove_records(struct ext_profile *ext,
ext->records = g_slist_remove(ext->records, r);
- remove_record_from_server(r->handle);
+ adapter_remove_record_from_server(r->handle);
btd_adapter_unref(r->adapter);
g_free(r);
}
diff --git a/src/sdpd-database.c b/src/sdpd-database.c
index 335ea0e..0bfb118 100644
--- a/src/sdpd-database.c
+++ b/src/sdpd-database.c
@@ -41,11 +41,6 @@
static sdp_list_t *service_db;
static sdp_list_t *access_db;
-typedef struct {
- uint32_t handle;
- bdaddr_t device;
-} sdp_access_t;
-
/*
* Ordering function called when inserting a service record.
* The service repository is a linked list in sorted order
@@ -254,13 +249,6 @@ int sdp_record_remove(uint32_t handle)
a = p->data;
- if (bacmp(&a->device, BDADDR_ANY) != 0) {
- struct btd_adapter *adapter = adapter_find(&a->device);
- if (adapter)
- adapter_service_remove(adapter, r);
- } else
- adapter_foreach(adapter_service_remove, r);
-
access_db = sdp_list_remove(access_db, a);
access_free(a);
diff --git a/src/sdpd.h b/src/sdpd.h
index ad384bd..769dc63 100644
--- a/src/sdpd.h
+++ b/src/sdpd.h
@@ -45,6 +45,11 @@ typedef struct request {
int len;
} sdp_req_t;
+typedef struct {
+ uint32_t handle;
+ bdaddr_t device;
+} sdp_access_t;
+
void handle_internal_request(int sk, int mtu, void *data, int len);
void handle_request(int sk, uint8_t *data, int len);
--
1.7.9.5
^ permalink raw reply related
* Re: Simultaneous BLE connections
From: jonsmirl @ 2013-08-29 18:31 UTC (permalink / raw)
To: Claudio Takahasi; +Cc: BlueZ development
In-Reply-To: <CAKT1EBdjG_4+hOd0FCA+WbxCeHS85NEryMvZ3=+HHyPrqejk+A@mail.gmail.com>
On Wed, Aug 28, 2013 at 9:52 AM, Claudio Takahasi
<claudio.takahasi@openbossa.org> wrote:
> Hi Jon:
>
> On Tue, Aug 27, 2013 at 6:04 PM, jonsmirl@gmail.com <jonsmirl@gmail.com> wrote:
>> How are multiple BLE connections implemented in Bluez? Is it a
>> function of host memory like IOS with a high limit (1000's)? I see an
>> old post saying that Bluez only supports one connection at a time.
>
> BlueZ implements General Connection establishment procedure, multiple
> connections can be active at a time. There is a plan to move the
> "core" BLE connection management to the kernel, but at the moment
> connection attempts and scanning are controlled by the user-space.
I'm still trying to work out the best solution. I'm not convinced that
a user space BLE connection implementation can do the fine grain
scheduling needed to handle multiple open connections and get the
connection events on each connection scheduled at the correct time.
That's making me lean more toward a connectionless scheme that uses
advertising.
If optimal scheduling can be achieved, a connection oriented scheme is
better for power consumption. But if everything is going to get out of
sync all of the time then the connectionless scheme is better.
Of course larger transaction actions will still use a connection, they
just won't use the BLE feature of leaving the connection open for long
periods of time.
>
> If your question is related to white-list, we don't support Selective
> or Auto Connection procedures. The controllers that I have the
> white-list size is limited to 16 to 64 entries, if you need to handle
> more than the limit your host will need to implement some logic to
> select the devices that you want to connect to. Another point is, if
> you need to resolve address the entries in the list need to be more
> dynamic.
>
>>
>> This has a large impact on host power consumption. With a connection
>> you know the windows where you have to listen for a peripheral
>> connection. If instead you use advertising to trigger the connection
>> the host has to always be scanning since you never know when the
>> peripheral is going to advertise.
>>
>> An example system might have twenty BLE sensors that send alerts when
>> they are tripped. Wouldn't it be better to have 20 long lasting
>> connections to these sensors? Now the host only has to wake up at the
>> windows where it is legal for the peripheral to transmit. And the
>> peripherals can take advantage of their ability to skip transmission
>> windows.
>
> In this case, peripheral could use the signalling channel and starts
> the Connection Update Parameter procedure.
>
> BR,
> Claudio
--
Jon Smirl
jonsmirl@gmail.com
^ permalink raw reply
* [PATCH] Add a new PID/VID 0cf3/e005 for AR3012.
From: Peng Chen @ 2013-08-30 9:09 UTC (permalink / raw)
To: gustavo, linux-bluetooth, marcel; +Cc: kumo, taowang, Peng Chen
usb devices info:
T: Bus=06 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 13 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=0cf3 ProdID=e005 Rev= 0.02
C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms
Signed-off-by: Peng Chen <pengchen@qca.qualcomm.com>
---
drivers/bluetooth/ath3k.c | 2 ++
drivers/bluetooth/btusb.c | 1 +
2 files changed, 3 insertions(+)
diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
index 11f467c..10e9a64 100644
--- a/drivers/bluetooth/ath3k.c
+++ b/drivers/bluetooth/ath3k.c
@@ -85,6 +85,7 @@ static struct usb_device_id ath3k_table[] = {
{ USB_DEVICE(0x04CA, 0x3008) },
{ USB_DEVICE(0x13d3, 0x3362) },
{ USB_DEVICE(0x0CF3, 0xE004) },
+ { USB_DEVICE(0x0CF3, 0xE005) },
{ USB_DEVICE(0x0930, 0x0219) },
{ USB_DEVICE(0x0489, 0xe057) },
{ USB_DEVICE(0x13d3, 0x3393) },
@@ -122,6 +123,7 @@ static struct usb_device_id ath3k_blist_tbl[] = {
{ USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
+ { USB_DEVICE(0x0cf3, 0xe005), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 },
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index de4cf4d..299df99 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -148,6 +148,7 @@ static struct usb_device_id blacklist_table[] = {
{ USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
+ { USB_DEVICE(0x0cf3, 0xe005), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 },
--
1.7.9.5
^ permalink raw reply related
* [PATCH] Add a new PID/VID 0cf3/e005 for AR3012.
From: Peng Chen @ 2013-08-30 9:41 UTC (permalink / raw)
To: gustavo, linux-bluetooth, marcel; +Cc: kumo, taowang, Peng Chen
usb device info:
T: Bus=06 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 15 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=0cf3 ProdID=e005 Rev= 0.02
C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms
Signed-off-by: Peng Chen <pengchen@qca.qualcomm.com>
---
drivers/bluetooth/ath3k.c | 2 ++
drivers/bluetooth/btusb.c | 1 +
2 files changed, 3 insertions(+)
diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
index 11f467c..10e9a64 100644
--- a/drivers/bluetooth/ath3k.c
+++ b/drivers/bluetooth/ath3k.c
@@ -85,6 +85,7 @@ static struct usb_device_id ath3k_table[] = {
{ USB_DEVICE(0x04CA, 0x3008) },
{ USB_DEVICE(0x13d3, 0x3362) },
{ USB_DEVICE(0x0CF3, 0xE004) },
+ { USB_DEVICE(0x0CF3, 0xE005) },
{ USB_DEVICE(0x0930, 0x0219) },
{ USB_DEVICE(0x0489, 0xe057) },
{ USB_DEVICE(0x13d3, 0x3393) },
@@ -122,6 +123,7 @@ static struct usb_device_id ath3k_blist_tbl[] = {
{ USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
+ { USB_DEVICE(0x0cf3, 0xe005), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 },
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index de4cf4d..299df99 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -148,6 +148,7 @@ static struct usb_device_id blacklist_table[] = {
{ USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
+ { USB_DEVICE(0x0cf3, 0xe005), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 },
--
1.7.9.5
^ permalink raw reply related
* [PATCH v2 1/2] obexd: Add obc_session_get_folder function
From: Christian Fetzer @ 2013-08-30 12:45 UTC (permalink / raw)
To: linux-bluetooth
From: Christian Fetzer <christian.fetzer@bmw-carit.de>
This patch extends client session by the tracking of the current folder.
The current folder can be accessed by obc_session_get_current_folder.
This allows drivers to add a folder property to browsed objects so that
the application doesn't have to keep track of the folder an object
belongs to.
---
obexd/client/session.c | 38 ++++++++++++++++++++++++++++++++++++++
obexd/client/session.h | 2 ++
2 files changed, 40 insertions(+)
diff --git a/obexd/client/session.c b/obexd/client/session.c
index 44e2bf8..632e114 100644
--- a/obexd/client/session.c
+++ b/obexd/client/session.c
@@ -110,6 +110,7 @@ struct obc_session {
guint watch;
GQueue *queue;
guint process_id;
+ char *folder;
};
static GSList *sessions = NULL;
@@ -242,6 +243,7 @@ static void session_free(struct obc_session *session)
g_free(session->owner);
g_free(session->source);
g_free(session->destination);
+ g_free(session->folder);
g_free(session);
}
@@ -500,6 +502,7 @@ struct obc_session *obc_session_create(const char *source,
session->destination = g_strdup(destination);
session->channel = channel;
session->queue = g_queue_new();
+ session->folder = g_strdup("/");
if (owner)
obc_session_set_owner(session, owner, owner_disconnected);
@@ -930,6 +933,11 @@ const char *obc_session_get_target(struct obc_session *session)
return session->driver->target;
}
+const char *obc_session_get_folder(struct obc_session *session)
+{
+ return session->folder;
+}
+
static void setpath_complete(struct obc_session *session,
struct obc_transfer *transfer,
GError *err, void *user_data)
@@ -957,12 +965,39 @@ static void setpath_op_complete(struct obc_session *session,
data->func(session, NULL, err, data->user_data);
}
+static void setpath_set_folder(struct obc_session *session, const char *cur)
+{
+ char *folder = NULL;
+ const char *delim;
+
+ delim = strrchr(session->folder, '/');
+ if (strlen(cur) == 0 || delim == NULL ||
+ (strcmp(cur, "..") == 0 && delim == session->folder)) {
+ folder = g_strdup("/");
+ } else {
+ if (strcmp(cur, "..") == 0) {
+ folder = g_strndup(session->folder,
+ delim - session->folder);
+ } else {
+ if (g_str_has_suffix(session->folder, "/"))
+ folder = g_strconcat(session->folder,
+ cur, NULL);
+ else
+ folder = g_strconcat(session->folder, "/",
+ cur, NULL);
+ }
+ }
+ g_free(session->folder);
+ session->folder = folder;
+}
+
static void setpath_cb(GObex *obex, GError *err, GObexPacket *rsp,
gpointer user_data)
{
struct pending_request *p = user_data;
struct setpath_data *data = p->data;
char *next;
+ char *current;
guint8 code;
p->req_id = 0;
@@ -982,6 +1017,9 @@ static void setpath_cb(GObex *obex, GError *err, GObexPacket *rsp,
return;
}
+ current = data->remaining[data->index - 1];
+ setpath_set_folder(p->session, current);
+
/* Ignore empty folder names to avoid resetting the current path */
while ((next = data->remaining[data->index]) && strlen(next) == 0)
data->index++;
diff --git a/obexd/client/session.h b/obexd/client/session.h
index 319d529..35899bc 100644
--- a/obexd/client/session.h
+++ b/obexd/client/session.h
@@ -58,6 +58,8 @@ const char *obc_session_register(struct obc_session *session,
const void *obc_session_get_attribute(struct obc_session *session,
int attribute_id);
+const char *obc_session_get_folder(struct obc_session *session);
+
guint obc_session_queue(struct obc_session *session,
struct obc_transfer *transfer,
session_callback_t func, void *user_data,
--
1.8.3.4
^ permalink raw reply related
* [PATCH v2 2/2] obexd: Add property Folder to MAP message
From: Christian Fetzer @ 2013-08-30 12:45 UTC (permalink / raw)
To: linux-bluetooth
In-Reply-To: <1377866712-5253-1-git-send-email-christian.fetzer@oss.bmw-carit.de>
From: Christian Fetzer <christian.fetzer@bmw-carit.de>
diff --git a/obexd/client/map.c b/obexd/client/map.c
index 8864a54..03be77f 100644
--- a/obexd/client/map.c
+++ b/obexd/client/map.c
@@ -123,6 +123,7 @@ struct map_msg {
char *status;
uint64_t attachment_size;
uint8_t flags;
+ char *folder;
GDBusPendingPropertySet pending;
};
@@ -379,6 +380,7 @@ static void map_msg_free(void *data)
g_free(msg->path);
g_free(msg->subject);
g_free(msg->handle);
+ g_free(msg->folder);
g_free(msg->timestamp);
g_free(msg->sender);
g_free(msg->sender_address);
@@ -451,6 +453,16 @@ done:
msg->pending = 0;
}
+static gboolean get_folder(const GDBusPropertyTable *property,
+ DBusMessageIter *iter, void *data)
+{
+ struct map_msg *msg = data;
+
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &msg->folder);
+
+ return TRUE;
+}
+
static gboolean subject_exists(const GDBusPropertyTable *property, void *data)
{
struct map_msg *msg = data;
@@ -744,6 +756,7 @@ static const GDBusMethodTable map_msg_methods[] = {
};
static const GDBusPropertyTable map_msg_properties[] = {
+ { "Folder", "s", get_folder },
{ "Subject", "s", get_subject, NULL, subject_exists },
{ "Timestamp", "s", get_timestamp, NULL, timestamp_exists },
{ "Sender", "s", get_sender, NULL, sender_exists },
@@ -766,7 +779,8 @@ static const GDBusPropertyTable map_msg_properties[] = {
{ }
};
-static struct map_msg *map_msg_create(struct map_data *data, const char *handle)
+static struct map_msg *map_msg_create(struct map_data *data, const char *handle,
+ const char *folder)
{
struct map_msg *msg;
@@ -775,6 +789,7 @@ static struct map_msg *map_msg_create(struct map_data *data, const char *handle)
msg->path = g_strdup_printf("%s/message%s",
obc_session_get_path(data->session),
handle);
+ msg->folder = g_strdup(folder);
if (!g_dbus_register_interface(conn, msg->path, MAP_MSG_INTERFACE,
map_msg_methods, NULL,
@@ -953,7 +968,8 @@ static void msg_element(GMarkupParseContext *ctxt, const char *element,
msg = g_hash_table_lookup(data->messages, values[i]);
if (msg == NULL) {
- msg = map_msg_create(data, values[i]);
+ msg = map_msg_create(data, values[i],
+ obc_session_get_folder(data->session));
if (msg == NULL)
return;
}
--
1.8.3.4
^ permalink raw reply related
* Re: [PATCH v5 0/6] rfcomm: Implement rfcomm as a proper tty_port
From: Gianluca Anzolin @ 2013-08-30 17:49 UTC (permalink / raw)
To: Peter Hurley
Cc: Alexander Holler, gustavo, marcel, linux-bluetooth, gregkh,
jslaby
In-Reply-To: <521CE6E1.2020206@hurleysoftware.com>
On Tue, Aug 27, 2013 at 01:50:25PM -0400, Peter Hurley wrote:
> On 08/27/2013 09:57 AM, Alexander Holler wrote:
> >Am 19.08.2013 22:20, schrieb Peter Hurley:
> >>On 07/31/2013 01:50 PM, Peter Hurley wrote:
> >
> >>>I reviewed these changes and retested. All ok.
> >>
> >>Gustavo,
> >>
> >>This series fixes a crashing regression from 3.10+ forward.
> >>Why is this not in linux-next yet?
> >
> >3.8+ to be exact, just in case someone has to deal with older kernels.
>
> Thanks for the reminder.
>
> This series is too extensive to consider for -stable. Any ideas for
> how to address this crash for -stable?
>
> Regards,
> Peter Hurley
>
The tty refcount patch is needed but clearly not sufficient because the system
locks up when the device is released.
Unfortunately I cannot capture any oops, this is why I went and implemented the
tty port methods in the first place, inspired by the usb serial code.
I agree the patches are extensive and a solution is needed not only for 3.10
kernels but also for 3.11.
It's not clear for me how to debug the old code further. A couple of patches
to make the debug process easier were mentioned before but I cannot find
them. Could anybody point me at them?
Thank you,
Gianluca
^ permalink raw reply
* Re: [PATCH v5 0/6] rfcomm: Implement rfcomm as a proper tty_port
From: Alexander Holler @ 2013-08-30 21:26 UTC (permalink / raw)
To: Gianluca Anzolin
Cc: Peter Hurley, gustavo, marcel, linux-bluetooth, gregkh, jslaby
In-Reply-To: <20130830174916.GA7204@sottospazio.it>
Am 30.08.2013 19:49, schrieb Gianluca Anzolin:
> It's not clear for me how to debug the old code further. A couple of patches
> to make the debug process easier were mentioned before but I cannot find
> them. Could anybody point me at them?
I think that is the thread you are searching for:
https://lkml.org/lkml/2013/5/16/55
Regards,
Alexander Holler
^ permalink raw reply
* Re: [PATCH v5 0/6] rfcomm: Implement rfcomm as a proper tty_port
From: Peter Hurley @ 2013-08-30 22:02 UTC (permalink / raw)
To: Gianluca Anzolin
Cc: Alexander Holler, gustavo, marcel, linux-bluetooth, gregkh,
jslaby
In-Reply-To: <20130830174916.GA7204@sottospazio.it>
On 08/30/2013 01:49 PM, Gianluca Anzolin wrote:
> On Tue, Aug 27, 2013 at 01:50:25PM -0400, Peter Hurley wrote:
>> On 08/27/2013 09:57 AM, Alexander Holler wrote:
>>> Am 19.08.2013 22:20, schrieb Peter Hurley:
>>>> On 07/31/2013 01:50 PM, Peter Hurley wrote:
>>>
>>>>> I reviewed these changes and retested. All ok.
>>>>
>>>> Gustavo,
>>>>
>>>> This series fixes a crashing regression from 3.10+ forward.
>>>> Why is this not in linux-next yet?
>>>
>>> 3.8+ to be exact, just in case someone has to deal with older kernels.
>>
>> Thanks for the reminder.
>>
>> This series is too extensive to consider for -stable. Any ideas for
>> how to address this crash for -stable?
>>
>> Regards,
>> Peter Hurley
>>
>
> The tty refcount patch is needed but clearly not sufficient because the system
> locks up when the device is released.
>
> Unfortunately I cannot capture any oops, this is why I went and implemented the
> tty port methods in the first place, inspired by the usb serial code.
>
> I agree the patches are extensive and a solution is needed not only for 3.10
> kernels but also for 3.11.
>
> It's not clear for me how to debug the old code further. A couple of patches
> to make the debug process easier were mentioned before but I cannot find
> them. Could anybody point me at them?
I was thinking more along the lines of what we could go back and revert,
rather than re-engineering another solution.
Regards,
Peter Hurley
^ permalink raw reply
* Compatible Kernels of a certain BlueZ version
From: wei junping @ 2013-08-31 9:53 UTC (permalink / raw)
To: linux-bluetooth
Who can tell me how I know which kernel is compatible with which BlueZ
version, for example, BlueZ 5.7? I didn't find any info in the doc
folder of the package.
Thank you and Best Regards,
Tim Wei
^ permalink raw reply
* 3.11-rc2: unpriviledged user crashes kernel using bluetooth
From: Pavel Machek @ 2013-08-31 10:01 UTC (permalink / raw)
To: marcel, gustavo, johan.hedberg, linux-bluetooth, kernel list
Hi!
While trying to set up serial bluetooth connection between two
machines, the server machine died rather hard.
This is what I got on ssh:
Message from syslogd@duo at Aug 31 11:50:07 ...
kernel:Hardware name: LENOVO 17097HU/17097HU, BIOS 7BETD8WW (2.19 )
03/31/2011
Message from syslogd@duo at Aug 31 11:50:07 ...
kernel:task: e6d6a670 ti: e8fd8000 task.ti: e8fd8000
Message from syslogd@duo at Aug 31 11:50:07 ...
kernel:Stack:
Message from syslogd@duo at Aug 31 11:50:07 ...
kernel:Call Trace:
Message from syslogd@duo at Aug 31 11:50:07 ...
kernel:Code: 66 ff ff ff eb b9 ba 79 c9 b6 c0 89 d8 e8 58 ff ff ff eb
a0 8d b6 00 00 00 00 55 89 e5 83 ec 10 89 5d f4 89 c3 89 75 f8 89 7d
fc <81> 78 04 ad 4e ad de 0f 85 11 01 00 00 64 a1 4c 87 d2 c0 39 43
Message from syslogd@duo at Aug 31 11:50:07 ...
kernel:EIP: [<c04621f1>] do_raw_spin_lock+0x11/0x140 SS:ESP
0068:e8fd9e0c
Message from syslogd@duo at Aug 31 11:50:07 ...
kernel:CPU: 0 PID: 3822 Comm: modem-manager Tainted: G D W
3.11.0-rc2+ #306
Message from syslogd@duo at Aug 31 11:50:07 ...
kernel:Hardware name: LENOVO 17097HU/17097HU, BIOS 7BETD8WW (2.19 )
03/31/2011
Message from syslogd@duo at Aug 31 11:50:07 ...
kernel:task: e6d9a670 ti: e6d4e000 task.ti: e6d4e000
Message from syslogd@duo at Aug 31 11:50:07 ...
kernel:Stack:
Message from syslogd@duo at Aug 31 11:50:07 ...
kernel:Call Trace:
Message from syslogd@duo at Aug 31 11:50:07 ...
kernel:Code: 66 ff ff ff eb b9 ba 79 c9 b6 c0 89 d8 e8 58 ff ff ff eb
a0 8d b6 00 00 00 00 55 89 e5 83 ec 10 89 5d f4 89 c3 89 75 f8 89 7d
fc <81> 78 04 ad 4e ad de 0f 85 11 01 00 00 64 a1 4c 87 d2 c0 39 43
Message from syslogd@duo at Aug 31 11:50:07 ...
kernel:EIP: [<c04621f1>] do_raw_spin_lock+0x11/0x140 SS:ESP
0068:e6d4fe0c
. Python sources for client/server are at
http://tui.cvs.sourceforge.net/viewvc/tui/tui/liveview/
. My kernels like to warn about
Aug 31 11:46:37 duo kernel: WARNING: CPU: 1 PID: 1 at
net/wireless/reg.c:423 regulatory_init+0x92/0xff()
Aug 31 11:46:37 duo kernel: db.txt is empty, you should update it...
. 3.10 does not seem to be affected.
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
^ permalink raw reply
* Re: 3.11-rc2: unpriviledged user crashes kernel using bluetooth
From: Pavel Machek @ 2013-08-31 10:09 UTC (permalink / raw)
To: marcel, gustavo, johan.hedberg, linux-bluetooth, kernel list
In-Reply-To: <20130831100127.GA6711@amd.pavel.ucw.cz>
Hi!
> . Python sources for client/server are at
>
> http://tui.cvs.sourceforge.net/viewvc/tui/tui/liveview/
>
> . My kernels like to warn about
>
> Aug 31 11:46:37 duo kernel: WARNING: CPU: 1 PID: 1 at
> net/wireless/reg.c:423 regulatory_init+0x92/0xff()
> Aug 31 11:46:37 duo kernel: db.txt is empty, you should update it...
>
> . 3.10 does not seem to be affected.
When I said 3.10 was not affected, I was wrong. 3.10 survived the
test, but when I attempted to reboot the box, I got
WARNING: at lib/list_debug.c:59 __list_del_entry+0xac/0xe0()
list_del_corruption. prev->next should be f44fffd4, but was f44c402c
...
...Comm: bluetoothd....
Call trace:
...
__list_del_entry
cd_forget
evict
iput
System is debian stable with gnome2.
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
^ permalink raw reply
* 3.10: unpriviledged user crashes kernel using bluetooth
From: Pavel Machek @ 2013-08-31 10:12 UTC (permalink / raw)
To: marcel, gustavo, johan.hedberg, linux-bluetooth, kernel list
In-Reply-To: <20130831100933.GA7029@amd.pavel.ucw.cz>
On Sat 2013-08-31 12:09:33, Pavel Machek wrote:
> Hi!
>
> > . Python sources for client/server are at
> >
> > http://tui.cvs.sourceforge.net/viewvc/tui/tui/liveview/
> >
> > . My kernels like to warn about
> >
> > Aug 31 11:46:37 duo kernel: WARNING: CPU: 1 PID: 1 at
> > net/wireless/reg.c:423 regulatory_init+0x92/0xff()
> > Aug 31 11:46:37 duo kernel: db.txt is empty, you should update it...
> >
> > . 3.10 does not seem to be affected.
>
> When I said 3.10 was not affected, I was wrong. 3.10 survived the
> test, but when I attempted to reboot the box, I got
>
> WARNING: at lib/list_debug.c:59 __list_del_entry+0xac/0xe0()
> list_del_corruption. prev->next should be f44fffd4, but was f44c402c
> ...
> ...Comm: bluetoothd....
> Call trace:
> ...
> __list_del_entry
> cd_forget
> evict
> iput
Aha, I have even better dump in the logs:
<6>cfg80211: Calling CRDA to update world regulatory domain
<6>wlan0: authenticate with 00:11:95:05:30:d7
<6>wlan0: send auth to 00:11:95:05:30:d7 (try 1/3)
<6>iwl3945 0000:03:00.0 wlan0: disabling HT as WMM/QoS is not
supported by the AP
<6>iwl3945 0000:03:00.0 wlan0: disabling VHT as WMM/QoS is not
supported by the AP
<6>wlan0: RX AssocResp from 00:11:95:05:30:d7 (capab=0x401 status=0
aid=2)
<6>wlan0: associated
<4>the code is fine but needs lockdep annotation.
<4>turning off the locking correctness validator.
<4> edd4cc30 f3187db0 c095a48c f3187df0 c027c43e c0b27dcc f5f71670
00000000
<4> 00000000 f3187df4 00000246 edd4cc30 c10253b0 00000000 00000000
c10253b0
<4> [<c095a48c>] dump_stack+0x16/0x18
<4> [<c027c43e>] __lock_acquire+0x71e/0xcf0
<4> [<c027ca74>] lock_acquire+0x64/0x80
<4> [<c04e59ec>] ? tty_buffer_flush+0x1c/0xd0
<4> [<c095d52b>] _raw_spin_lock_irqsave+0x3b/0x50
<4> [<c04e59ec>] ? tty_buffer_flush+0x1c/0xd0
<4> [<c04e59ec>] tty_buffer_flush+0x1c/0xd0
<4> [<c04df38f>] tty_ioctl+0x5bf/0xa80
<4> [<c027c0a6>] ? __lock_acquire+0x386/0xcf0
<4> [<c02e4899>] do_vfs_ioctl+0x89/0x5b0
<4> [<c0455873>] ? debug_check_no_obj_freed+0xe3/0x190
<4> [<c02e2ac8>] ? final_putname+0x18/0x40
<4> [<c095e4b8>] sysenter_do_call+0x12/0x31
<6>wlan0: deauthenticated from 00:11:95:05:30:d7 (Reason: 3)
<6>cfg80211: Calling CRDA to update world regulatory domain
<6>wlan0: authenticate with 00:11:95:05:30:d7
<6>wlan0: send auth to 00:11:95:05:30:d7 (try 1/3)
<6>wlan0: authenticated
<6>iwl3945 0000:03:00.0 wlan0: disabling HT as WMM/QoS is not
supported by the AP
<6>iwl3945 0000:03:00.0 wlan0: disabling VHT as WMM/QoS is not
supported by the AP
<6>wlan0: associate with 00:11:95:05:30:d7 (try 1/3)
<6>wlan0: RX AssocResp from 00:11:95:05:30:d7 (capab=0x401 status=0
aid=2)
<6>wlan0: associated
<6>wlan0: deauthenticated from 00:11:95:05:30:d7 (Reason: 3)
<6>cfg80211: Calling CRDA to update world regulatory domain
<6>wlan0: authenticated
<6>iwl3945 0000:03:00.0 wlan0: disabling HT as WMM/QoS is not
supported by the AP
<6>iwl3945 0000:03:00.0 wlan0: disabling VHT as WMM/QoS is not
supported by the AP
Broadcast message from root@duo (console) (Sat Aug 31 12:05:57 2013):
The system is going down for reboot NOW!
<7>uhci_hcd 0000:00:1d.3: release dev 2 ep81-INT, period 1, phase 0,
23 us
<4>WARNING: at lib/list_debug.c:59 __list_del_entry+0xac/0xe0()
<4>list_del corruption. prev->next should be f44fffd4, but was
f44c402c
<4>Modules linked in:
<4>CPU: 0 PID: 2801 Comm: bluetoothd Tainted: G W 3.10.0+
#293
<4>Hardware name: LENOVO 17097HU/17097HU, BIOS 7BETD8WW (2.19 )
03/31/2011
<4> 0000003b f0933e14 c095a48c f0933e3c c022c96f c0b47bcc f0933e68
0000003b
<4> c0454ddc c0454ddc f44c402c f44fffd4 f44c4000 f0933e54 c022ca0e
00000009
<4> f0933e4c c0b47bcc f0933e68 f0933e74 c0454ddc c0b474dd 0000003b
c0b47bcc
<4>Call Trace:
<4> [<c095a48c>] dump_stack+0x16/0x18
<4> [<c022c96f>] warn_slowpath_common+0x5f/0x80
<4> [<c0454ddc>] ? __list_del_entry+0xac/0xe0
<4> [<c0454ddc>] ? __list_del_entry+0xac/0xe0
<4> [<c0454ddc>] __list_del_entry+0xac/0xe0
<4> [<c02d9276>] cd_forget+0x26/0x60
<4> [<c02ebc69>] evict+0x119/0x170
<4> [<c02ebda6>] iput+0xe6/0x170
<4> [<c02e950f>] d_kill+0xaf/0x100
<4> [<c02e9bf6>] dput+0xc6/0x170
<4> [<c02d6d84>] __fput+0x154/0x200
<4> [<c02d6e98>] ____fput+0x8/0x10
<4> [<c0247a61>] task_work_run+0x81/0xb0
<1>BUG: unable to handle kernel paging request at fffffffc
<1>IP: [<c02d3943>] filp_close+0x13/0x80
<4>*pde = 00d14067 *pte = 00000000
<4>Oops: 0000 [#2] SMP DEBUG_PAGEALLOC
<4>Modules linked in:
<0>CPU: 1 PID: 3735 Comm: python Tainted: G D W 3.10.0+ #293
<0>Hardware name: LENOVO 17097HU/17097HU, BIOS 7BETD8WW (2.19 )
03/31/2011
<0>task: f29c6670 ti: edf28000 task.ti: edf28000
<4>EIP: 0060:[<c02d3943>] EFLAGS: 00210282 CPU: 1
<4>EIP is at filp_close+0x13/0x80
<4>EAX: ffffffc0 EBX: ffffffc0 ECX: 00000000 EDX: ee297f00
<4>ESI: ee297f00 EDI: f4779be0 EBP: edf29de0 ESP: edf29dd0
<4> DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
<4>CR0: 8005003b CR2: fffffffc CR3: 00d13000 CR4: 00000710
<4>DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
<4>DR6: ffff0ff0 DR7: 00000400
<0>Stack:
<4> 00200246 00000000 0000001f f4779be0 edf29e0c c02ee2a5 00000002
00000001
<4> 00000000 c02ee21a 00000000 ee297f00 f29c6670 ee297f00 f29c6a54
edf29e20
<4> c02ee372 edfdadc0 f29c6670 f29c6a54 edf29e74 c0231e25 c02eff30
00000000
<0>Call Trace:
<4> [<c02ee2a5>] put_files_struct+0xa5/0x130
<4> [<c02ee21a>] ? put_files_struct+0x1a/0x130
<4> [<c02ee372>] exit_files+0x42/0x60
<4> [<c0231e25>] do_exit+0x205/0x850
<4> [<c02eff30>] ? mntput_no_expire+0x30/0xf0
<4> [<c023d454>] ? get_signal_to_deliver+0xa4/0x570
<4> [<c02324a9>] do_group_exit+0x39/0xa0
<4> [<c023d540>] get_signal_to_deliver+0x190/0x570
<4> [<c095db2d>] ? _raw_spin_unlock+0x1d/0x20
<4> [<c0201237>] do_signal+0x37/0x930
<4> [<c07eccc6>] ? sys_recv+0x36/0x40
<4> [<c07ecd7c>] ? SyS_socketcall+0xac/0x290
<4> [<c0201b68>] do_notify_resume+0x38/0x50
<4> [<c095dee2>] work_notifysig+0x24/0x2a
<0>Code: 09 3d fc fd ff ff 74 02 5d c3 b8 fc ff ff ff 5d c3 8d b4 26
00 00 00 00 55 89 e5 83 ec 10 89 5d f4 89 c3 89 75 f8 89 d6 89 7d fc
<8b> 40 3c 85 c0 74 4a 8b 43 14 85 c0 74 3f 8b 48 30 85 c9 74 38
<0>EIP: [<c02d3943>] filp_close+0x13/0x80 SS:ESP 0068:edf29dd0
<4>CR2: 00000000fffffffc
<4>---[ end trace 6a53890e7df0f3dc ]---
<1>Fixing recursive fault but reboot is needed!
<6>wlan0: deauthenticating from 00:11:95:05:30:d7 by local choice
(reason=3)
<6>cfg80211: Calling CRDA to update world regulatory domain
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox