diff options
Diffstat (limited to 'patches.tizen/1213-usb-gadget-functionfs-replace-FFS_SETUP_STATUS-with-.patch')
-rw-r--r-- | patches.tizen/1213-usb-gadget-functionfs-replace-FFS_SETUP_STATUS-with-.patch | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/patches.tizen/1213-usb-gadget-functionfs-replace-FFS_SETUP_STATUS-with-.patch b/patches.tizen/1213-usb-gadget-functionfs-replace-FFS_SETUP_STATUS-with-.patch new file mode 100644 index 00000000000..bb6cc0cee27 --- /dev/null +++ b/patches.tizen/1213-usb-gadget-functionfs-replace-FFS_SETUP_STATUS-with-.patch @@ -0,0 +1,121 @@ +From cccccde3f66399d92c226271da2a9614e0e54dbb Mon Sep 17 00:00:00 2001 +From: Michal Nazarewicz <mina86@mina86.com> +Date: Mon, 10 Feb 2014 10:42:41 +0100 +Subject: [PATCH 1213/1302] usb: gadget: functionfs: replace FFS_SETUP_STATUS + with an inline function + +The FFS_SETUP_STATUS macro could be trivialy replaced with an static +inline function but more importantly its name was tad confusing. +The name suggested it was a simple accessor macro but it actually +did change the state of the ffs_data structure perfomring +a FFS_SETUP_CANCELLED -> FFS_NO_SETUP transition. The name of the +function -- ffs_setup_state_clear_cancelled -- should better +describe what the function actually does. + +Signed-off-by: Michal Nazarewicz <mina86@mina86.com> +Signed-off-by: Robert Baldyga <r.baldyga@samsung.com> +Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com> +--- + drivers/usb/gadget/f_fs.c | 22 ++++++++++++++++------ + drivers/usb/gadget/u_fs.h | 7 +++---- + 2 files changed, 19 insertions(+), 10 deletions(-) + +diff --git a/drivers/usb/gadget/f_fs.c b/drivers/usb/gadget/f_fs.c +index bfb52f6..169067c 100644 +--- a/drivers/usb/gadget/f_fs.c ++++ b/drivers/usb/gadget/f_fs.c +@@ -99,6 +99,14 @@ static struct ffs_function *ffs_func_from_usb(struct usb_function *f) + } + + ++static inline enum ffs_setup_state ++ffs_setup_state_clear_cancelled(struct ffs_data *ffs) ++{ ++ return (enum ffs_setup_state) ++ cmpxchg(&ffs->setup_state, FFS_SETUP_CANCELLED, FFS_NO_SETUP); ++} ++ ++ + static void ffs_func_eps_disable(struct ffs_function *func); + static int __must_check ffs_func_eps_enable(struct ffs_function *func); + +@@ -246,7 +254,7 @@ static ssize_t ffs_ep0_write(struct file *file, const char __user *buf, + ENTER(); + + /* Fast check if setup was canceled */ +- if (FFS_SETUP_STATE(ffs) == FFS_SETUP_CANCELLED) ++ if (ffs_setup_state_clear_cancelled(ffs) == FFS_SETUP_CANCELLED) + return -EIDRM; + + /* Acquire mutex */ +@@ -312,7 +320,7 @@ static ssize_t ffs_ep0_write(struct file *file, const char __user *buf, + * rather then _irqsave + */ + spin_lock_irq(&ffs->ev.waitq.lock); +- switch (FFS_SETUP_STATE(ffs)) { ++ switch (ffs_setup_state_clear_cancelled(ffs)) { + case FFS_SETUP_CANCELLED: + ret = -EIDRM; + goto done_spin; +@@ -357,7 +365,8 @@ static ssize_t ffs_ep0_write(struct file *file, const char __user *buf, + * transition can be performed and it's protected by + * mutex. + */ +- if (FFS_SETUP_STATE(ffs) == FFS_SETUP_CANCELLED) { ++ if (ffs_setup_state_clear_cancelled(ffs) == ++ FFS_SETUP_CANCELLED) { + ret = -EIDRM; + done_spin: + spin_unlock_irq(&ffs->ev.waitq.lock); +@@ -423,7 +432,7 @@ static ssize_t ffs_ep0_read(struct file *file, char __user *buf, + ENTER(); + + /* Fast check if setup was canceled */ +- if (FFS_SETUP_STATE(ffs) == FFS_SETUP_CANCELLED) ++ if (ffs_setup_state_clear_cancelled(ffs) == FFS_SETUP_CANCELLED) + return -EIDRM; + + /* Acquire mutex */ +@@ -443,7 +452,7 @@ static ssize_t ffs_ep0_read(struct file *file, char __user *buf, + */ + spin_lock_irq(&ffs->ev.waitq.lock); + +- switch (FFS_SETUP_STATE(ffs)) { ++ switch (ffs_setup_state_clear_cancelled(ffs)) { + case FFS_SETUP_CANCELLED: + ret = -EIDRM; + break; +@@ -491,7 +500,8 @@ static ssize_t ffs_ep0_read(struct file *file, char __user *buf, + spin_lock_irq(&ffs->ev.waitq.lock); + + /* See ffs_ep0_write() */ +- if (FFS_SETUP_STATE(ffs) == FFS_SETUP_CANCELLED) { ++ if (ffs_setup_state_clear_cancelled(ffs) == ++ FFS_SETUP_CANCELLED) { + ret = -EIDRM; + break; + } +diff --git a/drivers/usb/gadget/u_fs.h b/drivers/usb/gadget/u_fs.h +index 38012bc..78263cc 100644 +--- a/drivers/usb/gadget/u_fs.h ++++ b/drivers/usb/gadget/u_fs.h +@@ -172,13 +172,12 @@ struct ffs_data { + * happens only in ep0 i/o which is P: mutex + * + FFS_SETUP_PENDING -> FFS_SETUP_CANCELLED -- P: ev.waitq.lock + * + FFS_SETUP_CANCELLED -> FFS_NO_SETUP -- cmpxchg ++ * ++ * This field should never be accessed directly and instead ++ * ffs_setup_state_clear_cancelled function should be used. + */ + enum ffs_setup_state setup_state; + +-#define FFS_SETUP_STATE(ffs) \ +- ((enum ffs_setup_state)cmpxchg(&(ffs)->setup_state, \ +- FFS_SETUP_CANCELLED, FFS_NO_SETUP)) +- + /* Events & such. */ + struct { + u8 types[4]; +-- +1.8.3.2 + |