From 448e5100e0e021df3ec2698b6516ef25d94c79dc Mon Sep 17 00:00:00 2001 From: "h.sandeep" Date: Tue, 15 Nov 2016 14:34:01 +0530 Subject: [PATCH 01/16] Bluetooth: add to support LE privacy 1.2 & MGMT to load device RPA resolution RPA resolution support of peer device to be checked before starting directed advertising. This patch load the resolution support info of device and check before starting directed advertising. Change-Id: I9c982e72e83024bcb493488e29c33aba7ffbf485 Signed-off-by: h.sandeep [Fix coding style and adjust commit-msg] Signed-off-by: Seung-Woo Kim --- include/net/bluetooth/hci_core.h | 5 +++++ include/net/bluetooth/mgmt_tizen.h | 7 +++++++ net/bluetooth/hci_conn.c | 28 ++++++++++++++++++++++++++ net/bluetooth/hci_core.c | 14 +++++++++++++ net/bluetooth/mgmt.c | 41 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 95 insertions(+) diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index 185214e..0edf790 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h @@ -130,6 +130,9 @@ struct smp_irk { bdaddr_t bdaddr; u8 addr_type; u8 val[16]; +#ifdef CONFIG_TIZEN_WIP + u8 rpa_res_support; +#endif }; struct link_key { @@ -1053,6 +1056,8 @@ int hci_get_dev_list(void __user *arg); int hci_get_dev_info(void __user *arg); int hci_get_conn_list(void __user *arg); #ifdef CONFIG_TIZEN_WIP +int hci_set_rpa_res_support(struct hci_dev *hdev, bdaddr_t *bdaddr, + u8 addr_type, u8 enabled); u32 get_link_mode(struct hci_conn *conn); #endif int hci_get_conn_info(struct hci_dev *hdev, void __user *arg); diff --git a/include/net/bluetooth/mgmt_tizen.h b/include/net/bluetooth/mgmt_tizen.h index baf2de4..4afb984 100644 --- a/include/net/bluetooth/mgmt_tizen.h +++ b/include/net/bluetooth/mgmt_tizen.h @@ -220,6 +220,13 @@ struct mgmt_rp_le_set_data_length { } __packed; #define MGMT_LE_SET_DATA_LENGTH_RSP_SIZE 3 +#define MGMT_OP_SET_DEV_RPA_RES_SUPPORT (TIZEN_OP_CODE_BASE + 0x19) +struct mgmt_cp_set_dev_rpa_res_support { + struct mgmt_addr_info addr; + __u8 res_support; +} __packed; +#define MGMT_OP_SET_DEV_RPA_RES_SUPPORT_SIZE 8 + /* BEGIN TIZEN_Bluetooth :: name update changes */ #define MGMT_EV_DEVICE_NAME_UPDATE (TIZEN_EV_BASE + 0x01) struct mgmt_ev_device_name_update { diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c index b133366..598cb67 100644 --- a/net/bluetooth/hci_conn.c +++ b/net/bluetooth/hci_conn.c @@ -720,13 +720,22 @@ static void hci_req_add_le_create_conn(struct hci_request *req, conn->state = BT_CONNECT; } +#ifdef CONFIG_TIZEN_WIP +static void hci_req_directed_advertising(struct hci_request *req, + struct hci_conn *conn, + u8 rpa_res_support) +#else static void hci_req_directed_advertising(struct hci_request *req, struct hci_conn *conn) +#endif { struct hci_dev *hdev = req->hdev; struct hci_cp_le_set_adv_param cp; u8 own_addr_type; u8 enable; +#ifdef CONFIG_TIZEN_WIP + bool require_privacy; +#endif /* Clear the HCI_LE_ADV bit temporarily so that the * hci_update_random_address knows that it's safe to go ahead @@ -735,11 +744,26 @@ static void hci_req_directed_advertising(struct hci_request *req, */ clear_bit(HCI_LE_ADV, &hdev->dev_flags); +#ifdef CONFIG_TIZEN_WIP + /* Set require_privacy to true if remote device is able to + * resolve RPA (As per BT spec 4.2 & Enhanced privacy feature) + * otherwise, set require_privacy to false so that the remote + * device has a chance of identifying us. + */ + if (rpa_res_support) + require_privacy = true; + else + require_privacy = false; + + if (hci_update_random_address(req, require_privacy, &own_addr_type) < 0) + return; +#else /* Set require_privacy to false so that the remote device has a * chance of identifying us. */ if (hci_update_random_address(req, false, &own_addr_type) < 0) return; +#endif memset(&cp, 0, sizeof(cp)); cp.type = LE_ADV_DIRECT_IND; @@ -842,7 +866,11 @@ struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst, return ERR_PTR(-EBUSY); } +#ifdef CONFIG_TIZEN_WIP + hci_req_directed_advertising(&req, conn, irk->rpa_res_support); +#else hci_req_directed_advertising(&req, conn); +#endif goto create_conn; } diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index c599077..be8bb5c 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c @@ -2567,6 +2567,20 @@ void hci_remove_irk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type) } #ifdef CONFIG_TIZEN_WIP +int hci_set_rpa_res_support(struct hci_dev *hdev, bdaddr_t *bdaddr, + u8 addr_type, u8 enabled) +{ + struct smp_irk *irk; + + irk = hci_find_irk_by_addr(hdev, bdaddr, addr_type); + if (!irk) + return -ENOENT; + + irk->rpa_res_support = enabled; + + return 0; +} + /* Timeout Error Event is being handled */ static void hci_tx_timeout_error_evt(struct hci_dev *hdev) { diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c index e2ae0fd..e6c8ff3 100644 --- a/net/bluetooth/mgmt.c +++ b/net/bluetooth/mgmt.c @@ -5226,6 +5226,46 @@ done: hci_dev_unlock(hdev); return err; } + +static int set_dev_rpa_res_support(struct sock *sk, struct hci_dev *hdev, + void *data, u16 len) +{ + struct mgmt_cp_set_dev_rpa_res_support *cp = data; + int err; + + BT_DBG("Set resolve RPA as %u for %s", cp->res_support, hdev->name); + + hci_dev_lock(hdev); + + if (!lmp_le_capable(hdev)) { + err = cmd_status(sk, hdev->id, + MGMT_OP_SET_DEV_RPA_RES_SUPPORT, + MGMT_STATUS_NOT_SUPPORTED); + goto unlocked; + } + + if (!hdev_is_powered(hdev)) { + err = cmd_status(sk, hdev->id, + MGMT_OP_SET_DEV_RPA_RES_SUPPORT, + MGMT_STATUS_REJECTED); + goto unlocked; + } + + if (hci_set_rpa_res_support(hdev, &cp->addr.bdaddr, cp->addr.type, + cp->res_support)) { + err = cmd_complete(sk, hdev->id, + MGMT_OP_SET_DEV_RPA_RES_SUPPORT, + MGMT_STATUS_NOT_PAIRED, NULL, 0); + goto unlocked; + } + + err = cmd_complete(sk, hdev->id, MGMT_OP_SET_DEV_RPA_RES_SUPPORT, + MGMT_STATUS_SUCCESS, NULL, 0); + +unlocked: + hci_dev_unlock(hdev); + return err; +} /* END TIZEN_Bluetooth */ #endif @@ -8437,6 +8477,7 @@ static const struct mgmt_handler tizen_mgmt_handlers[] = { MGMT_LE_READ_HOST_SUGGESTED_DATA_LENGTH_SIZE }, { set_le_data_length_params, false, MGMT_LE_SET_DATA_LENGTH_SIZE }, + { set_dev_rpa_res_support, false, MGMT_OP_SET_DEV_RPA_RES_SUPPORT_SIZE }, }; #endif -- 2.7.4 From 4d7bf53b8dea440ab5c395e83e71a3e69cae9e7d Mon Sep 17 00:00:00 2001 From: "h.sandeep" Date: Tue, 15 Nov 2016 14:42:18 +0530 Subject: [PATCH 02/16] Bluetooth: Add MGMT interface for setting IRK It is required to set IRK from BlueZ if privacy feature is disabled, so this patch adds setting IRK interface to MGMT. Change-Id: I2343ce34c894ad24557218ed41b61151caa8a1a5 Signed-off-by: h.sandeep Signed-off-by: Seung-Woo Kim --- include/net/bluetooth/mgmt_tizen.h | 6 ++++++ net/bluetooth/mgmt.c | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/include/net/bluetooth/mgmt_tizen.h b/include/net/bluetooth/mgmt_tizen.h index 4afb984..322c2a7 100644 --- a/include/net/bluetooth/mgmt_tizen.h +++ b/include/net/bluetooth/mgmt_tizen.h @@ -227,6 +227,12 @@ struct mgmt_cp_set_dev_rpa_res_support { } __packed; #define MGMT_OP_SET_DEV_RPA_RES_SUPPORT_SIZE 8 +#define MGMT_OP_SET_IRK (TIZEN_OP_CODE_BASE + 0x1A) +struct mgmt_cp_set_irk { + uint8_t irk[16]; +} __packed; +#define MGMT_SET_IRK_SIZE 16 + /* BEGIN TIZEN_Bluetooth :: name update changes */ #define MGMT_EV_DEVICE_NAME_UPDATE (TIZEN_EV_BASE + 0x01) struct mgmt_ev_device_name_update { diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c index e6c8ff3..f4f556a 100644 --- a/net/bluetooth/mgmt.c +++ b/net/bluetooth/mgmt.c @@ -5266,6 +5266,31 @@ unlocked: hci_dev_unlock(hdev); return err; } + +static int set_irk(struct sock *sk, struct hci_dev *hdev, void *cp_data, + u16 len) +{ + struct mgmt_cp_set_irk *cp = cp_data; + int err; + + BT_DBG("request for %s", hdev->name); + + hci_dev_lock(hdev); + + if (!lmp_le_capable(hdev)) { + err = cmd_status(sk, hdev->id, MGMT_OP_SET_IRK, + MGMT_STATUS_NOT_SUPPORTED); + goto unlocked; + } + + memcpy(hdev->irk, cp->irk, sizeof(hdev->irk)); + + err = cmd_complete(sk, hdev->id, MGMT_OP_SET_IRK, 0, NULL, 0); + +unlocked: + hci_dev_unlock(hdev); + return err; +} /* END TIZEN_Bluetooth */ #endif @@ -8478,6 +8503,7 @@ static const struct mgmt_handler tizen_mgmt_handlers[] = { { set_le_data_length_params, false, MGMT_LE_SET_DATA_LENGTH_SIZE }, { set_dev_rpa_res_support, false, MGMT_OP_SET_DEV_RPA_RES_SUPPORT_SIZE }, + { set_irk, false, MGMT_SET_IRK_SIZE }, }; #endif -- 2.7.4 From 5ce9a064d53f4567aad1977818ec5388c05684f7 Mon Sep 17 00:00:00 2001 From: "h.sandeep" Date: Mon, 21 Nov 2016 15:53:26 +0530 Subject: [PATCH 03/16] Bluetooth: Fix IRK dstribution issue when Privacy is disabled The devices, like Android 6.x, which don't support privacy 1.2 couldn't make BLE connection to the device which doesn't distribute IRK when pairing because they use use wrong address type. For compatibility, it needs to distribute IRK even though Privacy feature is disabled. So setting IRK interface is added and BlueZ will set IRK if privacy feature is disabled. And when BLE pairing, IRK will be always distributed. Change-Id: I196b6e726bff3a396ba040201c760f74ddfba946 Signed-off-by: h.sandeep --- net/bluetooth/smp.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c index 08ac8d9..57244f4 100644 --- a/net/bluetooth/smp.c +++ b/net/bluetooth/smp.c @@ -59,6 +59,11 @@ /* Maximum message length that can be passed to aes_cmac */ #define CMAC_MSG_MAX 80 +#ifdef CONFIG_TIZEN_WIP +#define ZERO_KEY "\x00\x00\x00\x00\x00\x00\x00\x00" \ + "\x00\x00\x00\x00\x00\x00\x00\x00" +#endif + enum { SMP_FLAG_TK_VALID, SMP_FLAG_CFM_PENDING, @@ -604,8 +609,13 @@ static void build_pairing_cmd(struct l2cap_conn *conn, if (test_bit(HCI_RPA_RESOLVING, &hdev->dev_flags)) remote_dist |= SMP_DIST_ID_KEY; +#ifdef CONFIG_TIZEN_WIP + if (memcmp(hdev->irk, ZERO_KEY, 16)) + local_dist |= SMP_DIST_ID_KEY; +#else if (test_bit(HCI_PRIVACY, &hdev->dev_flags)) local_dist |= SMP_DIST_ID_KEY; +#endif if (test_bit(HCI_SC_ENABLED, &hdev->dev_flags) && (authreq & SMP_AUTH_SC)) { -- 2.7.4 From c9fc83776bd984b65a1b3b24207c47bf44a69326 Mon Sep 17 00:00:00 2001 From: Inki Dae Date: Fri, 25 Nov 2016 14:41:49 +0900 Subject: [PATCH 04/16] misc: add Tizen global lock module This module is enhanced version - including some refactoring and bug fixups - of SGL module which resolves rendering order issue of Utgard DDK. Change-Id: I94a59232e31fb7bba1be22c463b8c9c469667a8b Signed-off-by: Inki Dae --- drivers/misc/tizen_global_lock.c | 35 +++++++++++++++++++++++++++++++---- drivers/misc/tizen_global_lock.h | 21 +++++++++++++++++---- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/drivers/misc/tizen_global_lock.c b/drivers/misc/tizen_global_lock.c index cc5fb89..6fdd900 100644 --- a/drivers/misc/tizen_global_lock.c +++ b/drivers/misc/tizen_global_lock.c @@ -27,6 +27,9 @@ #define TGL_DEV_NAME "tgl" +#define TGL_VERSION_MAJOR 1 +#define TGL_VERSION_MINOR 1 + #define TGL_HASH_BITS 4 #define TGL_HASH_BUCKETS (1 << TGL_HASH_BITS) @@ -35,12 +38,15 @@ /** * struct tgl_device - tgl device structure * @dev: (misc )device pointer + * @version: version data * @heads: hash heads for global node data * @lock: lock for hash heads */ static struct tgl_device { struct device *dev; + struct tgl_ver_data version; + struct hlist_head heads[TGL_HASH_BUCKETS]; struct mutex lock; } tgl; @@ -406,6 +412,18 @@ static struct tgl_node *tgl_find_node(struct hlist_head *heads, return found; } +static int tgl_get_version(struct tgl_session *session, void __user *arg) +{ + struct tgl_ver_data ver_data; + + memcpy(&ver_data, &tgl.version, sizeof(ver_data)); + + if (copy_to_user(arg, &ver_data, sizeof(ver_data))) + return -EFAULT; + + return 0; +} + static int tgl_register(struct tgl_session *session, void __user *arg) { struct tgl_reg_data reg_data; @@ -596,7 +614,6 @@ static int tgl_lock(struct tgl_session *session, void __user *arg) } /* add to waiter */ - INIT_LIST_HEAD(&wait_node.node); mutex_lock(&data->lock); list_add_tail(&wait_node.node, &data->list); mutex_unlock(&data->lock); @@ -673,7 +690,7 @@ static int tgl_unlock(struct tgl_session *session, void __user *arg) node = tgl_find_node(session->heads, lock_data.key); if (node) { /* check waiter */ - tgl_remove_wait_node(data, session); + tgl_remove_wait_node(node->data, session); mutex_unlock(&session->lock); return 0; } @@ -766,6 +783,12 @@ static long tgl_ioctl(struct file *file, unsigned int cmd, unsigned long arg) int ret; switch (cmd) { + case TGL_IOCTL_GET_VERSION: + ret = tgl_get_version(session, (void __user *)arg); + if (ret) + dev_err(tgl.dev, + "%s: failed to get version[%d]\n", + __func__, ret); case TGL_IOCTL_REGISTER: ret = tgl_register(session, (void __user *)arg); if (ret) @@ -807,8 +830,8 @@ static long tgl_ioctl(struct file *file, unsigned int cmd, unsigned long arg) break; default: dev_err(tgl.dev, - "%s: failed to call ioctl: tgid[%d]\n", - __func__, task_tgid_nr(current)); + "%s: failed to call ioctl: tgid[%d]:0x%x\n", + __func__, task_tgid_nr(current), cmd); ret = -ENOTTY; break; } @@ -834,8 +857,12 @@ static struct miscdevice tgl_misc_device = { static int __init tgl_init(void) { + struct tgl_ver_data *version = &tgl.version; int ret, i; + version->major = TGL_VERSION_MAJOR; + version->minor = TGL_VERSION_MINOR; + ret = misc_register(&tgl_misc_device); if (ret) { pr_err("%s: failed to register misc device[%d]\n", diff --git a/drivers/misc/tizen_global_lock.h b/drivers/misc/tizen_global_lock.h index 1f3c6b4..6203812 100644 --- a/drivers/misc/tizen_global_lock.h +++ b/drivers/misc/tizen_global_lock.h @@ -10,8 +10,8 @@ * by the Free Software Foundation. */ -#ifndef __TGL__ -#define __TGL__ +#ifndef __TIZEN_GLOBAL_LOOK_H__ +#define __TIZEN_GLOBAL_LOOK_H__ #define TGL_IOCTL_BASE 0x32 #define TGL_IO(nr) _IO(TGL_IOCTL_BASE, nr) @@ -20,6 +20,16 @@ #define TGL_IOWR(nr, type) _IOWR(TGL_IOCTL_BASE, nr, type) /** + * struct tgl_ver_data - tgl version data structure + * @major: major version + * @minor: minor version + */ +struct tgl_ver_data { + unsigned int major; + unsigned int minor; +}; + +/** * struct tgl_reg_data - tgl register data structure * @key: lookup key * @timeout_ms: timeout value for waiting event @@ -65,7 +75,8 @@ struct tgl_usr_data { }; enum { - _TGL_REGISTER = 1, + _TGL_GET_VERSION, + _TGL_REGISTER, _TGL_UNREGISTER, _TGL_LOCK, _TGL_UNLOCK, @@ -73,6 +84,8 @@ enum { _TGL_GET_DATA, }; +/* get version information */ +#define TGL_IOCTL_GET_VERSION TGL_IOR(_TGL_GET_VERSION, struct tgl_ver_data) /* register key */ #define TGL_IOCTL_REGISTER TGL_IOW(_TGL_REGISTER, struct tgl_reg_data) /* unregister key */ @@ -86,4 +99,4 @@ enum { /* get user data with key */ #define TGL_IOCTL_GET_DATA TGL_IOR(_TGL_GET_DATA, struct tgl_usr_data) -#endif /* __TGL__ */ +#endif /* __TIZEN_GLOBAL_LOOK_H__ */ -- 2.7.4 From ddfb8a5b09ee2de177bd279569a3218e2c920f3e Mon Sep 17 00:00:00 2001 From: Inki Dae Date: Fri, 25 Nov 2016 14:45:16 +0900 Subject: [PATCH 05/16] arm: config: tizen_tm1_defconfig: enable Tizen global lock This patch enables Tizen global lock instead of SGL module. Change-Id: Ida728764728980b6484e6e2b178aefc7590b460c Signed-off-by: Inki Dae --- arch/arm/configs/tizen_tm1_defconfig | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/arm/configs/tizen_tm1_defconfig b/arch/arm/configs/tizen_tm1_defconfig index d54a70c..ab57fa5 100755 --- a/arch/arm/configs/tizen_tm1_defconfig +++ b/arch/arm/configs/tizen_tm1_defconfig @@ -1228,7 +1228,8 @@ CONFIG_SPRD_WCN=y CONFIG_SPRD_DOWNLOAD_IMG=y CONFIG_SPRD_DOWNLOAD_POWER_CTL=y # CONFIG_SPRD_HWCONFIG_CHECK is not set -CONFIG_SLP_GLOBAL_LOCK=y +# CONFIG_SLP_GLOBAL_LOCK is not set +CONFIG_TIZEN_GLOBAL_LOCK=y # # SCSI device support -- 2.7.4 From 7aa75605a0207d3b470f667397c26b6952685a1e Mon Sep 17 00:00:00 2001 From: Inki Dae Date: Fri, 25 Nov 2016 14:46:35 +0900 Subject: [PATCH 06/16] misc: remove SLP Global lock module This patch removes SLP Global lock module which is unnecessary anymore. Change-Id: I200c6bfb701b124c531e5da0fa793c434808d122 Signed-off-by: Inki Dae --- drivers/misc/Kconfig | 6 - drivers/misc/Makefile | 1 - drivers/misc/slp_global_lock.c | 872 ----------------------------------------- drivers/misc/slp_global_lock.h | 49 --- 4 files changed, 928 deletions(-) delete mode 100644 drivers/misc/slp_global_lock.c delete mode 100644 drivers/misc/slp_global_lock.h diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig index 92021d7..b053b1a 100644 --- a/drivers/misc/Kconfig +++ b/drivers/misc/Kconfig @@ -614,12 +614,6 @@ config SPRD_SRT_KO depends on SPRD_SRT default m -config SLP_GLOBAL_LOCK - bool "Enable Global Lock" - default n - ---help--- - This supports global lock feature for SLP. - config TIZEN_GLOBAL_LOCK bool "Enable Tizen Global Lock" help diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile index ec8157e..d3c493f 100644 --- a/drivers/misc/Makefile +++ b/drivers/misc/Makefile @@ -72,7 +72,6 @@ obj-$(CONFIG_SPRD_CODA7L) += sprd_coda7l/ obj-$(CONFIG_BENCHMARK) += benchmark/ obj-$(CONFIG_BOOT_PERF) += bootperf/ obj-$(CONFIG_SPRD_BOARD_TYPE) += sprd_board_type.o -obj-$(CONFIG_SLP_GLOBAL_LOCK) += slp_global_lock.o obj-$(CONFIG_TIZEN_GLOBAL_LOCK) += tizen_global_lock.o obj-$(CONFIG_SPRD_TKS_DRIVER) += sprd_tks.o obj-$(CONFIG_SDIODEV) += sdiodev/ diff --git a/drivers/misc/slp_global_lock.c b/drivers/misc/slp_global_lock.c deleted file mode 100644 index 7ce5e4a..0000000 --- a/drivers/misc/slp_global_lock.c +++ /dev/null @@ -1,872 +0,0 @@ -/* - * Copyright (c) 2012 Samsung Electronics Co., Ltd. - * - * This program is free software and is provided to you under the terms of the GNU General Public License version 2 - * as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence. - * - * A copy of the licence is included with the program, and can also be obtained from Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "slp_global_lock.h" - -#define SGL_WARN(x, y...) printk(KERN_INFO "[SGL_WARN(%d,%d)](%s):%d " x " \n" , current->tgid, current->pid, __FUNCTION__, __LINE__, ##y) -#define SGL_INFO(x, y...) printk(KERN_INFO "[SGL_INFO] " x , ##y) - -#if 0 /* LOG */ - -#define SGL_LOG(x, y...) printk(KERN_INFO "[SGL_LOG(%d,%d)](%s):%d " x " \n" , current->tgid, current->pid, __FUNCTION__, __LINE__, ##y); -#define SGL_DEBUG(x, y...) printk(KERN_INFO "[SGL_DEBUG(%d,%d)](%s):%d " x " \n" , current->tgid, current->pid, __FUNCTION__, __LINE__, ##y); - -#else - -#define SGL_LOG(x, y...) -#define SGL_DEBUG(x, y...) - -#endif - -static struct sgl_global { - int major; - struct class *class; - struct device *device; - void *locks; /* global lock table */ - int refcnt; /* ref count of sgl_global */ - struct mutex mutex; -} sgl_global; - -struct sgl_session_data { - void *inited_locks; /* per session initialized locks */ - void *locked_locks; /* per session locked locks */ -}; - -struct sgl_lock { - unsigned int key; /* key of this lock */ - unsigned int timeout_ms; /* timeout in ms */ - unsigned int refcnt; /* ref count of initialization */ - wait_queue_head_t waiting_queue; /* waiting queue */ - struct list_head waiting_list; /* waiting list */ - struct mutex waiting_list_mutex; - unsigned int locked; /* flag if this lock is locked */ - unsigned int owner; /* session data */ - - struct mutex data_mutex; - unsigned int user_data1; - unsigned int user_data2; - - pid_t owner_pid; - pid_t owner_tid; -}; - -/**************** hash code start ***************/ -#define SGL_HASH_BITS 4 -#define SGL_HASH_ENTRIES (1 << SGL_HASH_BITS) - -struct sgl_hash_head { - struct hlist_head head; /* hash_head */ - struct mutex mutex; -}; - -struct sgl_hash_node { - unsigned int key; /* key for lock. must be same as lock->key */ - struct sgl_lock *lock; /* lock object */ - struct hlist_node node; /* hash node */ -}; - -static const char sgl_dev_name[] = "slp_global_lock"; - -/* find the sgl_lock object with key in the hash table */ -static struct sgl_hash_node *sgl_hash_get_node(struct sgl_hash_head *hash, unsigned int key) -{ - struct sgl_hash_head *hash_head = &hash[hash_32(key, SGL_HASH_BITS)]; - struct sgl_hash_node *hash_node = NULL; - struct sgl_hash_node *found = NULL; - - struct hlist_head *head = &hash_head->head; - - SGL_LOG("key %d", key); - - mutex_lock(&hash_head->mutex); - hlist_for_each_entry(hash_node, head, node) { - if (hash_node->key == key) { - found = hash_node; - break; - } - } - mutex_unlock(&hash_head->mutex); - - SGL_LOG("hash_node: %p", hash_node); - - return found; -} - -/* insert the hash entry */ -static struct sgl_hash_node *sgl_hash_insert_node(struct sgl_hash_head *hash, unsigned int key) -{ - struct sgl_hash_head *hash_head = &hash[hash_32(key, SGL_HASH_BITS)]; - struct sgl_hash_node *hash_node; - - struct hlist_head *head = &hash_head->head; - - SGL_LOG("key %d", key); - - hash_node = kzalloc(sizeof(struct sgl_hash_node), GFP_KERNEL); - if (hash_node == NULL) - return NULL; - - INIT_HLIST_NODE(&hash_node->node); - mutex_lock(&hash_head->mutex); - hlist_add_head(&hash_node->node, head); - mutex_unlock(&hash_head->mutex); - - hash_node->key = key; - - SGL_LOG(); - - return hash_node; -} - -/* remove the hash entry */ -static int sgl_hash_remove_node(struct sgl_hash_head *hash, unsigned int key) -{ - struct sgl_hash_head *hash_head = &hash[hash_32(key, SGL_HASH_BITS)]; - struct sgl_hash_node *hash_node; - - struct hlist_head *head = &hash_head->head; - - int err = -ENOENT; - - SGL_LOG("key %d", key); - - mutex_lock(&hash_head->mutex); - hlist_for_each_entry(hash_node, head, node) { - if (hash_node->key == key) { - hlist_del(&hash_node->node); - kfree(hash_node); - err = 0; - break; - } - } - mutex_unlock(&hash_head->mutex); - - SGL_LOG(); - - return err; -} - -static int sgl_hash_cleanup_nodes(struct sgl_hash_head *hash, int (*lock_cleanup_func)(struct sgl_lock *)) -{ - struct sgl_hash_node *hash_node; - - struct hlist_head *head; - - int i; - int err = 0; - - SGL_LOG(); - - for (i = 0; i < SGL_HASH_ENTRIES; i++) { - head = &hash[i].head; - mutex_lock(&hash->mutex); - while (!hlist_empty(head)) { - hash_node = hlist_entry(head->first, struct sgl_hash_node, node); - if (lock_cleanup_func(hash_node->lock) < 0) - err = -EBADRQC; - hlist_del(&hash_node->node); - kfree(hash_node); - } - mutex_unlock(&hash->mutex); - } - - SGL_LOG(); - - return err; -} - -/* allocate the hash table */ -static struct sgl_hash_head *sgl_hash_create_table(void) -{ - struct sgl_hash_head *hash; - - int i; - - SGL_LOG(); - - hash = kzalloc(sizeof(struct sgl_hash_head) * SGL_HASH_ENTRIES, GFP_KERNEL); - if (hash == NULL) - return NULL; - - for (i = 0; i < SGL_HASH_ENTRIES; i++) { - INIT_HLIST_HEAD(&hash[i].head); - mutex_init(&hash[i].mutex); - } - - SGL_LOG(); - - return hash; -} - -/* release the hash table */ -static void sgl_hash_destroy_table(struct sgl_hash_head *hash) -{ - SGL_LOG(); - - kfree(hash); - - SGL_LOG(); - - return; -} - -/**************** hash code end ***************/ - -static struct sgl_lock *sgl_get_lock(void *locks, unsigned int key) -{ - struct sgl_hash_node *hash_node; - - hash_node = sgl_hash_get_node((struct sgl_hash_head *)locks, key); - if (hash_node == NULL) { - return NULL; - } - - return hash_node->lock; -} - -static int sgl_insert_lock(void *locks, struct sgl_lock *lock) -{ - struct sgl_hash_node *hash_node; - - hash_node = sgl_hash_insert_node((struct sgl_hash_head *)locks, lock->key); - if (hash_node == NULL) - return -ENOMEM; - hash_node->lock = lock; - - return 0; -} - -static int sgl_remove_lock(void *locks, unsigned int key) -{ - int err; - - err = sgl_hash_remove_node((struct sgl_hash_head *)locks, key); - - return err; -} - -static int sgl_cleanup_locks(void *locks, int (*lock_cleanup_func)(struct sgl_lock *)) -{ - int err = 0; - - err = sgl_hash_cleanup_nodes((struct sgl_hash_head *)locks, lock_cleanup_func); - - return err; -} - -static void *sgl_create_locks(void) -{ - return (void *)sgl_hash_create_table(); -} - -static void sgl_destroy_locks(void *locks) -{ - sgl_hash_destroy_table((struct sgl_hash_head *)locks); - return; -} -/********** lock - hash glue code end *********/ - - -static int sgl_lock_lock(struct sgl_session_data *session_data, unsigned int key) -{ - struct sgl_lock *lock; - - struct list_head waiting_entry; - - unsigned long jiffies; - long ret = 0; - - SGL_LOG("key: %d", key); - - mutex_lock(&sgl_global.mutex); - lock = sgl_get_lock(sgl_global.locks, key); - if (lock == NULL) { - if (sgl_get_lock(session_data->inited_locks, key)) - sgl_remove_lock(session_data->inited_locks, key); - - if (sgl_get_lock(session_data->locked_locks, key)) - sgl_remove_lock(session_data->locked_locks, key); - mutex_unlock(&sgl_global.mutex); - SGL_WARN("lock is not in the global locks"); - return -ENOENT; - } - - lock = sgl_get_lock(session_data->inited_locks, key); - if (lock == NULL) { - mutex_unlock(&sgl_global.mutex); - SGL_WARN("lock is not in the inited locks"); - return -ENOENT; - } - mutex_unlock(&sgl_global.mutex); - - INIT_LIST_HEAD(&waiting_entry); - mutex_lock(&lock->data_mutex); - lock->refcnt++; - mutex_unlock(&lock->data_mutex); - mutex_lock(&lock->waiting_list_mutex); - list_add_tail(&waiting_entry, &lock->waiting_list); - mutex_unlock(&lock->waiting_list_mutex); - - jiffies = msecs_to_jiffies(lock->timeout_ms); - - SGL_LOG(); - - ret = wait_event_timeout(lock->waiting_queue, - ((lock->locked == 0) - && lock->waiting_list.next == &waiting_entry), - jiffies); - if (ret == 0) { - SGL_WARN("timed out, key: %d, owner(%d, %d)", - key, lock->owner_pid, lock->owner_tid); - mutex_lock(&lock->data_mutex); - lock->refcnt--; - mutex_unlock(&lock->data_mutex); - mutex_lock(&lock->waiting_list_mutex); - list_del(&waiting_entry); - mutex_unlock(&lock->waiting_list_mutex); - return -ETIMEDOUT; - } - - SGL_LOG(); - - mutex_lock(&lock->data_mutex); - lock->owner = (unsigned int)session_data; - lock->locked = 1; - lock->owner_pid = current->tgid; - lock->owner_tid = current->pid; - mutex_unlock(&lock->data_mutex); - - mutex_lock(&lock->waiting_list_mutex); - list_del(&waiting_entry); - mutex_unlock(&lock->waiting_list_mutex); - - /* add to the locked lock */ - sgl_insert_lock(session_data->locked_locks, lock); - - SGL_LOG(); - - return 0; -} - -static int _sgl_unlock_lock(struct sgl_lock *lock) -{ - SGL_LOG(); - - if (lock == NULL) { - SGL_WARN("lock == NULL"); - return -EBADRQC; - } - mutex_lock(&lock->data_mutex); - - if (lock->locked == 0) { - mutex_unlock(&lock->data_mutex); - SGL_WARN("tried to unlock not-locked lock"); - return -EBADRQC; - } - - lock->owner = 0; - lock->locked = 0; - lock->owner_pid = 0; - lock->owner_tid = 0; - lock->refcnt--; - - if (waitqueue_active(&lock->waiting_queue)) { - wake_up(&lock->waiting_queue); - } - mutex_unlock(&lock->data_mutex); - - SGL_LOG(); - - return 0; -} - -static int sgl_unlock_lock(struct sgl_session_data *session_data, unsigned int key) -{ - struct sgl_lock *lock; - - int err = -ENOENT; - - SGL_LOG("key: %d", key); - - mutex_lock(&sgl_global.mutex); - lock = sgl_get_lock(sgl_global.locks, key); - if (lock == NULL) { - if (sgl_get_lock(session_data->inited_locks, key)) - sgl_remove_lock(session_data->inited_locks, key); - - if (sgl_get_lock(session_data->locked_locks, key)) - sgl_remove_lock(session_data->locked_locks, key); - mutex_unlock(&sgl_global.mutex); - SGL_WARN("lock is not in the global locks"); - return -ENOENT; - } - - lock = sgl_get_lock(session_data->inited_locks, key); - if (lock == NULL) { - mutex_unlock(&sgl_global.mutex); - SGL_WARN("lock is not in the inited locks"); - return -ENOENT; - } - mutex_unlock(&sgl_global.mutex); - - mutex_lock(&lock->data_mutex); - if (lock->owner != (unsigned int)session_data) { - mutex_unlock(&lock->data_mutex); - SGL_WARN("tried to unlock the lock not-owned by calling session"); - return -EBADRQC; - } - mutex_unlock(&lock->data_mutex); - sgl_remove_lock(session_data->locked_locks, key); - err = _sgl_unlock_lock(lock); - if (err < 0) - SGL_WARN("_sgl_unlock_lock() failed"); - - SGL_LOG(); - - return err; -} - -static int sgl_init_lock(struct sgl_session_data *session_data, struct sgl_attribute *attr) -{ - struct sgl_lock *lock; - - int err = 0; - - SGL_LOG("key: %d", attr->key); - - mutex_lock(&sgl_global.mutex); - - lock = sgl_get_lock(sgl_global.locks, attr->key); - if (lock == NULL) { - /* allocate and add to the global table if this is the first initialization */ - lock = kzalloc(sizeof(struct sgl_lock), GFP_KERNEL); - if (lock == NULL) { - err = -ENOMEM; - goto out_unlock; - } - - lock->key = attr->key; - - err = sgl_insert_lock(sgl_global.locks, lock); - if (err < 0) { - kfree(lock); - goto out_unlock; - } - - /* default timeout value is 16ms */ - lock->timeout_ms = attr->timeout_ms ? attr->timeout_ms : 16; - - init_waitqueue_head(&lock->waiting_queue); - INIT_LIST_HEAD(&lock->waiting_list); - mutex_init(&lock->waiting_list_mutex); - mutex_init(&lock->data_mutex); - } - mutex_lock(&lock->data_mutex); - lock->refcnt++; - mutex_unlock(&lock->data_mutex); - - /* add to the inited locks */ - err = sgl_insert_lock(session_data->inited_locks, lock); - -out_unlock: - - mutex_unlock(&sgl_global.mutex); - - SGL_LOG(); - - return err; -} - -static int _sgl_destroy_lock(struct sgl_lock *lock) -{ - int err = 0; - - SGL_LOG(); - - if (lock == NULL) { - SGL_WARN("lock == NULL"); - return -EBADRQC; - } - - mutex_lock(&lock->data_mutex); - lock->refcnt--; - if (lock->refcnt == 0) { - mutex_unlock(&lock->data_mutex); - err = sgl_remove_lock(sgl_global.locks, lock->key); - if (err < 0) - return err; - - kfree(lock); - } else - mutex_unlock(&lock->data_mutex); - - SGL_LOG(); - - return err; -} - -static int sgl_destroy_lock(struct sgl_session_data *session_data, unsigned int key) -{ - struct sgl_lock *lock; - - int err = 0; - - SGL_LOG(); - - mutex_lock(&sgl_global.mutex); - - lock = sgl_get_lock(sgl_global.locks, key); - if (lock == NULL) { - SGL_WARN("lock is not in the global locks"); - err = -ENOENT; - goto out_unlock; - } - if (!sgl_get_lock(session_data->inited_locks, key)) { - SGL_WARN("lock is not in the inited locks"); - err = -ENOENT; - goto out_unlock; - } - - /* check if lock is still locked */ - if (sgl_get_lock(session_data->locked_locks, key)) { - SGL_WARN("destroy failed. lock is still locked"); - err = -EBUSY; - goto out_unlock; - } - - err = _sgl_destroy_lock(lock); - if (err < 0) - goto out_unlock; - - /* remove from the inited lock */ - err = sgl_remove_lock(session_data->inited_locks, key); - if (err < 0) - goto out_unlock; - -out_unlock: - - mutex_unlock(&sgl_global.mutex); - - SGL_LOG(); - - return err; -} - -static int sgl_set_data(struct sgl_session_data *session_data, struct sgl_user_data *user_data) -{ - struct sgl_lock *lock; - int ret = 0; - unsigned int key = user_data->key; - - SGL_LOG("key: %d", key); - - mutex_lock(&sgl_global.mutex); - - lock = sgl_get_lock(sgl_global.locks, key); - if (lock == NULL) { - SGL_WARN("lock is not in the inited locks"); - mutex_unlock(&sgl_global.mutex); - return -ENOENT; - } - mutex_lock(&lock->data_mutex); - lock->user_data1 = user_data->data1; - lock->user_data2 = user_data->data2; - user_data->locked = lock->locked; - mutex_unlock(&lock->data_mutex); - mutex_unlock(&sgl_global.mutex); - - SGL_LOG(); - - return ret; -} - -static int sgl_get_data(struct sgl_session_data *session_data, struct sgl_user_data *user_data) -{ - struct sgl_lock *lock; - int ret = 0; - unsigned int key = user_data->key; - - SGL_LOG("key: %d", key); - mutex_lock(&sgl_global.mutex); - - lock = sgl_get_lock(sgl_global.locks, key); - if (lock == NULL) { - SGL_WARN("lock is not in the inited locks"); - mutex_unlock(&sgl_global.mutex); - return -ENOENT; - } - mutex_lock(&lock->data_mutex); - user_data->data1 = lock->user_data1; - user_data->data2 = lock->user_data2; - user_data->locked = lock->locked; - mutex_unlock(&lock->data_mutex); - mutex_unlock(&sgl_global.mutex); - - SGL_LOG(); - - return ret; -} - -static void sgl_dump_locks(void) -{ - int i; - SGL_INFO("SLP_GLOBAL_LOCK DUMP START\n"); - mutex_lock(&sgl_global.mutex); - for (i = 0; i < SGL_HASH_ENTRIES; i++) { - struct sgl_hash_head *shead; - struct sgl_hash_node *snode; - struct hlist_head *hhead; - - shead = &((struct sgl_hash_head *)sgl_global.locks)[i]; - if (!shead) - continue; - mutex_lock(&shead->mutex); - hhead = &shead->head; - hlist_for_each_entry(snode, hhead, node) { - struct sgl_lock *lock = snode->lock; - mutex_lock(&lock->data_mutex); - SGL_INFO("lock key: %d, refcnt: %d, owner_pid: %d, owner_tid: %d\n", - lock->key, lock->refcnt, lock->owner_pid, lock->owner_tid); - mutex_unlock(&lock->data_mutex); - } - mutex_unlock(&shead->mutex); - } - mutex_unlock(&sgl_global.mutex); - SGL_INFO("SLP_GLOBAL_LOCK DUMP END\n"); -} - -#ifdef HAVE_UNLOCKED_IOCTL -static long sgl_ioctl(struct file *file, unsigned int cmd, unsigned long arg) -#else -static int sgl_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) -#endif -{ - struct sgl_session_data *session_data = (struct sgl_session_data *)file->private_data; - - int err = 0; - - SGL_LOG(); - - switch (cmd) { - case SGL_IOC_INIT_LOCK: - /* destroy lock with attribute */ - err = sgl_init_lock(session_data, (struct sgl_attribute *)arg); - break; - case SGL_IOC_DESTROY_LOCK: - /* destroy lock with id(=arg) */ - err = sgl_destroy_lock(session_data, (unsigned int)arg); - break; - case SGL_IOC_LOCK_LOCK: - /* lock lock with id(=arg) */ - err = sgl_lock_lock(session_data, (unsigned int)arg); - break; - case SGL_IOC_UNLOCK_LOCK: - /* unlock lock with id(=arg) */ - err = sgl_unlock_lock(session_data, (unsigned int)arg); - break; - case SGL_IOC_SET_DATA: - err = sgl_set_data(session_data, (struct sgl_user_data *)arg); - break; - case SGL_IOC_GET_DATA: - err = sgl_get_data(session_data, (struct sgl_user_data *)arg); - break; - case SGL_IOC_DUMP_LOCKS: - sgl_dump_locks(); - break; - default: - SGL_WARN("unknown type of ioctl command"); - break; - } - - SGL_LOG(); - - return err; -} - -static int sgl_open(struct inode *inode, struct file *file) -{ - struct sgl_session_data *session_data; - - SGL_LOG(); - - /* init per thread data using file->private_data*/ - session_data = kzalloc(sizeof(struct sgl_session_data), GFP_KERNEL); - if (session_data == NULL) - goto err_session_data; - - session_data->inited_locks = sgl_create_locks(); - if (session_data->inited_locks == NULL) { - goto err_inited_locks; - } - - session_data->locked_locks = sgl_create_locks(); - if (session_data->locked_locks == NULL) { - goto err_locked_locks; - } - - file->private_data = (void *)session_data; - - sgl_global.refcnt++; - - SGL_LOG(); - - return 0; - -err_locked_locks: - sgl_destroy_locks(session_data->inited_locks); -err_inited_locks: - kfree(session_data); -err_session_data: - SGL_WARN(); - return -ENOMEM; -} - -static int sgl_release(struct inode *inode, struct file *file) -{ - struct sgl_session_data *session_data = file->private_data; - - int err = 0; - - SGL_LOG(); - - mutex_lock(&sgl_global.mutex); - - /* clean up the locked locks */ - if (sgl_cleanup_locks(session_data->locked_locks, _sgl_unlock_lock)) - SGL_WARN("clean-up locked locks failed"); - - /* clean up the inited locks */ - if (sgl_cleanup_locks(session_data->inited_locks, _sgl_destroy_lock)) - SGL_WARN("clean-up inited locks failed"); - - /* clean up per thread data */ - file->private_data = NULL; - - sgl_destroy_locks(session_data->locked_locks); - sgl_destroy_locks(session_data->inited_locks); - - kfree(session_data); - - mutex_unlock(&sgl_global.mutex); - sgl_global.refcnt--; - if (sgl_global.refcnt == 0) { - /* destroy global lock table */ - sgl_destroy_locks(sgl_global.locks); - - device_destroy(sgl_global.class, MKDEV(sgl_global.major, 0)); - class_destroy(sgl_global.class); - unregister_chrdev(sgl_global.major, sgl_dev_name); - } - - SGL_LOG(); - - return err; -} - -static const struct file_operations sgl_ops = { - .owner = THIS_MODULE, - .open = sgl_open, - .release = sgl_release, -#ifdef HAVE_UNLOCKED_IOCTL - .unlocked_ioctl = sgl_ioctl, -#else - .ioctl = sgl_ioctl, -#endif -}; - -static int __init sgl_init(void) -{ - int err = 0; - - SGL_LOG(); - - memset(&sgl_global, 0, sizeof(struct sgl_global)); - - sgl_global.major = SGL_MAJOR; - err = register_chrdev(sgl_global.major, sgl_dev_name, &sgl_ops); - if (err < 0) - goto err_register_chrdev; - - sgl_global.class = class_create(THIS_MODULE, sgl_dev_name); - if (IS_ERR(sgl_global.class)) { - err = PTR_ERR(sgl_global.class); - goto err_class_create; - } - - sgl_global.device = device_create(sgl_global.class, NULL, MKDEV(sgl_global.major, 0), NULL, sgl_dev_name); - if (IS_ERR(sgl_global.device)) { - err = PTR_ERR(sgl_global.device); - goto err_device_create; - } - - /* create the global lock table */ - sgl_global.locks = sgl_create_locks(); - if (sgl_global.locks == NULL) { - err = -ENOMEM; - goto err_create_locks; - } - - mutex_init(&sgl_global.mutex); - - sgl_global.refcnt++; - - SGL_LOG(); - - return 0; - -err_create_locks: -err_device_create: - class_unregister(sgl_global.class); -err_class_create: - unregister_chrdev(sgl_global.major, sgl_dev_name); -err_register_chrdev: - SGL_WARN(); - return err; -} - -void sgl_exit(void) -{ - SGL_LOG(); - - sgl_global.refcnt--; - if (sgl_global.refcnt == 0) { - mutex_destroy(&sgl_global.mutex); - - /* destroy global lock table */ - sgl_destroy_locks(sgl_global.locks); - - device_destroy(sgl_global.class, MKDEV(sgl_global.major, 0)); - class_destroy(sgl_global.class); - unregister_chrdev(sgl_global.major, sgl_dev_name); - } - - SGL_LOG(); - - return; -} - -module_init(sgl_init); -module_exit(sgl_exit); - -MODULE_LICENSE("GPL"); diff --git a/drivers/misc/slp_global_lock.h b/drivers/misc/slp_global_lock.h deleted file mode 100644 index db4d585..0000000 --- a/drivers/misc/slp_global_lock.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2012 Samsung Electronics Co., Ltd. - * - * This program is free software and is provided to you under the terms of the GNU General Public License version 2 - * as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence. - * - * A copy of the licence is included with the program, and can also be obtained from Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#ifndef __SLP_GLOBAL_LOCK_H__ -#define __SLP_GLOBAL_LOCK_H__ - -#include - -#define SGL_IOC_BASE 0x32 -#define SGL_MAJOR 224 - -struct sgl_attribute { - unsigned int key; - unsigned int timeout_ms; -}; - -struct sgl_user_data { - unsigned int key; - unsigned int data1; - unsigned int data2; - unsigned int locked; -}; - -typedef enum { - _SGL_INIT_LOCK = 1, - _SGL_DESTROY_LOCK, - _SGL_LOCK_LOCK, - _SGL_UNLOCK_LOCK, - _SGL_SET_DATA, - _SGL_GET_DATA, - _SGL_DUMP_LOCKS, -} _sgl_ioctls; - -#define SGL_IOC_INIT_LOCK _IOW(SGL_IOC_BASE, _SGL_INIT_LOCK, struct sgl_attribute *) -#define SGL_IOC_DESTROY_LOCK _IOW(SGL_IOC_BASE, _SGL_DESTROY_LOCK, unsigned int) -#define SGL_IOC_LOCK_LOCK _IOW(SGL_IOC_BASE, _SGL_LOCK_LOCK, unsigned int) -#define SGL_IOC_UNLOCK_LOCK _IOW(SGL_IOC_BASE, _SGL_UNLOCK_LOCK, unsigned int) -#define SGL_IOC_SET_DATA _IOW(SGL_IOC_BASE, _SGL_SET_DATA, struct sgl_user_data *) -#define SGL_IOC_GET_DATA _IOW(SGL_IOC_BASE, _SGL_GET_DATA, struct sgl_user_data *) -#define SGL_IOC_DUMP_LOCKS _IOW(SGL_IOC_BASE, _SGL_DUMP_LOCKS, void *) - -#endif /* __SLP_GLOBAL_LOCK_H__ */ -- 2.7.4 From 6140b968a76407d5023a1a68bcd1958232b86bdd Mon Sep 17 00:00:00 2001 From: Inki Dae Date: Mon, 28 Nov 2016 14:17:24 +0900 Subject: [PATCH 07/16] config: tizen_tm1_defconfig: sync defconfig file This patch makes the defconfig file to sync with menuconfig Change-Id: Ied39f624f82fb800d2fabc5bf0825065b309202c Signed-off-by: Inki Dae --- arch/arm/configs/tizen_tm1_defconfig | 157 +++++++++++++++++++++++------------ 1 file changed, 105 insertions(+), 52 deletions(-) diff --git a/arch/arm/configs/tizen_tm1_defconfig b/arch/arm/configs/tizen_tm1_defconfig index ab57fa5..9b9bac9 100755 --- a/arch/arm/configs/tizen_tm1_defconfig +++ b/arch/arm/configs/tizen_tm1_defconfig @@ -1,3 +1,7 @@ +# +# Automatically generated file; DO NOT EDIT. +# Linux/arm 3.10.65 Kernel Configuration +# CONFIG_ARM=y CONFIG_ARM_HAS_SG_CHAIN=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -42,9 +46,7 @@ CONFIG_SYSVIPC_SYSCTL=y # CONFIG_POSIX_MQUEUE is not set CONFIG_FHANDLE=y CONFIG_AUDIT=y -# CONFIG_AUDITSYSCALL=y -# CONFIG_AUDIT_WATCH=y -# CONFIG_AUDIT_TREE=y +# CONFIG_AUDITSYSCALL is not set # CONFIG_AUDIT_LOGINUID_IMMUTABLE is not set CONFIG_HAVE_GENERIC_HARDIRQS=y @@ -109,6 +111,7 @@ CONFIG_MEMCG=y CONFIG_MEMCG_SWAP=y CONFIG_MEMCG_SWAP_ENABLED=y # CONFIG_MEMCG_KMEM is not set +# CONFIG_CGROUP_PERF is not set CONFIG_CGROUP_SCHED=y CONFIG_FAIR_GROUP_SCHED=y CONFIG_CFS_BANDWIDTH=y @@ -191,6 +194,7 @@ CONFIG_GENERIC_IDLE_POLL_SETUP=y CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_CLK=y CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y CONFIG_HAVE_ARCH_JUMP_LABEL=y CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y CONFIG_HAVE_ARCH_SECCOMP_FILTER=y @@ -481,6 +485,9 @@ CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 CONFIG_CROSS_MEMORY_ATTACH=y # CONFIG_CLEANCACHE is not set # CONFIG_FRONTSWAP is not set +CONFIG_ZSMALLOC=y +CONFIG_PGTABLE_MAPPING=y +# CONFIG_ZSMALLOC_STAT is not set CONFIG_CMA=y # CONFIG_CMA_DEBUG is not set CONFIG_SHRINK_MEMORY=y @@ -539,9 +546,7 @@ CONFIG_CPU_FREQ_GOV_INTERACTIVE=y CONFIG_CPU_FREQ_GOV_SPRDEMAND=y # CONFIG_DVFS_ONLY is not set # CONFIG_SPRD_CPUFREQ_DT_DRIVER is not set -# CONFIG_GENERIC_CPUFREQ_CPU0 is not set # CONFIG_SCX35_1300MHZ is not set -CONFIG_CLK_MON=y # # ARM CPU frequency scaling drivers @@ -549,7 +554,6 @@ CONFIG_CLK_MON=y # CONFIG_ARM_EXYNOS4210_CPUFREQ is not set # CONFIG_ARM_EXYNOS4X12_CPUFREQ is not set # CONFIG_ARM_EXYNOS5250_CPUFREQ is not set -# CONFIG_ARM_EXYNOS5440_CPUFREQ is not set # CONFIG_ARM_KIRKWOOD_CPUFREQ is not set CONFIG_CPU_IDLE=y # CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set @@ -584,13 +588,8 @@ CONFIG_COREDUMP=y # CONFIG_SUSPEND=y CONFIG_SUSPEND_FREEZER=y -# CONFIG_HAS_WAKELOCK=y -# CONFIG_HAS_EARLYSUSPEND=y -# CONFIG_WAKELOCK=y -# CONFIG_WAKELOCK_STAT=y +# CONFIG_WAKELOCK is not set CONFIG_USER_WAKELOCK=y -# CONFIG_EARLYSUSPEND=y -# CONFIG_FB_EARLYSUSPEND=y CONFIG_PM_SLEEP=y CONFIG_PM_SLEEP_SMP=y CONFIG_PM_AUTOSLEEP=y @@ -598,8 +597,6 @@ CONFIG_PM_RUNTIME=y CONFIG_PM=y # CONFIG_PM_DEBUG is not set # CONFIG_APM_EMULATION is not set -CONFIG_ARCH_HAS_OPP=y -CONFIG_PM_OPP=y CONFIG_PM_CLK=y # CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set CONFIG_CPU_PM=y @@ -771,10 +768,10 @@ CONFIG_NETFILTER_XT_TARGET_TRACE=y # # CONFIG_NETFILTER_XT_MATCH_ADDRTYPE is not set # CONFIG_NETFILTER_XT_MATCH_BPF is not set +CONFIG_NETFILTER_XT_MATCH_CGROUP=y # CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set CONFIG_NETFILTER_XT_MATCH_COMMENT=y # CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set -CONFIG_NETFILTER_XT_MATCH_CGROUP=y # CONFIG_NETFILTER_XT_MATCH_CONNLABEL is not set CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y CONFIG_NETFILTER_XT_MATCH_CONNMARK=y @@ -970,17 +967,21 @@ CONFIG_BQL=y # Network testing # # CONFIG_NET_PKTGEN is not set +# CONFIG_NET_DROP_MONITOR is not set # CONFIG_HAMRADIO is not set # CONFIG_CAN is not set # CONFIG_IRDA is not set CONFIG_BT=y +CONFIG_BT_BREDR=y CONFIG_BT_RFCOMM=y # CONFIG_BT_RFCOMM_TTY is not set CONFIG_BT_BNEP=y CONFIG_BT_BNEP_MC_FILTER=y CONFIG_BT_BNEP_PROTO_FILTER=y CONFIG_BT_HIDP=y +CONFIG_BT_LE=y # CONFIG_BT_SELFTEST is not set + # # Bluetooth device drivers # @@ -1068,6 +1069,7 @@ CONFIG_BATTERY_SWELLING=y # CONFIG_SAMSUNG_LPM_MODE is not set # CONFIG_SAMSUNG_BATTERY_ENG_TEST is not set # CONFIG_STBC_SAMSUNG is not set +CONFIG_SEC_BATTERY_PM_NOTIFY=y # CONFIG_FUELGAUGE_MFD is not set # CONFIG_FUELGAUGE_DUMMY is not set # CONFIG_FUELGAUGE_ADC is not set @@ -1097,7 +1099,6 @@ CONFIG_CHARGER_SM5701=y # CONFIG_CHARGER_SM5418 is not set CONFIG_FUELGAUGE_SPRD4SAMSUNG27X3=y # CONFIG_CHARGER_SPRD4SAMSUNG27X3 is not set -CONFIG_SEC_BATTERY_PM_NOTIFY=y # # Bus devices @@ -1123,6 +1124,9 @@ CONFIG_OF_NET=y CONFIG_OF_MDIO=y # CONFIG_PARPORT is not set CONFIG_BLK_DEV=y +CONFIG_ZRAM=y +CONFIG_ZRAM_LZ4_COMPRESS=y +# CONFIG_ZRAM_DEBUG is not set # CONFIG_BLK_DEV_COW_COMMON is not set CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 @@ -1186,6 +1190,7 @@ CONFIG_SPRD_CPROC=y # CONFIG_CGX is not set # CONFIG_SR2351_FM is not set # CONFIG_FM_SEEK_STEP_50KHZ is not set +CONFIG_CLK_MON=y # CONFIG_C2PORT is not set # @@ -1217,6 +1222,8 @@ CONFIG_SPRD_CPROC=y # CONFIG_SDIODEV=y # CONFIG_SDIODEV_TEST is not set +# CONFIG_MARLIN_CALI_READY_94 is not set +# CONFIG_MARLIN_CALI_READY_131 is not set # # MARLIN DEBUG modules @@ -1228,7 +1235,6 @@ CONFIG_SPRD_WCN=y CONFIG_SPRD_DOWNLOAD_IMG=y CONFIG_SPRD_DOWNLOAD_POWER_CTL=y # CONFIG_SPRD_HWCONFIG_CHECK is not set -# CONFIG_SLP_GLOBAL_LOCK is not set CONFIG_TIZEN_GLOBAL_LOCK=y # @@ -1435,11 +1441,8 @@ CONFIG_WLAN=y # CONFIG_BCM43241 is not set # CONFIG_BCM43455 is not set # CONFIG_BCM4334W is not set -# CONFIG_BCMDHD_FW_PATH="/system/etc/firmware/fw_bcmdhd.bin" -# CONFIG_BCMDHD_NVRAM_PATH="/system/etc/wifi/bcmdhd.cal" -# CONFIG_BROADCOM_WIFI_RESERVED_MEM is not set -# CONFIG_WIFI_BROADCOM_COB is not set -# CONFIG_WLAN_REGION_CODE=300 +CONFIG_BCMDHD_FW_PATH="/system/etc/firmware/fw_bcmdhd.bin" +CONFIG_BCMDHD_NVRAM_PATH="/system/etc/wifi/bcmdhd.cal" # CONFIG_BRCMFMAC is not set # CONFIG_HOSTAP is not set # CONFIG_LIBERTAS is not set @@ -1472,7 +1475,6 @@ CONFIG_INPUT_EVDEV=y # CONFIG_INPUT_EVBUG is not set # CONFIG_INPUT_KEYRESET is not set # CONFIG_INPUT_KEYCOMBO is not set -CONFIG_INPUT_SECBRIDGE=y # # Input Device Drivers @@ -1505,6 +1507,28 @@ CONFIG_KEYBOARD_SPRD_EIC=y CONFIG_KEYBOARD_CORERIVER_TOUCHKEY=y # CONFIG_INPUT_MOUSE is not set CONFIG_INPUT_JOYSTICK=y +# CONFIG_JOYSTICK_ANALOG is not set +# CONFIG_JOYSTICK_A3D is not set +# CONFIG_JOYSTICK_ADI is not set +# CONFIG_JOYSTICK_COBRA is not set +# CONFIG_JOYSTICK_GF2K is not set +# CONFIG_JOYSTICK_GRIP is not set +# CONFIG_JOYSTICK_GRIP_MP is not set +# CONFIG_JOYSTICK_GUILLEMOT is not set +# CONFIG_JOYSTICK_INTERACT is not set +# CONFIG_JOYSTICK_SIDEWINDER is not set +# CONFIG_JOYSTICK_TMDC is not set +# CONFIG_JOYSTICK_IFORCE is not set +# CONFIG_JOYSTICK_WARRIOR is not set +# CONFIG_JOYSTICK_MAGELLAN is not set +# CONFIG_JOYSTICK_SPACEORB is not set +# CONFIG_JOYSTICK_SPACEBALL is not set +# CONFIG_JOYSTICK_STINGER is not set +# CONFIG_JOYSTICK_TWIDJOY is not set +# CONFIG_JOYSTICK_ZHENHUA is not set +# CONFIG_JOYSTICK_AS5011 is not set +# CONFIG_JOYSTICK_JOYDUMP is not set +# CONFIG_JOYSTICK_XPAD is not set # CONFIG_INPUT_TABLET is not set CONFIG_INPUT_TOUCHSCREEN=y # CONFIG_TOUCHSCREEN_ADS7846 is not set @@ -1586,6 +1610,7 @@ CONFIG_INPUT_HEADSET_SPRD_SC2723=y CONFIG_FF_REGULATOR_HAPTIC=y # CONFIG_INPUT_EPL2182_I2C is not set # CONFIG_INPUT_EPL259X_I2C is not set +CONFIG_INPUT_SECBRIDGE=y # # Hardware I/O ports @@ -2023,9 +2048,13 @@ CONFIG_RADIO_ADAPTERS=y # BCM4343S FM driver (V4L2 based) # # CONFIG_RADIO_BCM4343S is not set -# CONFIG_CYPRESS_FIRMWARE is not set +# +# SC2331 FM driver (V4L2 based) +# CONFIG_RADIO_SC2331=y +# CONFIG_CYPRESS_FIRMWARE is not set + # # Media ancillary drivers (tuners, sensors, i2c, frontends) # @@ -2100,8 +2129,8 @@ CONFIG_DRM_SPRD=y # CONFIG_DRM_SPRD_DMABUF is not set CONFIG_DRM_SPRD_IPP=y CONFIG_DRM_SPRD_GSP=y -CONFIG_SPRD_IOMMU=y CONFIG_DRM_DPMS_IOCTL=y +CONFIG_SPRD_IOMMU=y # # ARM GPU Configuration @@ -2158,7 +2187,6 @@ CONFIG_FB_CFB_IMAGEBLIT=y # CONFIG_FB_SIMPLE is not set CONFIG_FB_SCX30G=y CONFIG_SPRD_FB_SIZE=6 -CONFIG_SPRDFB_MDNIE_LITE_TUNING=y # CONFIG_FB_LCD_HX8369B_MIPI_COREPRIMELITE is not set # CONFIG_FB_LCD_SD7798D_MIPI_COREPRIMELITE is not set # CONFIG_FB_LCD_HX8369B_MIPI_SHARKLS_Z3LTE is not set @@ -2201,6 +2229,7 @@ CONFIG_FB_VSYNC_SUPPORT=y # CONFIG_FB_LOW_RES_SIMU is not set CONFIG_FB_TRIPLE_FRAMEBUFFER=y # CONFIG_FB_DEBUG_LCD_TUNING is not set +CONFIG_SPRDFB_MDNIE_LITE_TUNING=y # CONFIG_EXYNOS_VIDEO is not set CONFIG_BACKLIGHT_LCD_SUPPORT=y CONFIG_LCD_CLASS_DEVICE=y @@ -2246,6 +2275,7 @@ CONFIG_SOUND=y CONFIG_SND=y CONFIG_SND_TIMER=y CONFIG_SND_PCM=y +CONFIG_SND_RAWMIDI=y CONFIG_SND_COMPRESS_OFFLOAD=y CONFIG_SND_JACK=y # CONFIG_SND_SEQUENCER is not set @@ -2313,9 +2343,9 @@ CONFIG_SND_SOC_SPRD_I2S=y # SPRD Codec # # CONFIG_SND_SOC_SPRD_USE_EAR_JACK_TYPE13 is not set -CONFIG_SND_SOC_SPRD_USE_INTERNAL_DETECT=y CONFIG_SND_SOC_SPRD_CODEC_V4=y CONFIG_SND_SOC_SPRD_AUDIO_USE_INTER_HP_PA_V4=y +CONFIG_SND_SOC_SPRD_USE_INTERNAL_DETECT=y # CONFIG_SND_SOC_SPRD_CODEC_EAR_WITH_IN_SPK is not set CONFIG_SND_SOC_SPRD_CODEC_NO_HP_POP=y CONFIG_SND_SOC_SPRD_HP_POP_DELAY_TIME=0 @@ -2341,6 +2371,8 @@ CONFIG_HID_A4TECH=y CONFIG_HID_ACRUX=y # CONFIG_HID_ACRUX_FF is not set CONFIG_HID_APPLE=y +# CONFIG_HID_APPLEIR is not set +# CONFIG_HID_AUREAL is not set CONFIG_HID_BELKIN=y CONFIG_HID_CHERRY=y CONFIG_HID_CHICONY=y @@ -2351,19 +2383,23 @@ CONFIG_HID_DRAGONRISE=y CONFIG_HID_EMS_FF=y CONFIG_HID_ELECOM=y CONFIG_HID_EZKEY=y +# CONFIG_HID_HOLTEK is not set CONFIG_HID_KEYTOUCH=y CONFIG_HID_KYE=y CONFIG_HID_UCLOGIC=y CONFIG_HID_WALTOP=y CONFIG_HID_GYRATION=y +# CONFIG_HID_ICADE is not set CONFIG_HID_TWINHAN=y CONFIG_HID_KENSINGTON=y CONFIG_HID_LCPOWER=y +# CONFIG_HID_LENOVO_TPKBD is not set CONFIG_HID_LOGITECH=y +# CONFIG_HID_LOGITECH_DJ is not set # CONFIG_LOGITECH_FF is not set # CONFIG_LOGIRUMBLEPAD2_FF is not set # CONFIG_LOGIG940_FF is not set -# CONFIG_LOGIWII_FF is not set +# CONFIG_LOGIWHEELS_FF is not set CONFIG_HID_MAGICMOUSE=y CONFIG_HID_MICROSOFT=y CONFIG_HID_MONTEREY=y @@ -2378,30 +2414,35 @@ CONFIG_HID_PICOLCD=y # CONFIG_HID_PICOLCD_BACKLIGHT is not set # CONFIG_HID_PICOLCD_LCD is not set # CONFIG_HID_PICOLCD_LEDS is not set -CONFIG_HID_QUANTA=y +# CONFIG_HID_PRIMAX is not set +# CONFIG_HID_PS3REMOTE is not set CONFIG_HID_ROCCAT=y -CONFIG_HID_ROCCAT_COMMON=y -CONFIG_HID_ROCCAT_ARVO=y -CONFIG_HID_ROCCAT_KONE=y -CONFIG_HID_ROCCAT_KONEPLUS=y -CONFIG_HID_ROCCAT_KOVAPLUS=y -CONFIG_HID_ROCCAT_PYRA=y +# CONFIG_HID_SAITEK is not set CONFIG_HID_SAMSUNG=y CONFIG_HID_SONY=y +# CONFIG_HID_SPEEDLINK is not set +# CONFIG_HID_STEELSERIES is not set CONFIG_HID_SUNPLUS=y CONFIG_HID_GREENASIA=y # CONFIG_GREENASIA_FF is not set CONFIG_HID_SMARTJOYPLUS=y # CONFIG_SMARTJOYPLUS_FF is not set +# CONFIG_HID_TIVO is not set CONFIG_HID_TOPSEED=y +# CONFIG_HID_THINGM is not set CONFIG_HID_THRUSTMASTER=y # CONFIG_THRUSTMASTER_FF is not set CONFIG_HID_WACOM=y -CONFIG_HID_WACOM_POWER_SUPPLY=y +# CONFIG_HID_WIIMOTE is not set CONFIG_HID_ZEROPLUS=y +# CONFIG_ZEROPLUS_FF is not set +# CONFIG_HID_ZYDACRON is not set +# CONFIG_HID_SENSOR_HUB is not set + # # USB HID support # +CONFIG_USB_HID=y # CONFIG_HID_PID is not set # CONFIG_USB_HIDDEV is not set @@ -2479,6 +2520,16 @@ CONFIG_USB_STORAGE_ENE_UB6250=y # # CONFIG_USB_MDC800 is not set # CONFIG_USB_MICROTEK is not set + +# +# USB Notify features +# +CONFIG_USB_NOTIFY_LAYER=y +CONFIG_USB_HOST_NOTIFY=y +CONFIG_USB_NOTIFIER=y +# CONFIG_USB_DEBUG_DETAILED_LOG is not set +# CONFIG_USB_STORAGE_DETECT is not set +CONFIG_USB_EXTERNAL_DETECT=y # CONFIG_USB_DWC3 is not set # CONFIG_USB_CHIPIDEA is not set @@ -2544,10 +2595,6 @@ CONFIG_USB_U_SERIAL_SELECTOR=y # # Legacy USB Gadget Drivers # -CONFIG_USB_HOST_NOTIFY=y -CONFIG_USB_NOTIFY_LAYER=y -CONFIG_USB_NOTIFIER=y -CONFIG_USB_EXTERNAL_DETECT=y # CONFIG_USB_ZERO is not set # CONFIG_USB_AUDIO is not set # CONFIG_USB_ETH is not set @@ -2853,11 +2900,6 @@ CONFIG_STAGING=y # CONFIG_IIO_GPIO_TRIGGER is not set # CONFIG_IIO_SYSFS_TRIGGER is not set # CONFIG_IIO_SIMPLE_DUMMY is not set -CONFIG_ZSMALLOC=y -CONFIG_PGTABLE_MAPPING=y -CONFIG_ZRAM=y -CONFIG_ZRAM_LZ4_COMPRESS=y -# CONFIG_ZRAM_DEBUG=y # CONFIG_USB_ENESTORAGE is not set # CONFIG_BCM_WIMAX is not set # CONFIG_FT1000 is not set @@ -2895,6 +2937,7 @@ CONFIG_ION_SPRD=y # CONFIG_RUNTIME_COMPCACHE is not set # CONFIG_USB_WPAN_HCD is not set # CONFIG_WIMAX_GDM72XX is not set +# CONFIG_CSR_WIFI is not set # CONFIG_CED1401 is not set # CONFIG_DGRP is not set @@ -3007,7 +3050,6 @@ CONFIG_CLKSRC_MMIO=y # Rpmsg drivers # # CONFIG_PM_DEVFREQ is not set - # CONFIG_EXTCON is not set # CONFIG_MEMORY is not set CONFIG_IIO=y @@ -3116,11 +3158,11 @@ CONFIG_SIPC_STTY=y # Sensor support # CONFIG_SENSORS=y -CONFIG_SENSORS_IMS1911=y -CONFIG_SENSORS_CM36672P=y # CONFIG_SENSORS_GP2A002 is not set # CONFIG_SENSORS_GP2A_HAS_REGULATOR is not set # CONFIG_SENSORS_LEDA_EN_GPIO is not set +CONFIG_SENSORS_IMS1911=y +CONFIG_SENSORS_CM36672P=y CONFIG_SENSORS_K2HH=y # CONFIG_SENSORS_K2HH_HAS_REGULATOR is not set @@ -3129,6 +3171,7 @@ CONFIG_SENSORS_K2HH=y # CONFIG_SPRD_IQ=y # CONFIG_HAS_AUTOTST is not set +CONFIG_GATOR=m # CONFIG_NO_HOTPLUG_POLICY is not set CONFIG_SS_TOUCH_BOOST_CPU_HOTPLUG=y @@ -3144,7 +3187,6 @@ CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y # CONFIG_EXT4_DEBUG is not set # CONFIG_SDCARD_FS is not set -# CONFIG_SDCARD_FS_CI_SEARCH is not set CONFIG_JBD2=y # CONFIG_JBD2_DEBUG is not set CONFIG_FS_MBCACHE=y @@ -3210,6 +3252,7 @@ CONFIG_MISC_FILESYSTEMS=y # CONFIG_ADFS_FS is not set # CONFIG_AFFS_FS is not set CONFIG_ECRYPT_FS=y +# CONFIG_ECRYPT_FS_MESSAGING is not set # CONFIG_HFS_FS is not set # CONFIG_HFSPLUS_FS is not set # CONFIG_BEFS_FS is not set @@ -3218,8 +3261,14 @@ CONFIG_ECRYPT_FS=y # CONFIG_LOGFS is not set # CONFIG_CRAMFS is not set CONFIG_SQUASHFS=y +CONFIG_SQUASHFS_FILE_CACHE=y +# CONFIG_SQUASHFS_FILE_DIRECT is not set +CONFIG_SQUASHFS_DECOMP_SINGLE=y +# CONFIG_SQUASHFS_DECOMP_MULTI is not set +# CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set CONFIG_SQUASHFS_XATTR=y CONFIG_SQUASHFS_ZLIB=y +# CONFIG_SQUASHFS_LZ4 is not set CONFIG_SQUASHFS_LZO=y # CONFIG_SQUASHFS_XZ is not set CONFIG_SQUASHFS_4K_DEVBLK_SIZE=y @@ -3440,6 +3489,7 @@ CONFIG_SECURITY_NETWORK=y # CONFIG_SECURITY_PATH is not set # CONFIG_SECURITY_SELINUX is not set CONFIG_SECURITY_SMACK=y +# CONFIG_SECURITY_SMACK_BRINGUP is not set # CONFIG_SECURITY_SMACK_NETFILTER is not set # CONFIG_SECURITY_TOMOYO is not set # CONFIG_SECURITY_APPARMOR is not set @@ -3469,7 +3519,7 @@ CONFIG_CRYPTO_MANAGER=y CONFIG_CRYPTO_MANAGER2=y # CONFIG_CRYPTO_USER is not set CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y -# CONFIG_CRYPTO_GF128MUL is not set +CONFIG_CRYPTO_GF128MUL=y # CONFIG_CRYPTO_NULL is not set # CONFIG_CRYPTO_PCRYPT is not set CONFIG_CRYPTO_WORKQUEUE=y @@ -3559,7 +3609,7 @@ CONFIG_CRYPTO_ANSI_CPRNG=y # CONFIG_CRYPTO_USER_API_SKCIPHER is not set CONFIG_CRYPTO_HW=y # CONFIG_ASYMMETRIC_KEY_TYPE is not set -# CONFIG_BINARY_PRINTF is not set +CONFIG_BINARY_PRINTF=y # # Library routines @@ -3582,13 +3632,16 @@ CONFIG_CRC32_SLICEBY8=y # CONFIG_CRC7 is not set CONFIG_LIBCRC32C=y # CONFIG_CRC8 is not set -# CONFIG_AUDIT_GENERIC=y +CONFIG_AUDIT_GENERIC=y CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_DEFLATE=y CONFIG_LZO_COMPRESS=y CONFIG_LZO_DECOMPRESS=y +CONFIG_LZ4_COMPRESS=y +CONFIG_LZ4_DECOMPRESS=y # CONFIG_XZ_DEC is not set # CONFIG_XZ_DEC_BCJ is not set +CONFIG_DECOMPRESS_GZIP=y CONFIG_LZO_SOFT_ALGO=y # CONFIG_LZO_HW_ALGO is not set CONFIG_GENERIC_ALLOCATOR=y -- 2.7.4 From 32a7e49022af9a400bacf7121873aefdb0d1aff8 Mon Sep 17 00:00:00 2001 From: jooseong lee Date: Mon, 28 Nov 2016 14:51:26 +0900 Subject: [PATCH 08/16] Revert "ARM: tizen_tm1_defconfig: disable smack_netfilter temporarily" This reverts commit 9807397c2e1c82653b1df12f5022f138b298d6f4. Change-Id: Ie5a993dfcb58130cbb1d5bb3a278a337d01eab2e Signed-off-by: jooseong lee --- arch/arm/configs/tizen_tm1_defconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm/configs/tizen_tm1_defconfig b/arch/arm/configs/tizen_tm1_defconfig index 9b9bac9..c4bd6dc 100755 --- a/arch/arm/configs/tizen_tm1_defconfig +++ b/arch/arm/configs/tizen_tm1_defconfig @@ -3490,7 +3490,7 @@ CONFIG_SECURITY_NETWORK=y # CONFIG_SECURITY_SELINUX is not set CONFIG_SECURITY_SMACK=y # CONFIG_SECURITY_SMACK_BRINGUP is not set -# CONFIG_SECURITY_SMACK_NETFILTER is not set +CONFIG_SECURITY_SMACK_NETFILTER=y # CONFIG_SECURITY_TOMOYO is not set # CONFIG_SECURITY_APPARMOR is not set # CONFIG_SECURITY_YAMA is not set -- 2.7.4 From 42b990c23fa96b2005c84de0c25ee2b3779e4e29 Mon Sep 17 00:00:00 2001 From: jooseong lee Date: Mon, 28 Nov 2016 14:52:17 +0900 Subject: [PATCH 09/16] ARM: tizen_tm1_defconfig: enable CONFIG_NETFILTER_XT_TARGET_SECMARK The config allows security marking of network packets. Iptable need to set packet's secmark to 'System' label to avoid Smack deny issue only for multicast address range. * Refer to : https://review.tizen.org/gerrit/#/c/100096/ Change-Id: Ia2902525a76d31a9db6d4665b4b488f4a4c45b22 Signed-off-by: jooseong lee --- arch/arm/configs/tizen_tm1_defconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm/configs/tizen_tm1_defconfig b/arch/arm/configs/tizen_tm1_defconfig index c4bd6dc..0f0df57 100755 --- a/arch/arm/configs/tizen_tm1_defconfig +++ b/arch/arm/configs/tizen_tm1_defconfig @@ -759,7 +759,7 @@ CONFIG_NETFILTER_XT_TARGET_REDIRECT=y # CONFIG_NETFILTER_XT_TARGET_TEE is not set CONFIG_NETFILTER_XT_TARGET_TPROXY=y CONFIG_NETFILTER_XT_TARGET_TRACE=y -# CONFIG_NETFILTER_XT_TARGET_SECMARK is not set +CONFIG_NETFILTER_XT_TARGET_SECMARK=y # CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set # CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set -- 2.7.4 From b1488a9ec3ed608c8cfffc5f249887082e34dc75 Mon Sep 17 00:00:00 2001 From: Sudha Bheemanna Date: Wed, 30 Nov 2016 15:29:46 +0530 Subject: [PATCH 10/16] Bluetooth: Fix Set IRK Mgmt opcode to match product codeline. Modified the Mgmt opcode value to match the header in product code. Change-Id: Ifcfbe313540527238950f1afbe2c33378bd4de29 Signed-off-by: Sudha Bheemanna --- include/net/bluetooth/mgmt_tizen.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/include/net/bluetooth/mgmt_tizen.h b/include/net/bluetooth/mgmt_tizen.h index 322c2a7..3076519 100644 --- a/include/net/bluetooth/mgmt_tizen.h +++ b/include/net/bluetooth/mgmt_tizen.h @@ -220,19 +220,19 @@ struct mgmt_rp_le_set_data_length { } __packed; #define MGMT_LE_SET_DATA_LENGTH_RSP_SIZE 3 -#define MGMT_OP_SET_DEV_RPA_RES_SUPPORT (TIZEN_OP_CODE_BASE + 0x19) +#define MGMT_OP_SET_IRK (TIZEN_OP_CODE_BASE + 0x19) +struct mgmt_cp_set_irk { + uint8_t irk[16]; +} __packed; +#define MGMT_SET_IRK_SIZE 16 + +#define MGMT_OP_SET_DEV_RPA_RES_SUPPORT (TIZEN_OP_CODE_BASE + 0x1a) struct mgmt_cp_set_dev_rpa_res_support { struct mgmt_addr_info addr; __u8 res_support; } __packed; #define MGMT_OP_SET_DEV_RPA_RES_SUPPORT_SIZE 8 -#define MGMT_OP_SET_IRK (TIZEN_OP_CODE_BASE + 0x1A) -struct mgmt_cp_set_irk { - uint8_t irk[16]; -} __packed; -#define MGMT_SET_IRK_SIZE 16 - /* BEGIN TIZEN_Bluetooth :: name update changes */ #define MGMT_EV_DEVICE_NAME_UPDATE (TIZEN_EV_BASE + 0x01) struct mgmt_ev_device_name_update { -- 2.7.4 From 5a5e8e842849b9ea46a33385d32254fcb55fc32f Mon Sep 17 00:00:00 2001 From: jooseong lee Date: Thu, 8 Dec 2016 11:46:33 +0900 Subject: [PATCH 11/16] netfilter: Fix wrong backporting Regard of: the commit 930a2d023b07 ("netfilter: nfnetlink_queue: allow to attach expectations to conntracks") lock() was missed. Change-Id: I8d5b4bec6dcee0ac43e9207180bb949b9cb1a49f Signed-off-by: jooseong lee --- net/netfilter/nfnetlink_queue_core.c | 1 + 1 file changed, 1 insertion(+) diff --git a/net/netfilter/nfnetlink_queue_core.c b/net/netfilter/nfnetlink_queue_core.c index c9c69f6..e215a6a 100644 --- a/net/netfilter/nfnetlink_queue_core.c +++ b/net/netfilter/nfnetlink_queue_core.c @@ -1053,6 +1053,7 @@ nfqnl_recv_verdict(struct sock *ctnl, struct sk_buff *skb, if (entry == NULL) return -ENOENT; + rcu_read_lock(); if (nfqa[NFQA_CT]) { ct = nfqnl_ct_parse(entry->skb, nfqa[NFQA_CT], &ctinfo); if (ct && nfqa[NFQA_EXP]) { -- 2.7.4 From 8ecdc14e495fa9418e000082de3cf49a81b209d2 Mon Sep 17 00:00:00 2001 From: Sergei Rogachev Date: Fri, 21 Oct 2016 16:24:15 +0300 Subject: [PATCH 12/16] mmc: sdhost: fix scheduling while atomic The function mmc_regulator_set_ocr() cannot be called under the spinlock, because internally it calls regulator_disable() which uses a sleeping primitive: regulator_dev->mutex. The patch unlocks the spinlock sdhost_host->lock to avoid scheduling in atomic context and prevent possible consequent live-locks. It is done totally the same way as it is done in drivers/mmc/host/sdhci.c and many other places. Change-Id: I2a7b893124efb2a515a3d55706d9a292a3d27edd Signed-off-by: Sergei Rogachev --- drivers/mmc/host/sdhost.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/mmc/host/sdhost.c b/drivers/mmc/host/sdhost.c index ce1feb0..4572d27 100755 --- a/drivers/mmc/host/sdhost.c +++ b/drivers/mmc/host/sdhost.c @@ -740,7 +740,9 @@ STATIC_FUNC void sdhost_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) if (MMC_POWER_OFF == ios->power_mode) { _signalVoltageOnOff(host, 0); if (host->SD_pwr) { + spin_unlock_irqrestore(&host->lock, flags); mmc_regulator_set_ocr(host->mmc, host->SD_pwr, 0); + spin_lock_irqsave(&host->lock, flags); } _resetIOS(host); host->ios.power_mode = ios->power_mode; @@ -748,7 +750,9 @@ STATIC_FUNC void sdhost_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) || (MMC_POWER_UP == ios->power_mode) ) { if (host->SD_pwr) { + spin_unlock_irqrestore(&host->lock, flags); mmc_regulator_set_ocr(host->mmc, host->SD_pwr, ios->vdd); + spin_lock_irqsave(&host->lock, flags); } _signalVoltageOnOff(host, 1); host->ios.power_mode = ios->power_mode; @@ -761,7 +765,9 @@ STATIC_FUNC void sdhost_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) if (ios->vdd != host->ios.vdd) { if (host->SD_pwr) { printk("sdhost %s 3.0 %d!\n", host->deviceName, ios->vdd); + spin_unlock_irqrestore(&host->lock, flags); mmc_regulator_set_ocr(host->mmc, host->SD_pwr, ios->vdd); + spin_lock_irqsave(&host->lock, flags); } host->ios.vdd = ios->vdd; } -- 2.7.4 From 557e266d1fa6afb7acb26656c1dd600a6f66bcce Mon Sep 17 00:00:00 2001 From: Jin-young Jeon Date: Mon, 28 Mar 2016 13:29:36 +0900 Subject: [PATCH 13/16] video/sprdfb: add dispc_is_yuv_format() on dispc. This adds dispc_is_yuv_format() function to be easy to check whether image format is YUV or not, and can cleanup related codes. This commit comes from product kernel. Change-Id: I934756c355b533bdbadbeb10b5555ab597a43fce Signed-off-by: Jin-young Jeon [jy0922.shim: remove unfit changes and write commit messages] Signed-off-by: Joonyoung Shim --- drivers/video/sprdfb/sprdfb_dispc.c | 41 ++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/drivers/video/sprdfb/sprdfb_dispc.c b/drivers/video/sprdfb/sprdfb_dispc.c index ae45768..8b6b63a 100644 --- a/drivers/video/sprdfb/sprdfb_dispc.c +++ b/drivers/video/sprdfb/sprdfb_dispc.c @@ -416,6 +416,24 @@ static irqreturn_t dispc_isr(int irq, void *data) return IRQ_HANDLED; } +static bool dispc_is_yuv_format(int type) +{ + bool ret = false; + + switch(type) { + case SPRD_DATA_FORMAT_YUV422: + case SPRD_DATA_FORMAT_YUV420: + case SPRD_DATA_FORMAT_YUV400: + case SPRD_DATA_FORMAT_YUV422_3P: + case SPRD_DATA_FORMAT_YUV420_3P: + ret = true; + break; + default: + break; + } + + return ret; +} /* dispc soft reset */ static void dispc_reset(void) @@ -1822,7 +1840,7 @@ static int overlay_img_configure(struct sprdfb_device *dev, int type, overlay_si reg_value = (rect->y << 16) | (rect->x); dispc_write(reg_value, DISPC_IMG_DISP_XY); - if(type < SPRD_DATA_FORMAT_RGB888) { + if(dispc_is_yuv_format(type)) { dispc_write(1, DISPC_Y2R_CTRL); #ifndef CONFIG_FB_SCX35 dispc_write(SPRDFB_BRIGHTNESS|SPRDFB_CONTRAST, DISPC_Y2R_Y_PARAM); @@ -2157,19 +2175,18 @@ static int32_t sprdfb_dispc_display_overlay(struct sprdfb_device *dev, struct ov if ((setting->layer_index & SPRD_LAYER_IMG) && img_buffer) { dispc_write((uint32_t)img_buffer, DISPC_IMG_Y_BASE_ADDR); - if (dispc_ctx.overlay_img_info.data_type < - SPRD_DATA_FORMAT_RGB888) { - uint32_t size = rect->w * rect->h; - dispc_write((uint32_t)(img_buffer + size), - DISPC_IMG_UV_BASE_ADDR); - } else if (dispc_ctx.overlay_img_info.data_type == SPRD_DATA_FORMAT_YUV422_3P) { - uint32_t size = rect->w * rect->h; - dispc_write((uint32_t)(img_buffer + size), DISPC_IMG_UV_BASE_ADDR); - dispc_write((uint32_t)(img_buffer + size*3/2), DISPC_IMG_V_BASE_ADDR); - } else if (dispc_ctx.overlay_img_info.data_type == SPRD_DATA_FORMAT_YUV420_3P) { + + if (dispc_is_yuv_format(dispc_ctx.overlay_img_info.data_type)) { uint32_t size = rect->w * rect->h; + dispc_write((uint32_t)(img_buffer + size), DISPC_IMG_UV_BASE_ADDR); - dispc_write((uint32_t)(img_buffer + size*5/4), DISPC_IMG_V_BASE_ADDR); + + if (dispc_ctx.overlay_img_info.data_type == SPRD_DATA_FORMAT_YUV422_3P) + dispc_write((uint32_t)(img_buffer + size * 3 / 2), + DISPC_IMG_V_BASE_ADDR); + else if (dispc_ctx.overlay_img_info.data_type == SPRD_DATA_FORMAT_YUV420_3P) + dispc_write((uint32_t)(img_buffer + size * 5 / 4), + DISPC_IMG_V_BASE_ADDR); } } -- 2.7.4 From 916b094f76ae8b8b0da443094a21c5b0e116d92e Mon Sep 17 00:00:00 2001 From: Jin-young Jeon Date: Thu, 10 Nov 2016 17:18:58 +0900 Subject: [PATCH 14/16] video/sprdfb: dispc: fix clipping problem for yuv buffer. Aligned width(pitch) instead of width of buffer should be used to calculate base address of UV and V of YUV image format, then this will solve clipping problem for YUV image. This commit comes from product kernel. Change-Id: Idafe5d0231888693a41450fe65b1af85d35f6911 Signed-off-by: Jin-young Jeon [jy0922.shim: rewrite commit messages] Signed-off-by: Joonyoung Shim --- drivers/video/sprdfb/sprdfb_dispc.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/drivers/video/sprdfb/sprdfb_dispc.c b/drivers/video/sprdfb/sprdfb_dispc.c index 8b6b63a..9c6836e 100644 --- a/drivers/video/sprdfb/sprdfb_dispc.c +++ b/drivers/video/sprdfb/sprdfb_dispc.c @@ -2056,8 +2056,7 @@ static int32_t sprdfb_dispc_disable_overlay(struct sprdfb_device *dev, int layer static int32_t sprdfb_dispc_display_overlay(struct sprdfb_device *dev, struct overlay_display* setting) { - struct overlay_rect *rect = NULL; - uint32_t size = 0; + struct overlay_size *size = NULL; unsigned char *osd_buffer = NULL; unsigned char *img_buffer = NULL; #ifdef CONFIG_DRM_SPRD @@ -2080,7 +2079,7 @@ static int32_t sprdfb_dispc_display_overlay(struct sprdfb_device *dev, struct ov #endif if (SPRD_LAYER_IMG == setting->layer_index) { - rect = &dispc_ctx.overlay_img_info.rect; + size = &dispc_ctx.overlay_img_info.size; #ifdef CONFIG_DRM_SPRD #ifdef CONFIG_SPRDFB_USE_GEM_INDEX @@ -2095,7 +2094,7 @@ static int32_t sprdfb_dispc_display_overlay(struct sprdfb_device *dev, struct ov img_buffer = setting->img_buffer; #endif } else if (SPRD_LAYER_OSD == setting->layer_index) { - rect = &dispc_ctx.overlay_osd_info.rect; + size = &dispc_ctx.overlay_osd_info.size; #ifdef CONFIG_DRM_SPRD #ifdef CONFIG_SPRDFB_USE_GEM_INDEX @@ -2110,7 +2109,7 @@ static int32_t sprdfb_dispc_display_overlay(struct sprdfb_device *dev, struct ov osd_buffer = setting->osd_buffer; #endif } else if (SPRD_LAYER_BOTH == setting->layer_index) { - rect = &dispc_ctx.overlay_img_info.rect; + size = &dispc_ctx.overlay_img_info.size; #ifdef CONFIG_DRM_SPRD #ifdef CONFIG_SPRDFB_USE_GEM_INDEX phys_addr = *((unsigned long *)sprd_drm_gem_get_obj_addr( @@ -2136,8 +2135,6 @@ static int32_t sprdfb_dispc_display_overlay(struct sprdfb_device *dev, struct ov } else return 0; - size = ((rect->h << 16) | (rect->w & 0xffff)); - #ifdef SPRDFB_OVERLAY_DEBUG dev->overlay_data.layer_index = setting->layer_index; dev->overlay_data.osd_buffer = osd_buffer; @@ -2177,15 +2174,15 @@ static int32_t sprdfb_dispc_display_overlay(struct sprdfb_device *dev, struct ov DISPC_IMG_Y_BASE_ADDR); if (dispc_is_yuv_format(dispc_ctx.overlay_img_info.data_type)) { - uint32_t size = rect->w * rect->h; + uint32_t buf_size = size->hsize * size->vsize; - dispc_write((uint32_t)(img_buffer + size), DISPC_IMG_UV_BASE_ADDR); + dispc_write((uint32_t)(img_buffer + buf_size), DISPC_IMG_UV_BASE_ADDR); if (dispc_ctx.overlay_img_info.data_type == SPRD_DATA_FORMAT_YUV422_3P) - dispc_write((uint32_t)(img_buffer + size * 3 / 2), + dispc_write((uint32_t)(img_buffer + buf_size * 3 / 2), DISPC_IMG_V_BASE_ADDR); else if (dispc_ctx.overlay_img_info.data_type == SPRD_DATA_FORMAT_YUV420_3P) - dispc_write((uint32_t)(img_buffer + size * 5 / 4), + dispc_write((uint32_t)(img_buffer + buf_size * 5 / 4), DISPC_IMG_V_BASE_ADDR); } } -- 2.7.4 From 842e874249aeb1c5a274e1bb3006e9d4d40590b6 Mon Sep 17 00:00:00 2001 From: Philip Pettersson Date: Thu, 8 Dec 2016 17:18:53 +0900 Subject: [PATCH 15/16] packet: fix race condition in packet_set_ring When packet_set_ring creates a ring buffer it will initialize a struct timer_list if the packet version is TPACKET_V3. This value can then be raced by a different thread calling setsockopt to set the version to TPACKET_V1 before packet_set_ring has finished. This leads to a use-after-free on a function pointer in the struct timer_list when the socket is closed as the previously initialized timer will not be deleted. The bug is fixed by taking lock_sock(sk) in packet_setsockopt when changing the packet version while also taking the lock at the start of packet_set_ring. Ps. This is CVE-2016-8655 patch, http://seclists.org/oss-sec/2016/q4/607 Change-Id: I3396f1bfe60b03082a981ae9d8a787b41cb5a529 Fixes: f6fb8f100b80 ("af-packet: TPACKET_V3 flexible buffer implementation.") Signed-off-by: Philip Pettersson Signed-off-by: Eric Dumazet Signed-off-by: David S. Miller Signed-off-by: Inki Dae --- net/packet/af_packet.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 81b4b81..8220608 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -3148,19 +3148,25 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv if (optlen != sizeof(val)) return -EINVAL; - if (po->rx_ring.pg_vec || po->tx_ring.pg_vec) - return -EBUSY; if (copy_from_user(&val, optval, sizeof(val))) return -EFAULT; switch (val) { case TPACKET_V1: case TPACKET_V2: case TPACKET_V3: - po->tp_version = val; - return 0; + break; default: return -EINVAL; } + lock_sock(sk); + if (po->rx_ring.pg_vec || po->tx_ring.pg_vec) { + ret = -EBUSY; + } else { + po->tp_version = val; + ret = 0; + } + release_sock(sk); + return ret; } case PACKET_RESERVE: { @@ -3615,6 +3621,7 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u, /* Added to avoid minimal code churn */ struct tpacket_req *req = &req_u->req; + lock_sock(sk); /* Opening a Tx-ring is NOT supported in TPACKET_V3 */ if (!closing && tx_ring && (po->tp_version > TPACKET_V2)) { WARN(1, "Tx-ring is not supported.\n"); @@ -3696,7 +3703,6 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u, goto out; } - lock_sock(sk); /* Detach socket from network */ spin_lock(&po->bind_lock); @@ -3745,11 +3751,11 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u, if (!tx_ring) prb_shutdown_retire_blk_timer(po, tx_ring, rb_queue); } - release_sock(sk); if (pg_vec) free_pg_vec(pg_vec, order, req->tp_block_nr); out: + release_sock(sk); return err; } -- 2.7.4 From e5244ccbc775acd5ec53da41c1a863487ee90bae Mon Sep 17 00:00:00 2001 From: Jiri Slaby Date: Mon, 13 Apr 2015 16:41:28 +0200 Subject: [PATCH 16/16] core, nfqueue, openvswitch: fix compilation warning MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Stable commit "core, nfqueue, openvswitch: Orphan frags in skb_zerocopy and handle errors", upstream commit 36d5fe6a000790f56039afe26834265db0a3ad4c, was not correctly backported and missed to change a const 'from' parameter to non-const. This results in a new batch of warnings: net/netfilter/nfnetlink_queue_core.c: In function ‘nfqnl_zcopy’: net/netfilter/nfnetlink_queue_core.c:272:2: warning: passing argument 1 of ‘skb_orphan_frags’ discards ‘const’ qualifier from pointer target type [enabled by default] if (unlikely(skb_orphan_frags(from, GFP_ATOMIC))) { ^ In file included from net/netfilter/nfnetlink_queue_core.c:18:0: include/linux/skbuff.h:1822:19: note: expected ‘struct sk_buff *’ but argument is of type ‘const struct sk_buff *’ static inline int skb_orphan_frags(struct sk_buff *skb, gfp_t gfp_mask) ^ net/netfilter/nfnetlink_queue_core.c:273:3: warning: passing argument 1 of ‘skb_tx_error’ discards ‘const’ qualifier from pointer target type [enabled by default] skb_tx_error(from); ^ In file included from net/netfilter/nfnetlink_queue_core.c:18:0: include/linux/skbuff.h:630:13: note: expected ‘struct sk_buff *’ but argument is of type ‘const struct sk_buff *’ extern void skb_tx_error(struct sk_buff *skb); Remove const from the 'from' parameter, the same as in the upstream commit. As far as I can see, this leaked into 3.10, 3.12, and 3.13 already. Cc: Zoltan Kiss Cc: David S. Miller Cc: Ben Hutchings Cc: Greg Kroah-Hartman Cc: Kamal Mostafa Signed-off-by: Jiri Slaby Signed-off-by: Greg Kroah-Hartman [applied from linux-3.10.y to fix build warning] Signed-off-by: Seung-Woo Kim Change-Id: I8ea0f40716ad40c79d5b076546ba2ac567eda0ee --- net/netfilter/nfnetlink_queue_core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/netfilter/nfnetlink_queue_core.c b/net/netfilter/nfnetlink_queue_core.c index e215a6a..8c6ffd1 100644 --- a/net/netfilter/nfnetlink_queue_core.c +++ b/net/netfilter/nfnetlink_queue_core.c @@ -229,7 +229,7 @@ nfqnl_flush(struct nfqnl_instance *queue, nfqnl_cmpfn cmpfn, unsigned long data) } static int -nfqnl_zcopy(struct sk_buff *to, const struct sk_buff *from, int len, int hlen) +nfqnl_zcopy(struct sk_buff *to, struct sk_buff *from, int len, int hlen) { int i, j = 0; int plen = 0; /* length of skb->head fragment */ -- 2.7.4