aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget/f_fs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/gadget/f_fs.c')
-rw-r--r--drivers/usb/gadget/f_fs.c33
1 files changed, 4 insertions, 29 deletions
diff --git a/drivers/usb/gadget/f_fs.c b/drivers/usb/gadget/f_fs.c
index 1e12b3ee56fd..74202d67f911 100644
--- a/drivers/usb/gadget/f_fs.c
+++ b/drivers/usb/gadget/f_fs.c
@@ -33,36 +33,11 @@
33#include <linux/poll.h> 33#include <linux/poll.h>
34 34
35#include "u_fs.h" 35#include "u_fs.h"
36#include "u_f.h"
36#include "configfs.h" 37#include "configfs.h"
37 38
38#define FUNCTIONFS_MAGIC 0xa647361 /* Chosen by a honest dice roll ;) */ 39#define FUNCTIONFS_MAGIC 0xa647361 /* Chosen by a honest dice roll ;) */
39 40
40/* Variable Length Array Macros **********************************************/
41#define vla_group(groupname) size_t groupname##__next = 0
42#define vla_group_size(groupname) groupname##__next
43
44#define vla_item(groupname, type, name, n) \
45 size_t groupname##_##name##__offset = ({ \
46 size_t align_mask = __alignof__(type) - 1; \
47 size_t offset = (groupname##__next + align_mask) & ~align_mask;\
48 size_t size = (n) * sizeof(type); \
49 groupname##__next = offset + size; \
50 offset; \
51 })
52
53#define vla_item_with_sz(groupname, type, name, n) \
54 size_t groupname##_##name##__sz = (n) * sizeof(type); \
55 size_t groupname##_##name##__offset = ({ \
56 size_t align_mask = __alignof__(type) - 1; \
57 size_t offset = (groupname##__next + align_mask) & ~align_mask;\
58 size_t size = groupname##_##name##__sz; \
59 groupname##__next = offset + size; \
60 offset; \
61 })
62
63#define vla_ptr(ptr, groupname, name) \
64 ((void *) ((char *)ptr + groupname##_##name##__offset))
65
66/* Reference counter handling */ 41/* Reference counter handling */
67static void ffs_data_get(struct ffs_data *ffs); 42static void ffs_data_get(struct ffs_data *ffs);
68static void ffs_data_put(struct ffs_data *ffs); 43static void ffs_data_put(struct ffs_data *ffs);
@@ -190,7 +165,7 @@ ffs_sb_create_file(struct super_block *sb, const char *name, void *data,
190/* Devices management *******************************************************/ 165/* Devices management *******************************************************/
191 166
192DEFINE_MUTEX(ffs_lock); 167DEFINE_MUTEX(ffs_lock);
193EXPORT_SYMBOL(ffs_lock); 168EXPORT_SYMBOL_GPL(ffs_lock);
194 169
195static struct ffs_dev *_ffs_find_dev(const char *name); 170static struct ffs_dev *_ffs_find_dev(const char *name);
196static struct ffs_dev *_ffs_alloc_dev(void); 171static struct ffs_dev *_ffs_alloc_dev(void);
@@ -2883,7 +2858,7 @@ int ffs_name_dev(struct ffs_dev *dev, const char *name)
2883 2858
2884 return ret; 2859 return ret;
2885} 2860}
2886EXPORT_SYMBOL(ffs_name_dev); 2861EXPORT_SYMBOL_GPL(ffs_name_dev);
2887 2862
2888int ffs_single_dev(struct ffs_dev *dev) 2863int ffs_single_dev(struct ffs_dev *dev)
2889{ 2864{
@@ -2900,7 +2875,7 @@ int ffs_single_dev(struct ffs_dev *dev)
2900 ffs_dev_unlock(); 2875 ffs_dev_unlock();
2901 return ret; 2876 return ret;
2902} 2877}
2903EXPORT_SYMBOL(ffs_single_dev); 2878EXPORT_SYMBOL_GPL(ffs_single_dev);
2904 2879
2905/* 2880/*
2906 * ffs_lock must be taken by the caller of this function 2881 * ffs_lock must be taken by the caller of this function