Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
bf02f5d2
Commit
bf02f5d2
authored
Oct 07, 2016
by
Al Viro
Browse files
Options
Browse Files
Download
Plain Diff
Merge commit '
2c563880
' into work.xattr
pick xattr_handler conversion from lustre tree
parents
4b899da5
2c563880
Changes
33
Hide whitespace changes
Inline
Side-by-side
Showing
33 changed files
with
296 additions
and
530 deletions
+296
-530
drivers/android/binder.c
drivers/android/binder.c
+1
-6
drivers/dma-buf/Kconfig
drivers/dma-buf/Kconfig
+13
-0
drivers/dma-buf/Makefile
drivers/dma-buf/Makefile
+1
-0
drivers/dma-buf/sw_sync.c
drivers/dma-buf/sw_sync.c
+34
-3
drivers/dma-buf/sync_debug.c
drivers/dma-buf/sync_debug.c
+1
-1
drivers/dma-buf/sync_debug.h
drivers/dma-buf/sync_debug.h
+1
-1
drivers/dma-buf/sync_trace.h
drivers/dma-buf/sync_trace.h
+3
-3
drivers/staging/android/Kconfig
drivers/staging/android/Kconfig
+0
-13
drivers/staging/android/Makefile
drivers/staging/android/Makefile
+0
-1
drivers/staging/android/ion/ion.c
drivers/staging/android/ion/ion.c
+12
-97
drivers/staging/android/ion/ion.h
drivers/staging/android/ion/ion.h
+0
-41
drivers/staging/android/ion/ion_carveout_heap.c
drivers/staging/android/ion/ion_carveout_heap.c
+4
-29
drivers/staging/android/ion/ion_chunk_heap.c
drivers/staging/android/ion/ion_chunk_heap.c
+2
-15
drivers/staging/android/ion/ion_cma_heap.c
drivers/staging/android/ion/ion_cma_heap.c
+1
-33
drivers/staging/android/ion/ion_priv.h
drivers/staging/android/ion/ion_priv.h
+1
-29
drivers/staging/android/ion/ion_system_heap.c
drivers/staging/android/ion/ion_system_heap.c
+3
-41
drivers/staging/comedi/drivers/usbduxfast.c
drivers/staging/comedi/drivers/usbduxfast.c
+1
-3
drivers/staging/ks7010/ks7010_sdio.c
drivers/staging/ks7010/ks7010_sdio.c
+8
-17
drivers/staging/ks7010/michael_mic.c
drivers/staging/ks7010/michael_mic.c
+13
-7
drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
+0
-5
drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c
drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c
+0
-7
drivers/staging/lustre/lnet/lnet/lib-msg.c
drivers/staging/lustre/lnet/lnet/lib-msg.c
+1
-17
drivers/staging/lustre/lustre/llite/file.c
drivers/staging/lustre/lustre/llite/file.c
+3
-3
drivers/staging/lustre/lustre/llite/llite_internal.h
drivers/staging/lustre/lustre/llite/llite_internal.h
+3
-5
drivers/staging/lustre/lustre/llite/llite_lib.c
drivers/staging/lustre/lustre/llite/llite_lib.c
+1
-0
drivers/staging/lustre/lustre/llite/namei.c
drivers/staging/lustre/lustre/llite/namei.c
+6
-6
drivers/staging/lustre/lustre/llite/symlink.c
drivers/staging/lustre/lustre/llite/symlink.c
+3
-3
drivers/staging/lustre/lustre/llite/xattr.c
drivers/staging/lustre/lustre/llite/xattr.c
+173
-116
drivers/staging/media/lirc/lirc_imon.c
drivers/staging/media/lirc/lirc_imon.c
+2
-7
drivers/staging/media/lirc/lirc_sasem.c
drivers/staging/media/lirc/lirc_sasem.c
+0
-5
drivers/staging/most/hdm-usb/hdm_usb.c
drivers/staging/most/hdm-usb/hdm_usb.c
+1
-3
drivers/staging/rtl8192u/r8192U_core.c
drivers/staging/rtl8192u/r8192U_core.c
+1
-4
drivers/staging/vt6656/main_usb.c
drivers/staging/vt6656/main_usb.c
+3
-9
No files found.
drivers/android/binder.c
View file @
bf02f5d2
...
...
@@ -59,7 +59,6 @@ static struct dentry *binder_debugfs_dir_entry_proc;
static
struct
binder_node
*
binder_context_mgr_node
;
static
kuid_t
binder_context_mgr_uid
=
INVALID_UID
;
static
int
binder_last_id
;
static
struct
workqueue_struct
*
binder_deferred_workqueue
;
#define BINDER_DEBUG_ENTRY(name) \
static int binder_##name##_open(struct inode *inode, struct file *file) \
...
...
@@ -3227,7 +3226,7 @@ binder_defer_work(struct binder_proc *proc, enum binder_deferred_state defer)
if
(
hlist_unhashed
(
&
proc
->
deferred_work_node
))
{
hlist_add_head
(
&
proc
->
deferred_work_node
,
&
binder_deferred_list
);
queue_work
(
binder_deferred_workqueue
,
&
binder_deferred_work
);
schedule_work
(
&
binder_deferred_work
);
}
mutex_unlock
(
&
binder_deferred_lock
);
}
...
...
@@ -3679,10 +3678,6 @@ static int __init binder_init(void)
{
int
ret
;
binder_deferred_workqueue
=
create_singlethread_workqueue
(
"binder"
);
if
(
!
binder_deferred_workqueue
)
return
-
ENOMEM
;
binder_debugfs_dir_entry_root
=
debugfs_create_dir
(
"binder"
,
NULL
);
if
(
binder_debugfs_dir_entry_root
)
binder_debugfs_dir_entry_proc
=
debugfs_create_dir
(
"proc"
,
...
...
drivers/dma-buf/Kconfig
View file @
bf02f5d2
...
...
@@ -17,4 +17,17 @@ config SYNC_FILE
Files fds, to the DRM driver for example. More details at
Documentation/sync_file.txt.
config SW_SYNC
bool "Sync File Validation Framework"
default n
depends on SYNC_FILE
depends on DEBUG_FS
---help---
A sync object driver that uses a 32bit counter to coordinate
synchronization. Useful when there is no hardware primitive backing
the synchronization.
WARNING: improper use of this can result in deadlocking kernel
drivers from userspace. Intended for test and debug only.
endmenu
drivers/dma-buf/Makefile
View file @
bf02f5d2
obj-y
:=
dma-buf.o fence.o reservation.o seqno-fence.o fence-array.o
obj-$(CONFIG_SYNC_FILE)
+=
sync_file.o
obj-$(CONFIG_SW_SYNC)
+=
sw_sync.o sync_debug.o
drivers/
staging/android
/sw_sync.c
→
drivers/
dma-buf
/sw_sync.c
View file @
bf02f5d2
/*
*
drivers/dma-buf/sw_sync.c
*
Sync File validation framework
*
* Copyright (C) 2012 Google, Inc.
*
...
...
@@ -23,8 +23,38 @@
#include "sync_debug.h"
#define CREATE_TRACE_POINTS
#include "
trace/sync
.h"
#include "
sync_trace
.h"
/*
* SW SYNC validation framework
*
* A sync object driver that uses a 32bit counter to coordinate
* synchronization. Useful when there is no hardware primitive backing
* the synchronization.
*
* To start the framework just open:
*
* <debugfs>/sync/sw_sync
*
* That will create a sync timeline, all fences created under this timeline
* file descriptor will belong to the this timeline.
*
* The 'sw_sync' file can be opened many times as to create different
* timelines.
*
* Fences can be created with SW_SYNC_IOC_CREATE_FENCE ioctl with struct
* sw_sync_ioctl_create_fence as parameter.
*
* To increment the timeline counter, SW_SYNC_IOC_INC ioctl should be used
* with the increment as u32. This will update the last signaled value
* from the timeline and signal any fence that has a seqno smaller or equal
* to it.
*
* struct sw_sync_ioctl_create_fence
* @value: the seqno to initialise the fence with
* @name: the name of the new sync point
* @fence: return the fd of the new sync_file with the created fence
*/
struct
sw_sync_create_fence_data
{
__u32
value
;
char
name
[
32
];
...
...
@@ -35,6 +65,7 @@ struct sw_sync_create_fence_data {
#define SW_SYNC_IOC_CREATE_FENCE _IOWR(SW_SYNC_IOC_MAGIC, 0,\
struct sw_sync_create_fence_data)
#define SW_SYNC_IOC_INC _IOW(SW_SYNC_IOC_MAGIC, 1, __u32)
static
const
struct
fence_ops
timeline_fence_ops
;
...
...
@@ -176,7 +207,7 @@ static void timeline_fence_release(struct fence *fence)
spin_lock_irqsave
(
fence
->
lock
,
flags
);
list_del
(
&
pt
->
child_list
);
if
(
WARN_ON_ONCE
(
!
list_empty
(
&
pt
->
active_list
)
))
if
(
!
list_empty
(
&
pt
->
active_list
))
list_del
(
&
pt
->
active_list
);
spin_unlock_irqrestore
(
fence
->
lock
,
flags
);
...
...
drivers/
staging/android
/sync_debug.c
→
drivers/
dma-buf
/sync_debug.c
View file @
bf02f5d2
/*
*
drivers/base/sync.c
*
Sync File validation framework and debug information
*
* Copyright (C) 2012 Google, Inc.
*
...
...
drivers/
staging/android
/sync_debug.h
→
drivers/
dma-buf
/sync_debug.h
View file @
bf02f5d2
/*
*
include/linux/sync.h
*
Sync File validation framework and debug infomation
*
* Copyright (C) 2012 Google, Inc.
*
...
...
drivers/
staging/android/trace/sync
.h
→
drivers/
dma-buf/sync_trace
.h
View file @
bf02f5d2
#undef TRACE_SYSTEM
#define TRACE_INCLUDE_PATH ../../drivers/
staging/android/trace
#define TRACE_SYSTEM sync
#define TRACE_INCLUDE_PATH ../../drivers/
dma-buf
#define TRACE_SYSTEM sync
_trace
#if !defined(_TRACE_SYNC_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_SYNC_H
#include "
../
sync_debug.h"
#include "sync_debug.h"
#include <linux/tracepoint.h>
TRACE_EVENT
(
sync_timeline
,
...
...
drivers/staging/android/Kconfig
View file @
bf02f5d2
...
...
@@ -24,19 +24,6 @@ config ANDROID_LOW_MEMORY_KILLER
scripts (/init.rc), and it defines priority values with minimum free memory size
for each priority.
config SW_SYNC
bool "Software synchronization framework"
default n
depends on SYNC_FILE
depends on DEBUG_FS
---help---
A sync object driver that uses a 32bit counter to coordinate
synchronization. Useful when there is no hardware primitive backing
the synchronization.
WARNING: improper use of this can result in deadlocking kernel
drivers from userspace. Intended for test and debug only.
source "drivers/staging/android/ion/Kconfig"
endif # if ANDROID
...
...
drivers/staging/android/Makefile
View file @
bf02f5d2
...
...
@@ -4,4 +4,3 @@ obj-y += ion/
obj-$(CONFIG_ASHMEM)
+=
ashmem.o
obj-$(CONFIG_ANDROID_LOW_MEMORY_KILLER)
+=
lowmemorykiller.o
obj-$(CONFIG_SW_SYNC)
+=
sw_sync.o sync_debug.o
drivers/staging/android/ion/ion.c
View file @
bf02f5d2
...
...
@@ -205,19 +205,16 @@ static struct ion_buffer *ion_buffer_create(struct ion_heap *heap,
goto
err2
;
}
buffer
->
dev
=
dev
;
buffer
->
size
=
len
;
table
=
heap
->
ops
->
map_dma
(
heap
,
buffer
);
if
(
WARN_ONCE
(
table
==
NULL
,
"heap->ops->map_dma should return ERR_PTR on error"
))
table
=
ERR_PTR
(
-
EINVAL
);
if
(
IS_ERR
(
table
))
{
if
(
buffer
->
sg_table
==
NULL
)
{
WARN_ONCE
(
1
,
"This heap needs to set the sgtable"
);
ret
=
-
EINVAL
;
goto
err1
;
}
buffer
->
sg_table
=
table
;
table
=
buffer
->
sg_table
;
buffer
->
dev
=
dev
;
buffer
->
size
=
len
;
if
(
ion_buffer_fault_user_mappings
(
buffer
))
{
int
num_pages
=
PAGE_ALIGN
(
buffer
->
size
)
/
PAGE_SIZE
;
struct
scatterlist
*
sg
;
...
...
@@ -226,7 +223,7 @@ static struct ion_buffer *ion_buffer_create(struct ion_heap *heap,
buffer
->
pages
=
vmalloc
(
sizeof
(
struct
page
*
)
*
num_pages
);
if
(
!
buffer
->
pages
)
{
ret
=
-
ENOMEM
;
goto
err
;
goto
err
1
;
}
for_each_sg
(
table
->
sgl
,
sg
,
table
->
nents
,
i
)
{
...
...
@@ -260,8 +257,6 @@ static struct ion_buffer *ion_buffer_create(struct ion_heap *heap,
mutex_unlock
(
&
dev
->
buffer_lock
);
return
buffer
;
err:
heap
->
ops
->
unmap_dma
(
heap
,
buffer
);
err1:
heap
->
ops
->
free
(
buffer
);
err2:
...
...
@@ -273,7 +268,6 @@ void ion_buffer_destroy(struct ion_buffer *buffer)
{
if
(
WARN_ON
(
buffer
->
kmap_cnt
>
0
))
buffer
->
heap
->
ops
->
unmap_kernel
(
buffer
->
heap
,
buffer
);
buffer
->
heap
->
ops
->
unmap_dma
(
buffer
->
heap
,
buffer
);
buffer
->
heap
->
ops
->
free
(
buffer
);
vfree
(
buffer
->
pages
);
kfree
(
buffer
);
...
...
@@ -551,7 +545,8 @@ struct ion_handle *ion_alloc(struct ion_client *client, size_t len,
}
EXPORT_SYMBOL
(
ion_alloc
);
static
void
ion_free_nolock
(
struct
ion_client
*
client
,
struct
ion_handle
*
handle
)
static
void
ion_free_nolock
(
struct
ion_client
*
client
,
struct
ion_handle
*
handle
)
{
bool
valid_handle
;
...
...
@@ -576,32 +571,6 @@ void ion_free(struct ion_client *client, struct ion_handle *handle)
}
EXPORT_SYMBOL
(
ion_free
);
int
ion_phys
(
struct
ion_client
*
client
,
struct
ion_handle
*
handle
,
ion_phys_addr_t
*
addr
,
size_t
*
len
)
{
struct
ion_buffer
*
buffer
;
int
ret
;
mutex_lock
(
&
client
->
lock
);
if
(
!
ion_handle_validate
(
client
,
handle
))
{
mutex_unlock
(
&
client
->
lock
);
return
-
EINVAL
;
}
buffer
=
handle
->
buffer
;
if
(
!
buffer
->
heap
->
ops
->
phys
)
{
pr_err
(
"%s: ion_phys is not implemented by this heap (name=%s, type=%d).
\n
"
,
__func__
,
buffer
->
heap
->
name
,
buffer
->
heap
->
type
);
mutex_unlock
(
&
client
->
lock
);
return
-
ENODEV
;
}
mutex_unlock
(
&
client
->
lock
);
ret
=
buffer
->
heap
->
ops
->
phys
(
buffer
->
heap
,
buffer
,
addr
,
len
);
return
ret
;
}
EXPORT_SYMBOL
(
ion_phys
);
static
void
*
ion_buffer_kmap_get
(
struct
ion_buffer
*
buffer
)
{
void
*
vaddr
;
...
...
@@ -917,26 +886,6 @@ void ion_client_destroy(struct ion_client *client)
}
EXPORT_SYMBOL
(
ion_client_destroy
);
struct
sg_table
*
ion_sg_table
(
struct
ion_client
*
client
,
struct
ion_handle
*
handle
)
{
struct
ion_buffer
*
buffer
;
struct
sg_table
*
table
;
mutex_lock
(
&
client
->
lock
);
if
(
!
ion_handle_validate
(
client
,
handle
))
{
pr_err
(
"%s: invalid handle passed to map_dma.
\n
"
,
__func__
);
mutex_unlock
(
&
client
->
lock
);
return
ERR_PTR
(
-
EINVAL
);
}
buffer
=
handle
->
buffer
;
table
=
buffer
->
sg_table
;
mutex_unlock
(
&
client
->
lock
);
return
table
;
}
EXPORT_SYMBOL
(
ion_sg_table
);
static
void
ion_buffer_sync_for_device
(
struct
ion_buffer
*
buffer
,
struct
device
*
dev
,
enum
dma_data_direction
direction
);
...
...
@@ -1358,7 +1307,8 @@ static long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
struct
ion_handle
*
handle
;
mutex_lock
(
&
client
->
lock
);
handle
=
ion_handle_get_by_id_nolock
(
client
,
data
.
handle
.
handle
);
handle
=
ion_handle_get_by_id_nolock
(
client
,
data
.
handle
.
handle
);
if
(
IS_ERR
(
handle
))
{
mutex_unlock
(
&
client
->
lock
);
return
PTR_ERR
(
handle
);
...
...
@@ -1588,8 +1538,7 @@ void ion_device_add_heap(struct ion_device *dev, struct ion_heap *heap)
{
struct
dentry
*
debug_file
;
if
(
!
heap
->
ops
->
allocate
||
!
heap
->
ops
->
free
||
!
heap
->
ops
->
map_dma
||
!
heap
->
ops
->
unmap_dma
)
if
(
!
heap
->
ops
->
allocate
||
!
heap
->
ops
->
free
)
pr_err
(
"%s: can not add heap with invalid ops struct.
\n
"
,
__func__
);
...
...
@@ -1703,37 +1652,3 @@ void ion_device_destroy(struct ion_device *dev)
}
EXPORT_SYMBOL
(
ion_device_destroy
);
void
__init
ion_reserve
(
struct
ion_platform_data
*
data
)
{
int
i
;
for
(
i
=
0
;
i
<
data
->
nr
;
i
++
)
{
if
(
data
->
heaps
[
i
].
size
==
0
)
continue
;
if
(
data
->
heaps
[
i
].
base
==
0
)
{
phys_addr_t
paddr
;
paddr
=
memblock_alloc_base
(
data
->
heaps
[
i
].
size
,
data
->
heaps
[
i
].
align
,
MEMBLOCK_ALLOC_ANYWHERE
);
if
(
!
paddr
)
{
pr_err
(
"%s: error allocating memblock for heap %d
\n
"
,
__func__
,
i
);
continue
;
}
data
->
heaps
[
i
].
base
=
paddr
;
}
else
{
int
ret
=
memblock_reserve
(
data
->
heaps
[
i
].
base
,
data
->
heaps
[
i
].
size
);
if
(
ret
)
pr_err
(
"memblock reserve of %zx@%lx failed
\n
"
,
data
->
heaps
[
i
].
size
,
data
->
heaps
[
i
].
base
);
}
pr_info
(
"%s: %s reserved base %lx size %zu
\n
"
,
__func__
,
data
->
heaps
[
i
].
name
,
data
->
heaps
[
i
].
base
,
data
->
heaps
[
i
].
size
);
}
}
drivers/staging/android/ion/ion.h
View file @
bf02f5d2
...
...
@@ -72,17 +72,6 @@ struct ion_platform_data {
struct
ion_platform_heap
*
heaps
;
};
/**
* ion_reserve() - reserve memory for ion heaps if applicable
* @data: platform data specifying starting physical address and
* size
*
* Calls memblock reserve to set aside memory for heaps that are
* located at specific memory addresses or of specific sizes not
* managed by the kernel
*/
void
ion_reserve
(
struct
ion_platform_data
*
data
);
/**
* ion_client_create() - allocate a client and returns it
* @dev: the global ion device
...
...
@@ -129,36 +118,6 @@ struct ion_handle *ion_alloc(struct ion_client *client, size_t len,
*/
void
ion_free
(
struct
ion_client
*
client
,
struct
ion_handle
*
handle
);
/**
* ion_phys - returns the physical address and len of a handle
* @client: the client
* @handle: the handle
* @addr: a pointer to put the address in
* @len: a pointer to put the length in
*
* This function queries the heap for a particular handle to get the
* handle's physical address. It't output is only correct if
* a heap returns physically contiguous memory -- in other cases
* this api should not be implemented -- ion_sg_table should be used
* instead. Returns -EINVAL if the handle is invalid. This has
* no implications on the reference counting of the handle --
* the returned value may not be valid if the caller is not
* holding a reference.
*/
int
ion_phys
(
struct
ion_client
*
client
,
struct
ion_handle
*
handle
,
ion_phys_addr_t
*
addr
,
size_t
*
len
);
/**
* ion_map_dma - return an sg_table describing a handle
* @client: the client
* @handle: the handle
*
* This function returns the sg_table describing
* a particular ion handle.
*/
struct
sg_table
*
ion_sg_table
(
struct
ion_client
*
client
,
struct
ion_handle
*
handle
);
/**
* ion_map_kernel - create mapping for the given handle
* @client: the client
...
...
drivers/staging/android/ion/ion_carveout_heap.c
View file @
bf02f5d2
...
...
@@ -25,6 +25,8 @@
#include "ion.h"
#include "ion_priv.h"
#define ION_CARVEOUT_ALLOCATE_FAIL -1
struct
ion_carveout_heap
{
struct
ion_heap
heap
;
struct
gen_pool
*
pool
;
...
...
@@ -56,19 +58,6 @@ void ion_carveout_free(struct ion_heap *heap, ion_phys_addr_t addr,
gen_pool_free
(
carveout_heap
->
pool
,
addr
,
size
);
}
static
int
ion_carveout_heap_phys
(
struct
ion_heap
*
heap
,
struct
ion_buffer
*
buffer
,
ion_phys_addr_t
*
addr
,
size_t
*
len
)
{
struct
sg_table
*
table
=
buffer
->
priv_virt
;
struct
page
*
page
=
sg_page
(
table
->
sgl
);
ion_phys_addr_t
paddr
=
PFN_PHYS
(
page_to_pfn
(
page
));
*
addr
=
paddr
;
*
len
=
buffer
->
size
;
return
0
;
}
static
int
ion_carveout_heap_allocate
(
struct
ion_heap
*
heap
,
struct
ion_buffer
*
buffer
,
unsigned
long
size
,
unsigned
long
align
,
...
...
@@ -95,7 +84,7 @@ static int ion_carveout_heap_allocate(struct ion_heap *heap,
}
sg_set_page
(
table
->
sgl
,
pfn_to_page
(
PFN_DOWN
(
paddr
)),
size
,
0
);
buffer
->
priv_virt
=
table
;
buffer
->
sg_table
=
table
;
return
0
;
...
...
@@ -109,7 +98,7 @@ static int ion_carveout_heap_allocate(struct ion_heap *heap,
static
void
ion_carveout_heap_free
(
struct
ion_buffer
*
buffer
)
{
struct
ion_heap
*
heap
=
buffer
->
heap
;
struct
sg_table
*
table
=
buffer
->
priv_virt
;
struct
sg_table
*
table
=
buffer
->
sg_table
;
struct
page
*
page
=
sg_page
(
table
->
sgl
);
ion_phys_addr_t
paddr
=
PFN_PHYS
(
page_to_pfn
(
page
));
...
...
@@ -124,23 +113,9 @@ static void ion_carveout_heap_free(struct ion_buffer *buffer)
kfree
(
table
);
}
static
struct
sg_table
*
ion_carveout_heap_map_dma
(
struct
ion_heap
*
heap
,
struct
ion_buffer
*
buffer
)
{
return
buffer
->
priv_virt
;
}
static
void
ion_carveout_heap_unmap_dma
(
struct
ion_heap
*
heap
,
struct
ion_buffer
*
buffer
)
{
}
static
struct
ion_heap_ops
carveout_heap_ops
=
{
.
allocate
=
ion_carveout_heap_allocate
,
.
free
=
ion_carveout_heap_free
,
.
phys
=
ion_carveout_heap_phys
,
.
map_dma
=
ion_carveout_heap_map_dma
,
.
unmap_dma
=
ion_carveout_heap_unmap_dma
,
.
map_user
=
ion_heap_map_user
,
.
map_kernel
=
ion_heap_map_kernel
,
.
unmap_kernel
=
ion_heap_unmap_kernel
,
...
...
drivers/staging/android/ion/ion_chunk_heap.c
View file @
bf02f5d2
...
...
@@ -75,7 +75,7 @@ static int ion_chunk_heap_allocate(struct ion_heap *heap,
sg
=
sg_next
(
sg
);
}
buffer
->
priv_virt
=
table
;
buffer
->
sg_table
=
table
;
chunk_heap
->
allocated
+=
allocated_size
;
return
0
;
err:
...
...
@@ -95,7 +95,7 @@ static void ion_chunk_heap_free(struct ion_buffer *buffer)
struct
ion_heap
*
heap
=
buffer
->
heap
;
struct
ion_chunk_heap
*
chunk_heap
=
container_of
(
heap
,
struct
ion_chunk_heap
,
heap
);
struct
sg_table
*
table
=
buffer
->
priv_virt
;
struct
sg_table
*
table
=
buffer
->
sg_table
;
struct
scatterlist
*
sg
;
int
i
;
unsigned
long
allocated_size
;
...
...
@@ -117,22 +117,9 @@ static void ion_chunk_heap_free(struct ion_buffer *buffer)
kfree
(
table
);
}
static
struct
sg_table
*
ion_chunk_heap_map_dma
(
struct
ion_heap
*
heap
,
struct
ion_buffer
*
buffer
)
{
return
buffer
->
priv_virt
;
}
static
void
ion_chunk_heap_unmap_dma
(
struct
ion_heap
*
heap
,
struct
ion_buffer
*
buffer
)
{
}
static
struct
ion_heap_ops
chunk_heap_ops
=
{
.
allocate
=
ion_chunk_heap_allocate
,
.
free
=
ion_chunk_heap_free
,
.
map_dma
=
ion_chunk_heap_map_dma
,
.
unmap_dma
=
ion_chunk_heap_unmap_dma
,
.
map_user
=
ion_heap_map_user
,
.
map_kernel
=
ion_heap_map_kernel
,
.
unmap_kernel
=
ion_heap_unmap_kernel
,
...
...
drivers/staging/android/ion/ion_cma_heap.c
View file @
bf02f5d2
...
...
@@ -78,6 +78,7 @@ static int ion_cma_allocate(struct ion_heap *heap, struct ion_buffer *buffer,
goto
free_table
;
/* keep this for memory release */
buffer
->
priv_virt
=
info
;
buffer
->
sg_table
=
info
->
table
;
dev_dbg
(
dev
,
"Allocate buffer %p
\n
"
,
buffer
);
return
0
;
...
...
@@ -105,36 +106,6 @@ static void ion_cma_free(struct ion_buffer *buffer)
kfree
(
info
);
}
/* return physical address in addr */
static
int
ion_cma_phys
(
struct
ion_heap
*
heap
,
struct
ion_buffer
*
buffer
,
ion_phys_addr_t
*
addr
,
size_t
*
len
)
{
struct
ion_cma_heap
*
cma_heap
=
to_cma_heap
(
buffer
->
heap
);
struct
device
*
dev
=
cma_heap
->
dev
;
struct
ion_cma_buffer_info
*
info
=
buffer
->
priv_virt
;
dev_dbg
(
dev
,
"Return buffer %p physical address %pa
\n
"
,
buffer
,
&
info
->
handle
);
*
addr
=
info
->
handle
;
*
len
=
buffer
->
size
;
return
0
;
}
static
struct
sg_table
*
ion_cma_heap_map_dma
(
struct
ion_heap
*
heap
,
struct
ion_buffer
*
buffer
)
{
struct
ion_cma_buffer_info
*
info
=
buffer
->
priv_virt
;
return
info
->
table
;
}
static
void
ion_cma_heap_unmap_dma
(
struct
ion_heap
*
heap
,
struct
ion_buffer
*
buffer
)
{
}
static
int
ion_cma_mmap
(
struct
ion_heap
*
mapper
,
struct
ion_buffer
*
buffer
,
struct
vm_area_struct
*
vma
)
{
...
...
@@ -162,9 +133,6 @@ static void ion_cma_unmap_kernel(struct ion_heap *heap,
static
struct
ion_heap_ops
ion_cma_ops
=
{
.
allocate
=
ion_cma_allocate
,
.
free
=
ion_cma_free
,
.
map_dma
=
ion_cma_heap_map_dma
,
.
unmap_dma
=
ion_cma_heap_unmap_dma
,
.
phys
=
ion_cma_phys
,
.
map_user
=
ion_cma_mmap
,
.
map_kernel
=
ion_cma_map_kernel
,
.
unmap_kernel
=
ion_cma_unmap_kernel
,
...
...
drivers/staging/android/ion/ion_priv.h
View file @
bf02f5d2
...
...
@@ -42,8 +42,6 @@ struct ion_buffer *ion_handle_buffer(struct ion_handle *handle);
* @size: size of the buffer
* @priv_virt: private data to the buffer representable as
* a void *
* @priv_phys: private data to the buffer representable as
* an ion_phys_addr_t (and someday a phys_addr_t)
* @lock: protects the buffers cnt fields
* @kmap_cnt: number of times the buffer is mapped to the kernel
* @vaddr: the kernel mapping if kmap_cnt is not zero
...
...
@@ -69,10 +67,7 @@ struct ion_buffer {
unsigned
long
flags
;
unsigned
long
private_flags
;
size_t
size
;
union
{
void
*
priv_virt
;
ion_phys_addr_t
priv_phys
;
};
void
*
priv_virt
;
struct
mutex
lock
;
int
kmap_cnt
;
void
*
vaddr
;
...
...
@@ -91,10 +86,6 @@ void ion_buffer_destroy(struct ion_buffer *buffer);
* struct ion_heap_ops - ops to operate on a given heap
* @allocate: allocate memory
* @free: free memory
* @phys get physical address of a buffer (only define on
* physically contiguous heaps)
* @map_dma map the memory for dma to a scatterlist
* @unmap_dma unmap the memory for dma
* @map_kernel map memory to the kernel
* @unmap_kernel unmap memory to the kernel
* @map_user map memory to userspace
...
...
@@ -111,11 +102,6 @@ struct ion_heap_ops {
struct
ion_buffer
*
buffer
,
unsigned
long
len
,
unsigned
long
align
,
unsigned
long
flags
);
void
(
*
free
)(
struct
ion_buffer
*
buffer
);
int
(
*
phys
)(
struct
ion_heap
*
heap
,
struct
ion_buffer
*
buffer
,
ion_phys_addr_t
*
addr
,
size_t
*
len
);
struct
sg_table
*
(
*
map_dma
)(
struct
ion_heap
*
heap
,
struct
ion_buffer
*
buffer
);
void
(
*
unmap_dma
)(
struct
ion_heap
*
heap
,
struct
ion_buffer
*
buffer
);
void
*
(
*
map_kernel
)(
struct
ion_heap
*
heap
,
struct
ion_buffer
*
buffer
);
void
(
*
unmap_kernel
)(
struct
ion_heap
*
heap
,
struct
ion_buffer
*
buffer
);
int
(
*
map_user
)(
struct
ion_heap
*
mapper
,
struct
ion_buffer
*
buffer
,
...
...
@@ -327,20 +313,6 @@ void ion_chunk_heap_destroy(struct ion_heap *);
struct
ion_heap
*
ion_cma_heap_create
(
struct
ion_platform_heap
*
);
void
ion_cma_heap_destroy
(
struct
ion_heap
*
);
/**
* kernel api to allocate/free from carveout -- used when carveout is
* used to back an architecture specific custom heap
*/
ion_phys_addr_t
ion_carveout_allocate
(
struct
ion_heap
*
heap
,
unsigned
long
size
,
unsigned
long
align
);
void
ion_carveout_free
(
struct
ion_heap
*
heap
,
ion_phys_addr_t
addr
,
unsigned
long
size
);
/**
* The carveout heap returns physical addresses, since 0 may be a valid
* physical address, this is used to indicate allocation failed
*/
#define ION_CARVEOUT_ALLOCATE_FAIL -1
/**
* functions for creating and destroying a heap pool -- allows you
* to keep a pool of pre allocated memory to use from your heap. Keeping
...
...
drivers/staging/android/ion/ion_system_heap.c
View file @
bf02f5d2
...
...
@@ -164,7 +164,7 @@ static int ion_system_heap_allocate(struct ion_heap *heap,
list_del
(
&
page
->
lru
);
}
buffer
->
priv_virt
=
table
;
buffer
->
sg_table
=
table
;
return
0
;
free_table:
...
...
@@ -199,17 +199,6 @@ static void ion_system_heap_free(struct ion_buffer *buffer)
kfree
(
table
);
}
static
struct
sg_table
*
ion_system_heap_map_dma
(
struct
ion_heap
*
heap
,
struct
ion_buffer
*
buffer
)
{
return
buffer
->
priv_virt
;
}
static
void
ion_system_heap_unmap_dma
(
struct
ion_heap
*
heap
,
struct
ion_buffer
*
buffer
)
{
}
static
int
ion_system_heap_shrink
(
struct
ion_heap
*
heap
,
gfp_t
gfp_mask
,
int
nr_to_scan
)
{
...
...
@@ -243,8 +232,6 @@ static int ion_system_heap_shrink(struct ion_heap *heap, gfp_t gfp_mask,
static
struct
ion_heap_ops
system_heap_ops
=
{
.
allocate
=
ion_system_heap_allocate
,
.
free
=
ion_system_heap_free
,
.
map_dma
=
ion_system_heap_map_dma
,
.
unmap_dma
=
ion_system_heap_unmap_dma
,
.
map_kernel
=
ion_heap_map_kernel
,
.
unmap_kernel
=
ion_heap_unmap_kernel
,
.
map_user
=
ion_heap_map_user
,
...
...
@@ -358,7 +345,7 @@ static int ion_system_contig_heap_allocate(struct ion_heap *heap,
sg_set_page
(
table
->
sgl
,
page
,
len
,
0
);
buffer
->
priv_virt
=
table
;
buffer
->
sg_table
=
table
;
ion_pages_sync_for_device
(
NULL
,
page
,
len
,
DMA_BIDIRECTIONAL
);
...
...
@@ -375,7 +362,7 @@ static int ion_system_contig_heap_allocate(struct ion_heap *heap,
static
void
ion_system_contig_heap_free
(
struct
ion_buffer
*
buffer
)
{
struct
sg_table
*
table
=
buffer
->
priv_virt
;
struct
sg_table
*
table
=
buffer
->
sg_table
;
struct
page
*
page
=
sg_page
(
table
->
sgl
);
unsigned
long
pages
=
PAGE_ALIGN
(
buffer
->
size
)
>>
PAGE_SHIFT
;
unsigned
long
i
;
...
...
@@ -386,34 +373,9 @@ static void ion_system_contig_heap_free(struct ion_buffer *buffer)
kfree
(
table
);
}
static
int
ion_system_contig_heap_phys
(
struct
ion_heap
*
heap
,
struct
ion_buffer
*
buffer
,
ion_phys_addr_t
*
addr
,
size_t
*
len
)
{
struct
sg_table
*
table
=
buffer
->
priv_virt
;
struct
page
*
page
=
sg_page
(
table
->
sgl
);
*
addr
=
page_to_phys
(
page
);
*
len
=
buffer
->
size
;
return
0
;
}
static
struct
sg_table
*
ion_system_contig_heap_map_dma
(
struct
ion_heap
*
heap
,
struct
ion_buffer
*
buffer
)
{
return
buffer
->
priv_virt
;
}
static
void
ion_system_contig_heap_unmap_dma
(
struct
ion_heap
*
heap
,
struct
ion_buffer
*
buffer
)
{
}
static
struct
ion_heap_ops
kmalloc_ops
=
{
.
allocate
=
ion_system_contig_heap_allocate
,
.
free
=
ion_system_contig_heap_free
,
.
phys
=
ion_system_contig_heap_phys
,
.
map_dma
=
ion_system_contig_heap_map_dma
,
.
unmap_dma
=
ion_system_contig_heap_unmap_dma
,
.
map_kernel
=
ion_heap_map_kernel
,
.
unmap_kernel
=
ion_heap_unmap_kernel
,
.
map_user
=
ion_heap_map_user
,
...
...
drivers/staging/comedi/drivers/usbduxfast.c
View file @
bf02f5d2
...
...
@@ -946,10 +946,8 @@ static int usbduxfast_auto_attach(struct comedi_device *dev,
}
devpriv
->
urb
=
usb_alloc_urb
(
0
,
GFP_KERNEL
);
if
(
!
devpriv
->
urb
)
{
dev_err
(
dev
->
class_dev
,
"Could not alloc. urb
\n
"
);
if
(
!
devpriv
->
urb
)
return
-
ENOMEM
;
}
devpriv
->
inbuf
=
kmalloc
(
SIZEINBUF
,
GFP_KERNEL
);
if
(
!
devpriv
->
inbuf
)
...
...
drivers/staging/ks7010/ks7010_sdio.c
View file @
bf02f5d2
...
...
@@ -297,11 +297,10 @@ static int enqueue_txdev(struct ks_wlan_private *priv, unsigned char *p,
static
int
write_to_device
(
struct
ks_wlan_private
*
priv
,
unsigned
char
*
buffer
,
unsigned
long
size
)
{
int
r
c
,
r
etval
;
int
retval
;
unsigned
char
rw_data
;
struct
hostif_hdr
*
hdr
;
hdr
=
(
struct
hostif_hdr
*
)
buffer
;
rc
=
0
;
DPRINTK
(
4
,
"size=%d
\n
"
,
hdr
->
size
);
if
(
hdr
->
event
<
HIF_DATA_REQ
||
HIF_REQ_MAX
<
hdr
->
event
)
{
...
...
@@ -711,7 +710,6 @@ static int ks7010_sdio_update_index(struct ks_wlan_private *priv, u32 index)
int
rc
=
0
;
int
retval
;
unsigned
char
*
data_buf
;
data_buf
=
NULL
;
data_buf
=
kmalloc
(
sizeof
(
u32
),
GFP_KERNEL
);
if
(
!
data_buf
)
{
...
...
@@ -732,8 +730,7 @@ static int ks7010_sdio_update_index(struct ks_wlan_private *priv, u32 index)
goto
error_out
;
}
error_out:
if
(
data_buf
)
kfree
(
data_buf
);
kfree
(
data_buf
);
return
rc
;
}
...
...
@@ -744,7 +741,7 @@ static int ks7010_sdio_data_compare(struct ks_wlan_private *priv, u32 address,
int
rc
=
0
;
int
retval
;
unsigned
char
*
read_buf
;
read_buf
=
NULL
;
read_buf
=
kmalloc
(
ROM_BUFF_SIZE
,
GFP_KERNEL
);
if
(
!
read_buf
)
{
rc
=
1
;
...
...
@@ -763,8 +760,7 @@ static int ks7010_sdio_data_compare(struct ks_wlan_private *priv, u32 address,
goto
error_out
;
}
error_out:
if
(
read_buf
)
kfree
(
read_buf
);
kfree
(
read_buf
);
return
rc
;
}
...
...
@@ -778,8 +774,6 @@ static int ks7010_upload_firmware(struct ks_wlan_private *priv,
int
length
;
const
struct
firmware
*
fw_entry
=
NULL
;
rom_buf
=
NULL
;
/* buffer allocate */
rom_buf
=
kmalloc
(
ROM_BUFF_SIZE
,
GFP_KERNEL
);
if
(
!
rom_buf
)
{
...
...
@@ -879,8 +873,7 @@ static int ks7010_upload_firmware(struct ks_wlan_private *priv,
release_firmware
(
fw_entry
);
error_out0:
sdio_release_host
(
card
->
func
);
if
(
rom_buf
)
kfree
(
rom_buf
);
kfree
(
rom_buf
);
return
rc
;
}
...
...
@@ -1141,7 +1134,6 @@ static void ks7010_sdio_remove(struct sdio_func *func)
int
ret
;
struct
ks_sdio_card
*
card
;
struct
ks_wlan_private
*
priv
;
struct
net_device
*
netdev
;
DPRINTK
(
1
,
"ks7010_sdio_remove()
\n
"
);
card
=
sdio_get_drvdata
(
func
);
...
...
@@ -1151,8 +1143,9 @@ static void ks7010_sdio_remove(struct sdio_func *func)
DPRINTK
(
1
,
"priv = card->priv
\n
"
);
priv
=
card
->
priv
;
netdev
=
priv
->
net_dev
;
if
(
priv
)
{
struct
net_device
*
netdev
=
priv
->
net_dev
;
ks_wlan_net_stop
(
netdev
);
DPRINTK
(
1
,
"ks_wlan_net_stop
\n
"
);
...
...
@@ -1199,9 +1192,7 @@ static void ks7010_sdio_remove(struct sdio_func *func)
unregister_netdev
(
netdev
);
trx_device_exit
(
priv
);
if
(
priv
->
ks_wlan_hw
.
read_buf
)
{
kfree
(
priv
->
ks_wlan_hw
.
read_buf
);
}
kfree
(
priv
->
ks_wlan_hw
.
read_buf
);
free_netdev
(
priv
->
net_dev
);
card
->
priv
=
NULL
;
}
...
...
drivers/staging/ks7010/michael_mic.c
View file @
bf02f5d2
...
...
@@ -20,15 +20,21 @@
#define getUInt32( A, B ) (uint32_t)(A[B+0] << 0) + (A[B+1] << 8) + (A[B+2] << 16) + (A[B+3] << 24)
// Convert from UInt32 to Byte[] in a portable way
#define putUInt32( A, B, C ) A[B+0] = (uint8_t) (C & 0xff); \
A[B+1] = (uint8_t) ((C>>8) & 0xff); \
A[B+2] = (uint8_t) ((C>>16) & 0xff); \
A[B+3] = (uint8_t) ((C>>24) & 0xff)
#define putUInt32(A, B, C) \
do { \
A[B + 0] = (uint8_t)(C & 0xff); \
A[B + 1] = (uint8_t)((C >> 8) & 0xff); \
A[B + 2] = (uint8_t)((C >> 16) & 0xff); \
A[B + 3] = (uint8_t)((C >> 24) & 0xff); \
} while (0)
// Reset the state to the empty message.
#define MichaelClear( A ) A->L = A->K0; \
A->R = A->K1; \
A->nBytesInM = 0;
#define MichaelClear(A) \
do { \
A->L = A->K0; \
A->R = A->K1; \
A->nBytesInM = 0; \
} while (0)
static
void
MichaelInitializeFunction
(
struct
michel_mic_t
*
Mic
,
uint8_t
*
key
)
...
...
drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
View file @
bf02f5d2
...
...
@@ -1468,11 +1468,6 @@ ksocknal_close_conn_locked(struct ksock_conn *conn, int error)
conn
->
ksnc_route
=
NULL
;
#if 0 /* irrelevant with only eager routes */
/* make route least favourite */
list_del(&route->ksnr_list);
list_add_tail(&route->ksnr_list, &peer->ksnp_routes);
#endif
ksocknal_route_decref
(
route
);
/* drop conn's ref on route */
}
...
...
drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c
View file @
bf02f5d2
...
...
@@ -2008,13 +2008,6 @@ ksocknal_connect(struct ksock_route *route)
list_splice_init
(
&
peer
->
ksnp_tx_queue
,
&
zombies
);
}
#if 0 /* irrelevant with only eager routes */
if (!route->ksnr_deleted) {
/* make this route least-favourite for re-selection */
list_del(&route->ksnr_list);
list_add_tail(&route->ksnr_list, &peer->ksnp_routes);
}
#endif
write_unlock_bh
(
&
ksocknal_data
.
ksnd_global_lock
);
ksocknal_peer_failed
(
peer
);
...
...
drivers/staging/lustre/lnet/lnet/lib-msg.c
View file @
bf02f5d2
...
...
@@ -449,23 +449,7 @@ lnet_finalize(lnet_ni_t *ni, lnet_msg_t *msg, int status)
if
(
!
msg
)
return
;
#if 0
CDEBUG(D_WARNING, "%s msg->%s Flags:%s%s%s%s%s%s%s%s%s%s%s txp %s rxp %s\n",
lnet_msgtyp2str(msg->msg_type), libcfs_id2str(msg->msg_target),
msg->msg_target_is_router ? "t" : "",
msg->msg_routing ? "X" : "",
msg->msg_ack ? "A" : "",
msg->msg_sending ? "S" : "",
msg->msg_receiving ? "R" : "",
msg->msg_delayed ? "d" : "",
msg->msg_txcredit ? "C" : "",
msg->msg_peertxcredit ? "c" : "",
msg->msg_rtrcredit ? "F" : "",
msg->msg_peerrtrcredit ? "f" : "",
msg->msg_onactivelist ? "!" : "",
!msg->msg_txpeer ? "<none>" : libcfs_nid2str(msg->msg_txpeer->lp_nid),
!msg->msg_rxpeer ? "<none>" : libcfs_nid2str(msg->msg_rxpeer->lp_nid));
#endif
msg
->
msg_ev
.
status
=
status
;
if
(
msg
->
msg_md
)
{
...
...
drivers/staging/lustre/lustre/llite/file.c
View file @
bf02f5d2
...
...
@@ -3213,10 +3213,10 @@ const struct inode_operations ll_file_inode_operations = {
.
setattr
=
ll_setattr
,
.
getattr
=
ll_getattr
,
.
permission
=
ll_inode_permission
,
.
setxattr
=
ll
_setxattr
,
.
getxattr
=
ll
_getxattr
,
.
setxattr
=
generic
_setxattr
,
.
getxattr
=
generic
_getxattr
,
.
listxattr
=
ll_listxattr
,
.
removexattr
=
ll
_removexattr
,
.
removexattr
=
generic
_removexattr
,
.
fiemap
=
ll_fiemap
,
.
get_acl
=
ll_get_acl
,
};
...
...
drivers/staging/lustre/lustre/llite/llite_internal.h
View file @
bf02f5d2
...
...
@@ -42,6 +42,7 @@
#include "../include/lustre_mdc.h"
#include "../include/lustre_intent.h"
#include <linux/compat.h>
#include <linux/xattr.h>
#include <linux/posix_acl_xattr.h>
#include "vvp_internal.h"
...
...
@@ -933,12 +934,9 @@ static inline __u64 ll_file_maxbytes(struct inode *inode)
}
/* llite/xattr.c */
int
ll_setxattr
(
struct
dentry
*
dentry
,
struct
inode
*
inode
,
const
char
*
name
,
const
void
*
value
,
size_t
size
,
int
flags
);
ssize_t
ll_getxattr
(
struct
dentry
*
dentry
,
struct
inode
*
inode
,
const
char
*
name
,
void
*
buffer
,
size_t
size
);
extern
const
struct
xattr_handler
*
ll_xattr_handlers
[];
ssize_t
ll_listxattr
(
struct
dentry
*
dentry
,
char
*
buffer
,
size_t
size
);
int
ll_removexattr
(
struct
dentry
*
dentry
,
const
char
*
name
);
/**
* Common IO arguments for various VFS I/O interfaces.
...
...
drivers/staging/lustre/lustre/llite/llite_lib.c
View file @
bf02f5d2
...
...
@@ -418,6 +418,7 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt,
CDEBUG
(
D_SUPER
,
"rootfid "
DFID
"
\n
"
,
PFID
(
&
sbi
->
ll_root_fid
));
sb
->
s_op
=
&
lustre_super_operations
;
sb
->
s_xattr
=
ll_xattr_handlers
;
#if THREAD_SIZE >= 8192
/*b=17630*/
sb
->
s_export_op
=
&
lustre_export_operations
;
#endif
...
...
drivers/staging/lustre/lustre/llite/namei.c
View file @
bf02f5d2
...
...
@@ -1106,10 +1106,10 @@ const struct inode_operations ll_dir_inode_operations = {
.
setattr
=
ll_setattr
,
.
getattr
=
ll_getattr
,
.
permission
=
ll_inode_permission
,
.
setxattr
=
ll
_setxattr
,
.
getxattr
=
ll
_getxattr
,
.
setxattr
=
generic
_setxattr
,
.
getxattr
=
generic
_getxattr
,
.
listxattr
=
ll_listxattr
,
.
removexattr
=
ll
_removexattr
,
.
removexattr
=
generic
_removexattr
,
.
get_acl
=
ll_get_acl
,
};
...
...
@@ -1117,9 +1117,9 @@ const struct inode_operations ll_special_inode_operations = {
.
setattr
=
ll_setattr
,
.
getattr
=
ll_getattr
,
.
permission
=
ll_inode_permission
,
.
setxattr
=
ll
_setxattr
,
.
getxattr
=
ll
_getxattr
,
.
setxattr
=
generic
_setxattr
,
.
getxattr
=
generic
_getxattr
,
.
listxattr
=
ll_listxattr
,
.
removexattr
=
ll
_removexattr
,
.
removexattr
=
generic
_removexattr
,
.
get_acl
=
ll_get_acl
,
};
drivers/staging/lustre/lustre/llite/symlink.c
View file @
bf02f5d2
...
...
@@ -155,8 +155,8 @@ const struct inode_operations ll_fast_symlink_inode_operations = {
.
get_link
=
ll_get_link
,
.
getattr
=
ll_getattr
,
.
permission
=
ll_inode_permission
,
.
setxattr
=
ll
_setxattr
,
.
getxattr
=
ll
_getxattr
,
.
setxattr
=
generic
_setxattr
,
.
getxattr
=
generic
_getxattr
,
.
listxattr
=
ll_listxattr
,
.
removexattr
=
ll
_removexattr
,
.
removexattr
=
generic
_removexattr
,
};
drivers/staging/lustre/lustre/llite/xattr.c
View file @
bf02f5d2
...
...
@@ -99,46 +99,57 @@ int xattr_type_filter(struct ll_sb_info *sbi, int xattr_type)
return
0
;
}
static
int
ll_setxattr_common
(
struct
inode
*
inode
,
const
char
*
name
,
const
void
*
value
,
size_t
size
,
int
flags
,
__u64
valid
)
static
int
ll_xattr_set_common
(
const
struct
xattr_handler
*
handler
,
struct
dentry
*
dentry
,
struct
inode
*
inode
,
const
char
*
name
,
const
void
*
value
,
size_t
size
,
int
flags
)
{
char
fullname
[
strlen
(
handler
->
prefix
)
+
strlen
(
name
)
+
1
];
struct
ll_sb_info
*
sbi
=
ll_i2sbi
(
inode
);
struct
ptlrpc_request
*
req
=
NULL
;
int
xattr_type
,
rc
;
const
char
*
pv
=
value
;
__u64
valid
;
int
rc
;
if
(
flags
==
XATTR_REPLACE
)
{
ll_stats_ops_tally
(
ll_i2sbi
(
inode
),
LPROC_LL_REMOVEXATTR
,
1
);
valid
=
OBD_MD_FLXATTRRM
;
}
else
{
ll_stats_ops_tally
(
ll_i2sbi
(
inode
),
LPROC_LL_SETXATTR
,
1
);
valid
=
OBD_MD_FLXATTR
;
}
xattr_type
=
get_xattr_type
(
name
);
rc
=
xattr_type_filter
(
sbi
,
xattr_type
);
rc
=
xattr_type_filter
(
sbi
,
handler
->
flags
);
if
(
rc
)
return
rc
;
if
((
xattr_type
==
XATTR_ACL_ACCESS_T
||
xattr_type
==
XATTR_ACL_DEFAULT_T
)
&&
if
((
handler
->
flags
==
XATTR_ACL_ACCESS_T
||
handler
->
flags
==
XATTR_ACL_DEFAULT_T
)
&&
!
inode_owner_or_capable
(
inode
))
return
-
EPERM
;
/* b10667: ignore lustre special xattr for now */
if
((
xattr_type
==
XATTR_TRUSTED_T
&&
strcmp
(
name
,
"trusted.lov"
)
==
0
)
||
(
xattr_type
==
XATTR_LUSTRE_T
&&
strcmp
(
name
,
"lustre.lov"
)
==
0
))
if
((
handler
->
flags
==
XATTR_TRUSTED_T
&&
!
strcmp
(
name
,
"lov"
)
)
||
(
handler
->
flags
==
XATTR_LUSTRE_T
&&
!
strcmp
(
name
,
"lov"
)
))
return
0
;
/* b15587: ignore security.capability xattr for now */
if
((
xattr_type
==
XATTR_SECURITY_T
&&
strcmp
(
name
,
"security.capability"
)
==
0
))
if
((
handler
->
flags
==
XATTR_SECURITY_T
&&
!
strcmp
(
name
,
"capability"
)
))
return
0
;
/* LU-549: Disable security.selinux when selinux is disabled */
if
(
xattr_type
==
XATTR_SECURITY_T
&&
!
selinux_is_enabled
()
&&
strcmp
(
name
,
"se
curity.se
linux"
)
==
0
)
if
(
handler
->
flags
==
XATTR_SECURITY_T
&&
!
selinux_is_enabled
()
&&
strcmp
(
name
,
"selinux"
)
==
0
)
return
-
EOPNOTSUPP
;
sprintf
(
fullname
,
"%s%s
\n
"
,
handler
->
prefix
,
name
);
rc
=
md_setxattr
(
sbi
->
ll_md_exp
,
ll_inode2fid
(
inode
),
valid
,
name
,
pv
,
size
,
0
,
flags
,
valid
,
full
name
,
pv
,
size
,
0
,
flags
,
ll_i2suppgid
(
inode
),
&
req
);
if
(
rc
)
{
if
(
rc
==
-
EOPNOTSUPP
&&
xattr_type
==
XATTR_USER_T
)
{
if
(
rc
==
-
EOPNOTSUPP
&&
handler
->
flags
==
XATTR_USER_T
)
{
LCONSOLE_INFO
(
"Disabling user_xattr feature because it is not supported on the server
\n
"
);
sbi
->
ll_flags
&=
~
LL_SBI_USER_XATTR
;
}
...
...
@@ -149,8 +160,10 @@ int ll_setxattr_common(struct inode *inode, const char *name,
return
0
;
}
int
ll_setxattr
(
struct
dentry
*
dentry
,
struct
inode
*
inode
,
const
char
*
name
,
const
void
*
value
,
size_t
size
,
int
flags
)
static
int
ll_xattr_set
(
const
struct
xattr_handler
*
handler
,
struct
dentry
*
dentry
,
struct
inode
*
inode
,
const
char
*
name
,
const
void
*
value
,
size_t
size
,
int
flags
)
{
LASSERT
(
inode
);
LASSERT
(
name
);
...
...
@@ -158,20 +171,24 @@ int ll_setxattr(struct dentry *dentry, struct inode *inode,
CDEBUG
(
D_VFSTRACE
,
"VFS Op:inode="
DFID
"(%p), xattr %s
\n
"
,
PFID
(
ll_inode2fid
(
inode
)),
inode
,
name
);
ll_stats_ops_tally
(
ll_i2sbi
(
inode
),
LPROC_LL_SETXATTR
,
1
);
if
((
strncmp
(
name
,
XATTR_TRUSTED_PREFIX
,
sizeof
(
XATTR_TRUSTED_PREFIX
)
-
1
)
==
0
&&
strcmp
(
name
+
sizeof
(
XATTR_TRUSTED_PREFIX
)
-
1
,
"lov"
)
==
0
)
||
(
strncmp
(
name
,
XATTR_LUSTRE_PREFIX
,
sizeof
(
XATTR_LUSTRE_PREFIX
)
-
1
)
==
0
&&
strcmp
(
name
+
sizeof
(
XATTR_LUSTRE_PREFIX
)
-
1
,
"lov"
)
==
0
))
{
if
(
!
strcmp
(
name
,
"lov"
))
{
struct
lov_user_md
*
lump
=
(
struct
lov_user_md
*
)
value
;
int
op_type
=
flags
==
XATTR_REPLACE
?
LPROC_LL_REMOVEXATTR
:
LPROC_LL_SETXATTR
;
int
rc
=
0
;
ll_stats_ops_tally
(
ll_i2sbi
(
inode
),
op_type
,
1
);
if
(
size
!=
0
&&
size
<
sizeof
(
struct
lov_user_md
))
return
-
EINVAL
;
/*
* It is possible to set an xattr to a "" value of zero size.
* For this case we are going to treat it as a removal.
*/
if
(
!
size
&&
lump
)
lump
=
NULL
;
/* Attributes that are saved via getxattr will always have
* the stripe_offset as 0. Instead, the MDS should be
* allowed to pick the starting OST index. b=17846
...
...
@@ -194,92 +211,27 @@ int ll_setxattr(struct dentry *dentry, struct inode *inode,
return
rc
;
}
else
if
(
strcmp
(
name
,
XATTR_NAME_LMA
)
==
0
||
strcmp
(
name
,
XATTR_NAME_LINK
)
==
0
)
}
else
if
(
!
strcmp
(
name
,
"lma"
)
||
!
strcmp
(
name
,
"link"
))
{
ll_stats_ops_tally
(
ll_i2sbi
(
inode
),
LPROC_LL_SETXATTR
,
1
);
return
0
;
}
return
ll_setxattr_common
(
inode
,
name
,
value
,
size
,
flags
,
OBD_MD_FLXATTR
);
}
int
ll_removexattr
(
struct
dentry
*
dentry
,
const
char
*
name
)
{
struct
inode
*
inode
=
d_inode
(
dentry
);
LASSERT
(
inode
);
LASSERT
(
name
);
CDEBUG
(
D_VFSTRACE
,
"VFS Op:inode="
DFID
"(%p), xattr %s
\n
"
,
PFID
(
ll_inode2fid
(
inode
)),
inode
,
name
);
ll_stats_ops_tally
(
ll_i2sbi
(
inode
),
LPROC_LL_REMOVEXATTR
,
1
);
return
ll_setxattr_common
(
inode
,
name
,
NULL
,
0
,
0
,
OBD_MD_FLXATTRRM
);
return
ll_xattr_set_common
(
handler
,
dentry
,
inode
,
name
,
value
,
size
,
flags
);
}
static
int
ll_getxattr_common
(
struct
inode
*
inode
,
const
char
*
name
,
void
*
buffer
,
size_t
size
,
__u64
valid
)
static
int
ll_xattr_list
(
struct
inode
*
inode
,
const
char
*
name
,
int
type
,
void
*
buffer
,
size_t
size
,
__u64
valid
)
{
struct
ll_inode_info
*
lli
=
ll_i2info
(
inode
);
struct
ll_sb_info
*
sbi
=
ll_i2sbi
(
inode
);
struct
ptlrpc_request
*
req
=
NULL
;
struct
mdt_body
*
body
;
int
xattr_type
,
rc
;
void
*
xdata
;
struct
ll_inode_info
*
lli
=
ll_i2info
(
inode
);
CDEBUG
(
D_VFSTRACE
,
"VFS Op:inode="
DFID
"(%p)
\n
"
,
PFID
(
ll_inode2fid
(
inode
)),
inode
);
/* listxattr have slightly different behavior from of ext3:
* without 'user_xattr' ext3 will list all xattr names but
* filtered out "^user..*"; we list them all for simplicity.
*/
if
(
!
name
)
{
xattr_type
=
XATTR_OTHER_T
;
goto
do_getxattr
;
}
xattr_type
=
get_xattr_type
(
name
);
rc
=
xattr_type_filter
(
sbi
,
xattr_type
);
if
(
rc
)
return
rc
;
/* b15587: ignore security.capability xattr for now */
if
((
xattr_type
==
XATTR_SECURITY_T
&&
strcmp
(
name
,
"security.capability"
)
==
0
))
return
-
ENODATA
;
/* LU-549: Disable security.selinux when selinux is disabled */
if
(
xattr_type
==
XATTR_SECURITY_T
&&
!
selinux_is_enabled
()
&&
strcmp
(
name
,
"security.selinux"
)
==
0
)
return
-
EOPNOTSUPP
;
#ifdef CONFIG_FS_POSIX_ACL
/* posix acl is under protection of LOOKUP lock. when calling to this,
* we just have path resolution to the target inode, so we have great
* chance that cached ACL is uptodate.
*/
if
(
xattr_type
==
XATTR_ACL_ACCESS_T
)
{
struct
posix_acl
*
acl
;
spin_lock
(
&
lli
->
lli_lock
);
acl
=
posix_acl_dup
(
lli
->
lli_posix_acl
);
spin_unlock
(
&
lli
->
lli_lock
);
if
(
!
acl
)
return
-
ENODATA
;
int
rc
;
rc
=
posix_acl_to_xattr
(
&
init_user_ns
,
acl
,
buffer
,
size
);
posix_acl_release
(
acl
);
return
rc
;
}
if
(
xattr_type
==
XATTR_ACL_DEFAULT_T
&&
!
S_ISDIR
(
inode
->
i_mode
))
return
-
ENODATA
;
#endif
do_getxattr:
if
(
sbi
->
ll_xattr_cache_enabled
&&
xattr_type
!=
XATTR_ACL_ACCESS_T
)
{
if
(
sbi
->
ll_xattr_cache_enabled
&&
type
!=
XATTR_ACL_ACCESS_T
)
{
rc
=
ll_xattr_cache_get
(
inode
,
name
,
buffer
,
size
,
valid
);
if
(
rc
==
-
EAGAIN
)
goto
getxattr_nocache
;
...
...
@@ -340,7 +292,7 @@ int ll_getxattr_common(struct inode *inode, const char *name,
}
out_xattr:
if
(
rc
==
-
EOPNOTSUPP
&&
xattr_
type
==
XATTR_USER_T
)
{
if
(
rc
==
-
EOPNOTSUPP
&&
type
==
XATTR_USER_T
)
{
LCONSOLE_INFO
(
"%s: disabling user_xattr feature because it is not supported on the server: rc = %d
\n
"
,
ll_get_fsname
(
inode
->
i_sb
,
NULL
,
0
),
rc
);
...
...
@@ -351,8 +303,63 @@ int ll_getxattr_common(struct inode *inode, const char *name,
return
rc
;
}
ssize_t
ll_getxattr
(
struct
dentry
*
dentry
,
struct
inode
*
inode
,
const
char
*
name
,
void
*
buffer
,
size_t
size
)
static
int
ll_xattr_get_common
(
const
struct
xattr_handler
*
handler
,
struct
dentry
*
dentry
,
struct
inode
*
inode
,
const
char
*
name
,
void
*
buffer
,
size_t
size
)
{
char
fullname
[
strlen
(
handler
->
prefix
)
+
strlen
(
name
)
+
1
];
struct
ll_sb_info
*
sbi
=
ll_i2sbi
(
inode
);
struct
ll_inode_info
*
lli
=
ll_i2info
(
inode
);
int
rc
;
CDEBUG
(
D_VFSTRACE
,
"VFS Op:inode="
DFID
"(%p)
\n
"
,
PFID
(
ll_inode2fid
(
inode
)),
inode
);
ll_stats_ops_tally
(
ll_i2sbi
(
inode
),
LPROC_LL_GETXATTR
,
1
);
rc
=
xattr_type_filter
(
sbi
,
handler
->
flags
);
if
(
rc
)
return
rc
;
/* b15587: ignore security.capability xattr for now */
if
((
handler
->
flags
==
XATTR_SECURITY_T
&&
!
strcmp
(
name
,
"capability"
)))
return
-
ENODATA
;
/* LU-549: Disable security.selinux when selinux is disabled */
if
(
handler
->
flags
==
XATTR_SECURITY_T
&&
!
selinux_is_enabled
()
&&
!
strcmp
(
name
,
"selinux"
))
return
-
EOPNOTSUPP
;
#ifdef CONFIG_FS_POSIX_ACL
/* posix acl is under protection of LOOKUP lock. when calling to this,
* we just have path resolution to the target inode, so we have great
* chance that cached ACL is uptodate.
*/
if
(
handler
->
flags
==
XATTR_ACL_ACCESS_T
)
{
struct
posix_acl
*
acl
;
spin_lock
(
&
lli
->
lli_lock
);
acl
=
posix_acl_dup
(
lli
->
lli_posix_acl
);
spin_unlock
(
&
lli
->
lli_lock
);
if
(
!
acl
)
return
-
ENODATA
;
rc
=
posix_acl_to_xattr
(
&
init_user_ns
,
acl
,
buffer
,
size
);
posix_acl_release
(
acl
);
return
rc
;
}
if
(
handler
->
flags
==
XATTR_ACL_DEFAULT_T
&&
!
S_ISDIR
(
inode
->
i_mode
))
return
-
ENODATA
;
#endif
sprintf
(
fullname
,
"%s%s
\n
"
,
handler
->
prefix
,
name
);
return
ll_xattr_list
(
inode
,
fullname
,
handler
->
flags
,
buffer
,
size
,
OBD_MD_FLXATTR
);
}
static
int
ll_xattr_get
(
const
struct
xattr_handler
*
handler
,
struct
dentry
*
dentry
,
struct
inode
*
inode
,
const
char
*
name
,
void
*
buffer
,
size_t
size
)
{
LASSERT
(
inode
);
LASSERT
(
name
);
...
...
@@ -360,20 +367,15 @@ ssize_t ll_getxattr(struct dentry *dentry, struct inode *inode,
CDEBUG
(
D_VFSTRACE
,
"VFS Op:inode="
DFID
"(%p), xattr %s
\n
"
,
PFID
(
ll_inode2fid
(
inode
)),
inode
,
name
);
ll_stats_ops_tally
(
ll_i2sbi
(
inode
),
LPROC_LL_GETXATTR
,
1
);
if
((
strncmp
(
name
,
XATTR_TRUSTED_PREFIX
,
sizeof
(
XATTR_TRUSTED_PREFIX
)
-
1
)
==
0
&&
strcmp
(
name
+
sizeof
(
XATTR_TRUSTED_PREFIX
)
-
1
,
"lov"
)
==
0
)
||
(
strncmp
(
name
,
XATTR_LUSTRE_PREFIX
,
sizeof
(
XATTR_LUSTRE_PREFIX
)
-
1
)
==
0
&&
strcmp
(
name
+
sizeof
(
XATTR_LUSTRE_PREFIX
)
-
1
,
"lov"
)
==
0
))
{
if
(
!
strcmp
(
name
,
"lov"
))
{
struct
lov_stripe_md
*
lsm
;
struct
lov_user_md
*
lump
;
struct
lov_mds_md
*
lmm
=
NULL
;
struct
ptlrpc_request
*
request
=
NULL
;
int
rc
=
0
,
lmmsize
=
0
;
ll_stats_ops_tally
(
ll_i2sbi
(
inode
),
LPROC_LL_GETXATTR
,
1
);
if
(
!
S_ISREG
(
inode
->
i_mode
)
&&
!
S_ISDIR
(
inode
->
i_mode
))
return
-
ENODATA
;
...
...
@@ -439,7 +441,7 @@ ssize_t ll_getxattr(struct dentry *dentry, struct inode *inode,
return
rc
;
}
return
ll_
getxattr_common
(
inode
,
name
,
buffer
,
size
,
OBD_MD_FLXATTR
);
return
ll_
xattr_get_common
(
handler
,
dentry
,
inode
,
name
,
buffer
,
size
);
}
ssize_t
ll_listxattr
(
struct
dentry
*
dentry
,
char
*
buffer
,
size_t
size
)
...
...
@@ -457,7 +459,8 @@ ssize_t ll_listxattr(struct dentry *dentry, char *buffer, size_t size)
ll_stats_ops_tally
(
ll_i2sbi
(
inode
),
LPROC_LL_LISTXATTR
,
1
);
rc
=
ll_getxattr_common
(
inode
,
NULL
,
buffer
,
size
,
OBD_MD_FLXATTRLS
);
rc
=
ll_xattr_list
(
inode
,
NULL
,
XATTR_OTHER_T
,
buffer
,
size
,
OBD_MD_FLXATTRLS
);
if
(
rc
<
0
)
goto
out
;
...
...
@@ -518,3 +521,57 @@ ssize_t ll_listxattr(struct dentry *dentry, char *buffer, size_t size)
return
rc
;
}
static
const
struct
xattr_handler
ll_user_xattr_handler
=
{
.
prefix
=
XATTR_USER_PREFIX
,
.
flags
=
XATTR_USER_T
,
.
get
=
ll_xattr_get_common
,
.
set
=
ll_xattr_set_common
,
};
static
const
struct
xattr_handler
ll_trusted_xattr_handler
=
{
.
prefix
=
XATTR_TRUSTED_PREFIX
,
.
flags
=
XATTR_TRUSTED_T
,
.
get
=
ll_xattr_get
,
.
set
=
ll_xattr_set
,
};
static
const
struct
xattr_handler
ll_security_xattr_handler
=
{
.
prefix
=
XATTR_SECURITY_PREFIX
,
.
flags
=
XATTR_SECURITY_T
,
.
get
=
ll_xattr_get_common
,
.
set
=
ll_xattr_set_common
,
};
static
const
struct
xattr_handler
ll_acl_access_xattr_handler
=
{
.
prefix
=
XATTR_NAME_POSIX_ACL_ACCESS
,
.
flags
=
XATTR_ACL_ACCESS_T
,
.
get
=
ll_xattr_get_common
,
.
set
=
ll_xattr_set_common
,
};
static
const
struct
xattr_handler
ll_acl_default_xattr_handler
=
{
.
prefix
=
XATTR_NAME_POSIX_ACL_DEFAULT
,
.
flags
=
XATTR_ACL_DEFAULT_T
,
.
get
=
ll_xattr_get_common
,
.
set
=
ll_xattr_set_common
,
};
static
const
struct
xattr_handler
ll_lustre_xattr_handler
=
{
.
prefix
=
XATTR_LUSTRE_PREFIX
,
.
flags
=
XATTR_LUSTRE_T
,
.
get
=
ll_xattr_get
,
.
set
=
ll_xattr_set
,
};
const
struct
xattr_handler
*
ll_xattr_handlers
[]
=
{
&
ll_user_xattr_handler
,
&
ll_trusted_xattr_handler
,
&
ll_security_xattr_handler
,
#ifdef CONFIG_FS_POSIX_ACL
&
ll_acl_access_xattr_handler
,
&
ll_acl_default_xattr_handler
,
#endif
&
ll_lustre_xattr_handler
,
NULL
,
};
drivers/staging/media/lirc/lirc_imon.c
View file @
bf02f5d2
...
...
@@ -797,16 +797,11 @@ static int imon_probe(struct usb_interface *interface,
goto
free_rbuf
;
}
rx_urb
=
usb_alloc_urb
(
0
,
GFP_KERNEL
);
if
(
!
rx_urb
)
{
dev_err
(
dev
,
"%s: usb_alloc_urb failed for IR urb
\n
"
,
__func__
);
if
(
!
rx_urb
)
goto
free_lirc_buf
;
}
tx_urb
=
usb_alloc_urb
(
0
,
GFP_KERNEL
);
if
(
!
tx_urb
)
{
dev_err
(
dev
,
"%s: usb_alloc_urb failed for display urb
\n
"
,
__func__
);
if
(
!
tx_urb
)
goto
free_rx_urb
;
}
mutex_init
(
&
context
->
ctx_lock
);
context
->
vfd_proto_6p
=
vfd_proto_6p
;
...
...
drivers/staging/media/lirc/lirc_sasem.c
View file @
bf02f5d2
...
...
@@ -758,17 +758,12 @@ static int sasem_probe(struct usb_interface *interface,
}
rx_urb
=
usb_alloc_urb
(
0
,
GFP_KERNEL
);
if
(
!
rx_urb
)
{
dev_err
(
&
interface
->
dev
,
"%s: usb_alloc_urb failed for IR urb
\n
"
,
__func__
);
alloc_status
=
5
;
goto
alloc_status_switch
;
}
if
(
vfd_ep_found
)
{
tx_urb
=
usb_alloc_urb
(
0
,
GFP_KERNEL
);
if
(
!
tx_urb
)
{
dev_err
(
&
interface
->
dev
,
"%s: usb_alloc_urb failed for VFD urb"
,
__func__
);
alloc_status
=
6
;
goto
alloc_status_switch
;
}
...
...
drivers/staging/most/hdm-usb/hdm_usb.c
View file @
bf02f5d2
...
...
@@ -650,10 +650,8 @@ static int hdm_enqueue(struct most_interface *iface, int channel,
return
-
ENODEV
;
urb
=
usb_alloc_urb
(
NO_ISOCHRONOUS_URB
,
GFP_ATOMIC
);
if
(
!
urb
)
{
dev_err
(
dev
,
"Failed to allocate URB
\n
"
);
if
(
!
urb
)
return
-
ENOMEM
;
}
anchor
=
kzalloc
(
sizeof
(
*
anchor
),
GFP_ATOMIC
);
if
(
!
anchor
)
{
...
...
drivers/staging/rtl8192u/r8192U_core.c
View file @
bf02f5d2
...
...
@@ -1702,11 +1702,8 @@ short rtl8192_tx(struct net_device *dev, struct sk_buff *skb)
}
if
(
bSend0Byte
)
{
tx_urb_zero
=
usb_alloc_urb
(
0
,
GFP_ATOMIC
);
if
(
!
tx_urb_zero
)
{
RT_TRACE
(
COMP_ERR
,
"can't alloc urb for zero byte
\n
"
);
if
(
!
tx_urb_zero
)
return
-
ENOMEM
;
}
usb_fill_bulk_urb
(
tx_urb_zero
,
udev
,
usb_sndbulkpipe
(
udev
,
idx_pipe
),
&
zero
,
0
,
tx_zero_isr
,
dev
);
...
...
drivers/staging/vt6656/main_usb.c
View file @
bf02f5d2
...
...
@@ -440,10 +440,8 @@ static bool vnt_alloc_bufs(struct vnt_private *priv)
/* allocate URBs */
tx_context
->
urb
=
usb_alloc_urb
(
0
,
GFP_KERNEL
);
if
(
!
tx_context
->
urb
)
{
dev_err
(
&
priv
->
usb
->
dev
,
"alloc tx urb failed
\n
"
);
if
(
!
tx_context
->
urb
)
goto
free_tx
;
}
tx_context
->
in_use
=
false
;
}
...
...
@@ -462,10 +460,8 @@ static bool vnt_alloc_bufs(struct vnt_private *priv)
/* allocate URBs */
rcb
->
urb
=
usb_alloc_urb
(
0
,
GFP_KERNEL
);
if
(
!
rcb
->
urb
)
{
dev_err
(
&
priv
->
usb
->
dev
,
"Failed to alloc rx urb
\n
"
);
if
(
!
rcb
->
urb
)
goto
free_rx_tx
;
}
rcb
->
skb
=
dev_alloc_skb
(
priv
->
rx_buf_sz
);
if
(
!
rcb
->
skb
)
...
...
@@ -479,10 +475,8 @@ static bool vnt_alloc_bufs(struct vnt_private *priv)
}
priv
->
interrupt_urb
=
usb_alloc_urb
(
0
,
GFP_KERNEL
);
if
(
!
priv
->
interrupt_urb
)
{
dev_err
(
&
priv
->
usb
->
dev
,
"Failed to alloc int urb
\n
"
);
if
(
!
priv
->
interrupt_urb
)
goto
free_rx_tx
;
}
priv
->
int_buf
.
data_buf
=
kmalloc
(
MAX_INTERRUPT_SIZE
,
GFP_KERNEL
);
if
(
!
priv
->
int_buf
.
data_buf
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment