Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 57a53a0b authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'for-upstream' of...

Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next



Johan Hedberg says:

====================
pull request: bluetooth-next 2017-07-01

Here are some more Bluetooth patches for the 4.13 kernel:

 - Added support for Broadcom BCM43430 controllers
 - Added sockaddr length checks before accessing sa_family
 - Fixed possible "might sleep" errors in bnep, cmtp and hidp modules
 - A few other minor fixes

Please let me know if there are any issues pulling. Thanks.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 2cb5c8e3 feb16722
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -295,6 +295,7 @@ static const struct {
	{ 0x410e, "BCM43341B0"	},	/* 002.001.014 */
	{ 0x4406, "BCM4324B3"	},	/* 002.004.006 */
	{ 0x610c, "BCM4354"	},	/* 003.001.012 */
	{ 0x2209, "BCM43430A1"  },	/* 001.002.009 */
	{ }
};

+10 −2
Original line number Diff line number Diff line
@@ -419,8 +419,7 @@ static int bcm_setup(struct hci_uart *hu)
	if (err)
		return err;

	err = bcm_request_irq(bcm);
	if (!err)
	if (!bcm_request_irq(bcm))
		err = bcm_setup_sleep(hu);

	return err;
@@ -657,6 +656,15 @@ static const struct dmi_system_id bcm_wrong_irq_dmi_table[] = {
		},
		.driver_data = &acpi_active_low,
	},
	{
		.ident = "Asus T100CHI",
		.matches = {
			DMI_EXACT_MATCH(DMI_SYS_VENDOR,
					"ASUSTeK COMPUTER INC."),
			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T100CHI"),
		},
		.driver_data = &acpi_active_low,
	},
	{	/* Handle ThinkPad 8 tablets with BCM2E55 chipset ACPI ID */
		.ident = "Lenovo ThinkPad 8",
		.matches = {
+2 −2
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@

#include "hci_uart.h"

struct serdev_device_ops hci_serdev_client_ops;
static struct serdev_device_ops hci_serdev_client_ops;

static inline void hci_uart_tx_complete(struct hci_uart *hu, int pkt_type)
{
@@ -268,7 +268,7 @@ static int hci_uart_receive_buf(struct serdev_device *serdev, const u8 *data,
	return count;
}

struct serdev_device_ops hci_serdev_client_ops = {
static struct serdev_device_ops hci_serdev_client_ops = {
	.receive_buf = hci_uart_receive_buf,
	.write_wakeup = hci_uart_write_wakeup,
};
+5 −6
Original line number Diff line number Diff line
@@ -481,16 +481,16 @@ static int bnep_session(void *arg)
	struct net_device *dev = s->dev;
	struct sock *sk = s->sock->sk;
	struct sk_buff *skb;
	wait_queue_t wait;
	DEFINE_WAIT_FUNC(wait, woken_wake_function);

	BT_DBG("");

	set_user_nice(current, -15);

	init_waitqueue_entry(&wait, current);
	add_wait_queue(sk_sleep(sk), &wait);
	while (1) {
		set_current_state(TASK_INTERRUPTIBLE);
		/* Ensure session->terminate is updated */
		smp_mb__before_atomic();

		if (atomic_read(&s->terminate))
			break;
@@ -512,9 +512,8 @@ static int bnep_session(void *arg)
				break;
		netif_wake_queue(dev);

		schedule();
		wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
	}
	__set_current_state(TASK_RUNNING);
	remove_wait_queue(sk_sleep(sk), &wait);

	/* Cleanup session */
@@ -663,7 +662,7 @@ int bnep_del_connection(struct bnep_conndel_req *req)
	s = __bnep_get_session(req->dst);
	if (s) {
		atomic_inc(&s->terminate);
		wake_up_process(s->task);
		wake_up_interruptible(sk_sleep(s->sock->sk));
	} else
		err = -ENOENT;

+10 −7
Original line number Diff line number Diff line
@@ -280,16 +280,16 @@ static int cmtp_session(void *arg)
	struct cmtp_session *session = arg;
	struct sock *sk = session->sock->sk;
	struct sk_buff *skb;
	wait_queue_t wait;
	DEFINE_WAIT_FUNC(wait, woken_wake_function);

	BT_DBG("session %p", session);

	set_user_nice(current, -15);

	init_waitqueue_entry(&wait, current);
	add_wait_queue(sk_sleep(sk), &wait);
	while (1) {
		set_current_state(TASK_INTERRUPTIBLE);
		/* Ensure session->terminate is updated */
		smp_mb__before_atomic();

		if (atomic_read(&session->terminate))
			break;
@@ -306,9 +306,8 @@ static int cmtp_session(void *arg)

		cmtp_process_transmit(session);

		schedule();
		wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
	}
	__set_current_state(TASK_RUNNING);
	remove_wait_queue(sk_sleep(sk), &wait);

	down_write(&cmtp_session_sem);
@@ -393,7 +392,7 @@ int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock)
		err = cmtp_attach_device(session);
		if (err < 0) {
			atomic_inc(&session->terminate);
			wake_up_process(session->task);
			wake_up_interruptible(sk_sleep(session->sock->sk));
			up_write(&cmtp_session_sem);
			return err;
		}
@@ -431,7 +430,11 @@ int cmtp_del_connection(struct cmtp_conndel_req *req)

		/* Stop session thread */
		atomic_inc(&session->terminate);
		wake_up_process(session->task);

		/* Ensure session->terminate is updated */
		smp_mb__after_atomic();

		wake_up_interruptible(sk_sleep(session->sock->sk));
	} else
		err = -ENOENT;

Loading