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
f2cffa22
Commit
f2cffa22
authored
Jul 04, 2017
by
Al Viro
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'work.drm' into work.__copy_in_user
parents
8d1a81a8
aeba0390
Changes
12
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
476 additions
and
1045 deletions
+476
-1045
drivers/gpu/drm/drm_bufs.c
drivers/gpu/drm/drm_bufs.c
+65
-51
drivers/gpu/drm/drm_internal.h
drivers/gpu/drm/drm_internal.h
+3
-0
drivers/gpu/drm/drm_ioc32.c
drivers/gpu/drm/drm_ioc32.c
+290
-460
drivers/gpu/drm/drm_ioctl.c
drivers/gpu/drm/drm_ioctl.c
+31
-17
drivers/gpu/drm/drm_legacy.h
drivers/gpu/drm/drm_legacy.h
+7
-0
drivers/gpu/drm/mga/mga_drv.h
drivers/gpu/drm/mga/mga_drv.h
+2
-0
drivers/gpu/drm/mga/mga_ioc32.c
drivers/gpu/drm/mga/mga_ioc32.c
+60
-89
drivers/gpu/drm/mga/mga_state.c
drivers/gpu/drm/mga/mga_state.c
+1
-1
drivers/gpu/drm/radeon/Makefile
drivers/gpu/drm/radeon/Makefile
+0
-1
drivers/gpu/drm/radeon/radeon_drv.c
drivers/gpu/drm/radeon/radeon_drv.c
+16
-2
drivers/gpu/drm/radeon/radeon_ioc32.c
drivers/gpu/drm/radeon/radeon_ioc32.c
+0
-424
include/drm/drm_ioctl.h
include/drm/drm_ioctl.h
+1
-0
No files found.
drivers/gpu/drm/drm_bufs.c
View file @
f2cffa22
...
...
@@ -1258,11 +1258,11 @@ int drm_legacy_addbufs(struct drm_device *dev, void *data,
* lock, preventing of allocating more buffers after this call. Information
* about each requested buffer is then copied into user space.
*/
int
drm_legacy_infobufs
(
struct
drm_device
*
dev
,
void
*
data
,
struct
drm_file
*
file_priv
)
int
__drm_legacy_infobufs
(
struct
drm_device
*
dev
,
void
*
data
,
int
*
p
,
int
(
*
f
)(
void
*
,
int
,
struct
drm_buf_entry
*
))
{
struct
drm_device_dma
*
dma
=
dev
->
dma
;
struct
drm_buf_info
*
request
=
data
;
int
i
;
int
count
;
...
...
@@ -1290,26 +1290,12 @@ int drm_legacy_infobufs(struct drm_device *dev, void *data,
DRM_DEBUG
(
"count = %d
\n
"
,
count
);
if
(
request
->
count
>=
count
)
{
if
(
*
p
>=
count
)
{
for
(
i
=
0
,
count
=
0
;
i
<
DRM_MAX_ORDER
+
1
;
i
++
)
{
if
(
dma
->
bufs
[
i
].
buf_count
)
{
struct
drm_buf_desc
__user
*
to
=
&
request
->
list
[
count
];
struct
drm_buf_entry
*
from
=
&
dma
->
bufs
[
i
];
if
(
copy_to_user
(
&
to
->
count
,
&
from
->
buf_count
,
sizeof
(
from
->
buf_count
))
||
copy_to_user
(
&
to
->
size
,
&
from
->
buf_size
,
sizeof
(
from
->
buf_size
))
||
copy_to_user
(
&
to
->
low_mark
,
&
from
->
low_mark
,
sizeof
(
from
->
low_mark
))
||
copy_to_user
(
&
to
->
high_mark
,
&
from
->
high_mark
,
sizeof
(
from
->
high_mark
)))
if
(
from
->
buf_count
)
{
if
(
f
(
data
,
count
,
from
)
<
0
)
return
-
EFAULT
;
DRM_DEBUG
(
"%d %d %d %d %d
\n
"
,
i
,
dma
->
bufs
[
i
].
buf_count
,
...
...
@@ -1320,11 +1306,29 @@ int drm_legacy_infobufs(struct drm_device *dev, void *data,
}
}
}
request
->
count
=
count
;
*
p
=
count
;
return
0
;
}
static
int
copy_one_buf
(
void
*
data
,
int
count
,
struct
drm_buf_entry
*
from
)
{
struct
drm_buf_info
*
request
=
data
;
struct
drm_buf_desc
__user
*
to
=
&
request
->
list
[
count
];
struct
drm_buf_desc
v
=
{.
count
=
from
->
buf_count
,
.
size
=
from
->
buf_size
,
.
low_mark
=
from
->
low_mark
,
.
high_mark
=
from
->
high_mark
};
return
copy_to_user
(
to
,
&
v
,
offsetof
(
struct
drm_buf_desc
,
flags
));
}
int
drm_legacy_infobufs
(
struct
drm_device
*
dev
,
void
*
data
,
struct
drm_file
*
file_priv
)
{
struct
drm_buf_info
*
request
=
data
;
return
__drm_legacy_infobufs
(
dev
,
data
,
&
request
->
count
,
copy_one_buf
);
}
/**
* Specifies a low and high water mark for buffer allocation
*
...
...
@@ -1439,15 +1443,15 @@ int drm_legacy_freebufs(struct drm_device *dev, void *data,
* offset equal to 0, which drm_mmap() interpretes as PCI buffers and calls
* drm_mmap_dma().
*/
int
drm_legacy_mapbufs
(
struct
drm_device
*
dev
,
void
*
data
,
int
__drm_legacy_mapbufs
(
struct
drm_device
*
dev
,
void
*
data
,
int
*
p
,
void
__user
**
v
,
int
(
*
f
)(
void
*
,
int
,
unsigned
long
,
struct
drm_buf
*
),
struct
drm_file
*
file_priv
)
{
struct
drm_device_dma
*
dma
=
dev
->
dma
;
int
retcode
=
0
;
const
int
zero
=
0
;
unsigned
long
virtual
;
unsigned
long
address
;
struct
drm_buf_map
*
request
=
data
;
int
i
;
if
(
!
drm_core_check_feature
(
dev
,
DRIVER_LEGACY
))
...
...
@@ -1467,7 +1471,7 @@ int drm_legacy_mapbufs(struct drm_device *dev, void *data,
dev
->
buf_use
++
;
/* Can't allocate more after this call */
spin_unlock
(
&
dev
->
buf_lock
);
if
(
request
->
count
>=
dma
->
buf_count
)
{
if
(
*
p
>=
dma
->
buf_count
)
{
if
((
dev
->
agp
&&
(
dma
->
flags
&
_DRM_DMA_USE_AGP
))
||
(
drm_core_check_feature
(
dev
,
DRIVER_SG
)
&&
(
dma
->
flags
&
_DRM_DMA_USE_SG
)))
{
...
...
@@ -1492,41 +1496,51 @@ int drm_legacy_mapbufs(struct drm_device *dev, void *data,
retcode
=
(
signed
long
)
virtual
;
goto
done
;
}
request
->
virtual
=
(
void
__user
*
)
virtual
;
*
v
=
(
void
__user
*
)
virtual
;
for
(
i
=
0
;
i
<
dma
->
buf_count
;
i
++
)
{
if
(
copy_to_user
(
&
request
->
list
[
i
].
idx
,
&
dma
->
buflist
[
i
]
->
idx
,
sizeof
(
request
->
list
[
0
].
idx
)))
{
retcode
=
-
EFAULT
;
goto
done
;
}
if
(
copy_to_user
(
&
request
->
list
[
i
].
total
,
&
dma
->
buflist
[
i
]
->
total
,
sizeof
(
request
->
list
[
0
].
total
)))
{
retcode
=
-
EFAULT
;
goto
done
;
}
if
(
copy_to_user
(
&
request
->
list
[
i
].
used
,
&
zero
,
sizeof
(
zero
)))
{
retcode
=
-
EFAULT
;
goto
done
;
}
address
=
virtual
+
dma
->
buflist
[
i
]
->
offset
;
/* *** */
if
(
copy_to_user
(
&
request
->
list
[
i
].
address
,
&
address
,
sizeof
(
address
)))
{
if
(
f
(
data
,
i
,
virtual
,
dma
->
buflist
[
i
])
<
0
)
{
retcode
=
-
EFAULT
;
goto
done
;
}
}
}
done:
request
->
count
=
dma
->
buf_count
;
DRM_DEBUG
(
"%d buffers, retcode = %d
\n
"
,
request
->
count
,
retcode
);
*
p
=
dma
->
buf_count
;
DRM_DEBUG
(
"%d buffers, retcode = %d
\n
"
,
*
p
,
retcode
);
return
retcode
;
}
static
int
map_one_buf
(
void
*
data
,
int
idx
,
unsigned
long
virtual
,
struct
drm_buf
*
buf
)
{
struct
drm_buf_map
*
request
=
data
;
unsigned
long
address
=
virtual
+
buf
->
offset
;
/* *** */
if
(
copy_to_user
(
&
request
->
list
[
idx
].
idx
,
&
buf
->
idx
,
sizeof
(
request
->
list
[
0
].
idx
)))
return
-
EFAULT
;
if
(
copy_to_user
(
&
request
->
list
[
idx
].
total
,
&
buf
->
total
,
sizeof
(
request
->
list
[
0
].
total
)))
return
-
EFAULT
;
if
(
clear_user
(
&
request
->
list
[
idx
].
used
,
sizeof
(
int
)))
return
-
EFAULT
;
if
(
copy_to_user
(
&
request
->
list
[
idx
].
address
,
&
address
,
sizeof
(
address
)))
return
-
EFAULT
;
return
0
;
}
int
drm_legacy_mapbufs
(
struct
drm_device
*
dev
,
void
*
data
,
struct
drm_file
*
file_priv
)
{
struct
drm_buf_map
*
request
=
data
;
return
__drm_legacy_mapbufs
(
dev
,
data
,
&
request
->
count
,
&
request
->
virtual
,
map_one_buf
,
file_priv
);
}
int
drm_legacy_dma_ioctl
(
struct
drm_device
*
dev
,
void
*
data
,
struct
drm_file
*
file_priv
)
{
...
...
drivers/gpu/drm/drm_internal.h
View file @
f2cffa22
...
...
@@ -143,3 +143,6 @@ static inline int drm_debugfs_crtc_crc_add(struct drm_crtc *crtc)
return
0
;
}
#endif
drm_ioctl_t
drm_version
;
drm_ioctl_t
drm_getunique
;
drm_ioctl_t
drm_getclient
;
drivers/gpu/drm/drm_ioc32.c
View file @
f2cffa22
This diff is collapsed.
Click to expand it.
drivers/gpu/drm/drm_ioctl.c
View file @
f2cffa22
...
...
@@ -107,7 +107,7 @@
*
* Copies the bus id from drm_device::unique into user space.
*/
static
int
drm_getunique
(
struct
drm_device
*
dev
,
void
*
data
,
int
drm_getunique
(
struct
drm_device
*
dev
,
void
*
data
,
struct
drm_file
*
file_priv
)
{
struct
drm_unique
*
u
=
data
;
...
...
@@ -172,7 +172,7 @@ static int drm_set_busid(struct drm_device *dev, struct drm_file *file_priv)
* Searches for the client with the specified index and copies its information
* into userspace
*/
static
int
drm_getclient
(
struct
drm_device
*
dev
,
void
*
data
,
int
drm_getclient
(
struct
drm_device
*
dev
,
void
*
data
,
struct
drm_file
*
file_priv
)
{
struct
drm_client
*
client
=
data
;
...
...
@@ -461,7 +461,7 @@ static int drm_copy_field(char __user *buf, size_t *buf_len, const char *value)
*
* Fills in the version information in \p arg.
*/
static
int
drm_version
(
struct
drm_device
*
dev
,
void
*
data
,
int
drm_version
(
struct
drm_device
*
dev
,
void
*
data
,
struct
drm_file
*
file_priv
)
{
struct
drm_version
*
version
=
data
;
...
...
@@ -694,6 +694,33 @@ static const struct drm_ioctl_desc drm_ioctls[] = {
* structure.
*/
long
drm_ioctl_kernel
(
struct
file
*
file
,
drm_ioctl_t
*
func
,
void
*
kdata
,
u32
flags
)
{
struct
drm_file
*
file_priv
=
file
->
private_data
;
struct
drm_device
*
dev
=
file_priv
->
minor
->
dev
;
int
retcode
;
if
(
drm_device_is_unplugged
(
dev
))
return
-
ENODEV
;
retcode
=
drm_ioctl_permit
(
flags
,
file_priv
);
if
(
unlikely
(
retcode
))
return
retcode
;
/* Enforce sane locking for modern driver ioctls. */
if
(
!
drm_core_check_feature
(
dev
,
DRIVER_LEGACY
)
||
(
flags
&
DRM_UNLOCKED
))
retcode
=
func
(
dev
,
kdata
,
file_priv
);
else
{
mutex_lock
(
&
drm_global_mutex
);
retcode
=
func
(
dev
,
kdata
,
file_priv
);
mutex_unlock
(
&
drm_global_mutex
);
}
return
retcode
;
}
EXPORT_SYMBOL
(
drm_ioctl_kernel
);
/**
* drm_ioctl - ioctl callback implementation for DRM drivers
* @filp: file this ioctl is called on
...
...
@@ -762,10 +789,6 @@ long drm_ioctl(struct file *filp,
goto
err_i1
;
}
retcode
=
drm_ioctl_permit
(
ioctl
->
flags
,
file_priv
);
if
(
unlikely
(
retcode
))
goto
err_i1
;
if
(
ksize
<=
sizeof
(
stack_kdata
))
{
kdata
=
stack_kdata
;
}
else
{
...
...
@@ -784,16 +807,7 @@ long drm_ioctl(struct file *filp,
if
(
ksize
>
in_size
)
memset
(
kdata
+
in_size
,
0
,
ksize
-
in_size
);
/* Enforce sane locking for modern driver ioctls. */
if
(
!
drm_core_check_feature
(
dev
,
DRIVER_LEGACY
)
||
(
ioctl
->
flags
&
DRM_UNLOCKED
))
retcode
=
func
(
dev
,
kdata
,
file_priv
);
else
{
mutex_lock
(
&
drm_global_mutex
);
retcode
=
func
(
dev
,
kdata
,
file_priv
);
mutex_unlock
(
&
drm_global_mutex
);
}
retcode
=
drm_ioctl_kernel
(
filp
,
func
,
kdata
,
ioctl
->
flags
);
if
(
copy_to_user
((
void
__user
*
)
arg
,
kdata
,
out_size
)
!=
0
)
retcode
=
-
EFAULT
;
...
...
drivers/gpu/drm/drm_legacy.h
View file @
f2cffa22
...
...
@@ -74,6 +74,13 @@ int drm_legacy_freebufs(struct drm_device *d, void *v, struct drm_file *f);
int
drm_legacy_mapbufs
(
struct
drm_device
*
d
,
void
*
v
,
struct
drm_file
*
f
);
int
drm_legacy_dma_ioctl
(
struct
drm_device
*
d
,
void
*
v
,
struct
drm_file
*
f
);
int
__drm_legacy_infobufs
(
struct
drm_device
*
,
void
*
,
int
*
,
int
(
*
)(
void
*
,
int
,
struct
drm_buf_entry
*
));
int
__drm_legacy_mapbufs
(
struct
drm_device
*
,
void
*
,
int
*
,
void
__user
**
,
int
(
*
)(
void
*
,
int
,
unsigned
long
,
struct
drm_buf
*
),
struct
drm_file
*
);
#ifdef CONFIG_DRM_VM
void
drm_legacy_vma_flush
(
struct
drm_device
*
d
);
#else
...
...
drivers/gpu/drm/mga/mga_drv.h
View file @
f2cffa22
...
...
@@ -159,6 +159,8 @@ extern int mga_dma_bootstrap(struct drm_device *dev, void *data,
struct
drm_file
*
file_priv
);
extern
int
mga_dma_init
(
struct
drm_device
*
dev
,
void
*
data
,
struct
drm_file
*
file_priv
);
extern
int
mga_getparam
(
struct
drm_device
*
dev
,
void
*
data
,
struct
drm_file
*
file_priv
);
extern
int
mga_dma_flush
(
struct
drm_device
*
dev
,
void
*
data
,
struct
drm_file
*
file_priv
);
extern
int
mga_dma_reset
(
struct
drm_device
*
dev
,
void
*
data
,
...
...
drivers/gpu/drm/mga/mga_ioc32.c
View file @
f2cffa22
...
...
@@ -61,46 +61,25 @@ static int compat_mga_init(struct file *file, unsigned int cmd,
unsigned
long
arg
)
{
drm_mga_init32_t
init32
;
drm_mga_init_t
__user
*
init
;
int
err
=
0
,
i
;
drm_mga_init_t
init
;
if
(
copy_from_user
(
&
init32
,
(
void
__user
*
)
arg
,
sizeof
(
init32
)))
return
-
EFAULT
;
init
=
compat_alloc_user_space
(
sizeof
(
*
init
));
if
(
!
access_ok
(
VERIFY_WRITE
,
init
,
sizeof
(
*
init
))
||
__put_user
(
init32
.
func
,
&
init
->
func
)
||
__put_user
(
init32
.
sarea_priv_offset
,
&
init
->
sarea_priv_offset
)
||
__put_user
(
init32
.
chipset
,
&
init
->
chipset
)
||
__put_user
(
init32
.
sgram
,
&
init
->
sgram
)
||
__put_user
(
init32
.
maccess
,
&
init
->
maccess
)
||
__put_user
(
init32
.
fb_cpp
,
&
init
->
fb_cpp
)
||
__put_user
(
init32
.
front_offset
,
&
init
->
front_offset
)
||
__put_user
(
init32
.
front_pitch
,
&
init
->
front_pitch
)
||
__put_user
(
init32
.
back_offset
,
&
init
->
back_offset
)
||
__put_user
(
init32
.
back_pitch
,
&
init
->
back_pitch
)
||
__put_user
(
init32
.
depth_cpp
,
&
init
->
depth_cpp
)
||
__put_user
(
init32
.
depth_offset
,
&
init
->
depth_offset
)
||
__put_user
(
init32
.
depth_pitch
,
&
init
->
depth_pitch
)
||
__put_user
(
init32
.
fb_offset
,
&
init
->
fb_offset
)
||
__put_user
(
init32
.
mmio_offset
,
&
init
->
mmio_offset
)
||
__put_user
(
init32
.
status_offset
,
&
init
->
status_offset
)
||
__put_user
(
init32
.
warp_offset
,
&
init
->
warp_offset
)
||
__put_user
(
init32
.
primary_offset
,
&
init
->
primary_offset
)
||
__put_user
(
init32
.
buffers_offset
,
&
init
->
buffers_offset
))
return
-
EFAULT
;
for
(
i
=
0
;
i
<
MGA_NR_TEX_HEAPS
;
i
++
)
{
err
|=
__put_user
(
init32
.
texture_offset
[
i
],
&
init
->
texture_offset
[
i
]);
err
|=
__put_user
(
init32
.
texture_size
[
i
],
&
init
->
texture_size
[
i
]);
}
if
(
err
)
return
-
EFAULT
;
return
drm_ioctl
(
file
,
DRM_IOCTL_MGA_INIT
,
(
unsigned
long
)
init
);
init
.
func
=
init32
.
func
;
init
.
sarea_priv_offset
=
init32
.
sarea_priv_offset
;
memcpy
(
&
init
.
chipset
,
&
init32
.
chipset
,
offsetof
(
drm_mga_init_t
,
fb_offset
)
-
offsetof
(
drm_mga_init_t
,
chipset
));
init
.
fb_offset
=
init32
.
fb_offset
;
init
.
mmio_offset
=
init32
.
mmio_offset
;
init
.
status_offset
=
init32
.
status_offset
;
init
.
warp_offset
=
init32
.
warp_offset
;
init
.
primary_offset
=
init32
.
primary_offset
;
init
.
buffers_offset
=
init32
.
buffers_offset
;
return
drm_ioctl_kernel
(
file
,
mga_dma_init
,
&
init
,
DRM_AUTH
|
DRM_MASTER
|
DRM_ROOT_ONLY
);
}
typedef
struct
drm_mga_getparam32
{
...
...
@@ -112,19 +91,14 @@ static int compat_mga_getparam(struct file *file, unsigned int cmd,
unsigned
long
arg
)
{
drm_mga_getparam32_t
getparam32
;
drm_mga_getparam_t
__user
*
getparam
;
drm_mga_getparam_t
getparam
;
if
(
copy_from_user
(
&
getparam32
,
(
void
__user
*
)
arg
,
sizeof
(
getparam32
)))
return
-
EFAULT
;
getparam
=
compat_alloc_user_space
(
sizeof
(
*
getparam
));
if
(
!
access_ok
(
VERIFY_WRITE
,
getparam
,
sizeof
(
*
getparam
))
||
__put_user
(
getparam32
.
param
,
&
getparam
->
param
)
||
__put_user
((
void
__user
*
)(
unsigned
long
)
getparam32
.
value
,
&
getparam
->
value
))
return
-
EFAULT
;
return
drm_ioctl
(
file
,
DRM_IOCTL_MGA_GETPARAM
,
(
unsigned
long
)
getparam
);
getparam
.
param
=
getparam32
.
param
;
getparam
.
value
=
compat_ptr
(
getparam32
.
value
);
return
drm_ioctl_kernel
(
file
,
mga_getparam
,
&
getparam
,
DRM_AUTH
);
}
typedef
struct
drm_mga_drm_bootstrap32
{
...
...
@@ -141,48 +115,33 @@ static int compat_mga_dma_bootstrap(struct file *file, unsigned int cmd,
unsigned
long
arg
)
{
drm_mga_dma_bootstrap32_t
dma_bootstrap32
;
drm_mga_dma_bootstrap_t
__user
*
dma_bootstrap
;
drm_mga_dma_bootstrap_t
__user
dma_bootstrap
;
int
err
;
if
(
copy_from_user
(
&
dma_bootstrap32
,
(
void
__user
*
)
arg
,
sizeof
(
dma_bootstrap32
)))
return
-
EFAULT
;
dma_bootstrap
=
compat_alloc_user_space
(
sizeof
(
*
dma_bootstrap
));
if
(
!
access_ok
(
VERIFY_WRITE
,
dma_bootstrap
,
sizeof
(
*
dma_bootstrap
))
||
__put_user
(
dma_bootstrap32
.
texture_handle
,
&
dma_bootstrap
->
texture_handle
)
||
__put_user
(
dma_bootstrap32
.
texture_size
,
&
dma_bootstrap
->
texture_size
)
||
__put_user
(
dma_bootstrap32
.
primary_size
,
&
dma_bootstrap
->
primary_size
)
||
__put_user
(
dma_bootstrap32
.
secondary_bin_count
,
&
dma_bootstrap
->
secondary_bin_count
)
||
__put_user
(
dma_bootstrap32
.
secondary_bin_size
,
&
dma_bootstrap
->
secondary_bin_size
)
||
__put_user
(
dma_bootstrap32
.
agp_mode
,
&
dma_bootstrap
->
agp_mode
)
||
__put_user
(
dma_bootstrap32
.
agp_size
,
&
dma_bootstrap
->
agp_size
))
return
-
EFAULT
;
dma_bootstrap
.
texture_handle
=
dma_bootstrap32
.
texture_handle
;
dma_bootstrap
.
texture_size
=
dma_bootstrap32
.
texture_size
;
dma_bootstrap
.
primary_size
=
dma_bootstrap32
.
primary_size
;
dma_bootstrap
.
secondary_bin_count
=
dma_bootstrap32
.
secondary_bin_count
;
dma_bootstrap
.
secondary_bin_size
=
dma_bootstrap32
.
secondary_bin_size
;
dma_bootstrap
.
agp_mode
=
dma_bootstrap32
.
agp_mode
;
dma_bootstrap
.
agp_size
=
dma_bootstrap32
.
agp_size
;
err
=
drm_ioctl
(
file
,
DRM_IOCTL_MGA_DMA_BOOTSTRAP
,
(
unsigned
long
)
dma_bootstrap
);
err
=
drm_ioctl
_kernel
(
file
,
mga_dma_bootstrap
,
&
dma_bootstrap
,
DRM_AUTH
|
DRM_MASTER
|
DRM_ROOT_ONLY
);
if
(
err
)
return
err
;
if
(
__get_user
(
dma_bootstrap32
.
texture_handle
,
&
dma_bootstrap
->
texture_handle
)
||
__get_user
(
dma_bootstrap32
.
texture_size
,
&
dma_bootstrap
->
texture_size
)
||
__get_user
(
dma_bootstrap32
.
primary_size
,
&
dma_bootstrap
->
primary_size
)
||
__get_user
(
dma_bootstrap32
.
secondary_bin_count
,
&
dma_bootstrap
->
secondary_bin_count
)
||
__get_user
(
dma_bootstrap32
.
secondary_bin_size
,
&
dma_bootstrap
->
secondary_bin_size
)
||
__get_user
(
dma_bootstrap32
.
agp_mode
,
&
dma_bootstrap
->
agp_mode
)
||
__get_user
(
dma_bootstrap32
.
agp_size
,
&
dma_bootstrap
->
agp_size
))
return
-
EFAULT
;
dma_bootstrap32
.
texture_handle
=
dma_bootstrap
.
texture_handle
;
dma_bootstrap32
.
texture_size
=
dma_bootstrap
.
texture_size
;
dma_bootstrap32
.
primary_size
=
dma_bootstrap
.
primary_size
;
dma_bootstrap32
.
secondary_bin_count
=
dma_bootstrap
.
secondary_bin_count
;
dma_bootstrap32
.
secondary_bin_size
=
dma_bootstrap
.
secondary_bin_size
;
dma_bootstrap32
.
agp_mode
=
dma_bootstrap
.
agp_mode
;
dma_bootstrap32
.
agp_size
=
dma_bootstrap
.
agp_size
;
if
(
copy_to_user
((
void
__user
*
)
arg
,
&
dma_bootstrap32
,
sizeof
(
dma_bootstrap32
)))
return
-
EFAULT
;
...
...
@@ -190,10 +149,14 @@ static int compat_mga_dma_bootstrap(struct file *file, unsigned int cmd,
return
0
;
}
drm_ioctl_compat_t
*
mga_compat_ioctls
[]
=
{
[
DRM_MGA_INIT
]
=
compat_mga_init
,
[
DRM_MGA_GETPARAM
]
=
compat_mga_getparam
,
[
DRM_MGA_DMA_BOOTSTRAP
]
=
compat_mga_dma_bootstrap
,
static
struct
{
drm_ioctl_compat_t
*
fn
;
char
*
name
;
}
mga_compat_ioctls
[]
=
{
#define DRM_IOCTL32_DEF(n, f)[DRM_##n] = {.fn = f, .name = #n}
DRM_IOCTL32_DEF
(
MGA_INIT
,
compat_mga_init
),
DRM_IOCTL32_DEF
(
MGA_GETPARAM
,
compat_mga_getparam
),
DRM_IOCTL32_DEF
(
MGA_DMA_BOOTSTRAP
,
compat_mga_dma_bootstrap
),
};
/**
...
...
@@ -208,19 +171,27 @@ drm_ioctl_compat_t *mga_compat_ioctls[] = {
long
mga_compat_ioctl
(
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
unsigned
int
nr
=
DRM_IOCTL_NR
(
cmd
);
struct
drm_file
*
file_priv
=
filp
->
private_data
;
drm_ioctl_compat_t
*
fn
=
NULL
;
int
ret
;
if
(
nr
<
DRM_COMMAND_BASE
)
return
drm_compat_ioctl
(
filp
,
cmd
,
arg
);
if
(
nr
<
DRM_COMMAND_BASE
+
ARRAY_SIZE
(
mga_compat_ioctls
))
fn
=
mga_compat_ioctls
[
nr
-
DRM_COMMAND_BASE
]
;
if
(
nr
>=
DRM_COMMAND_BASE
+
ARRAY_SIZE
(
mga_compat_ioctls
))
return
drm_ioctl
(
filp
,
cmd
,
arg
)
;
if
(
fn
!=
NULL
)
ret
=
(
*
fn
)
(
filp
,
cmd
,
arg
);
else
ret
=
drm_ioctl
(
filp
,
cmd
,
arg
);
fn
=
mga_compat_ioctls
[
nr
-
DRM_COMMAND_BASE
].
fn
;
if
(
!
fn
)
return
drm_ioctl
(
filp
,
cmd
,
arg
);
DRM_DEBUG
(
"pid=%d, dev=0x%lx, auth=%d, %s
\n
"
,
task_pid_nr
(
current
),
(
long
)
old_encode_dev
(
file_priv
->
minor
->
kdev
->
devt
),
file_priv
->
authenticated
,
mga_compat_ioctls
[
nr
-
DRM_COMMAND_BASE
].
name
);
ret
=
(
*
fn
)
(
filp
,
cmd
,
arg
);
if
(
ret
)
DRM_DEBUG
(
"ret = %d
\n
"
,
ret
);
return
ret
;
}
drivers/gpu/drm/mga/mga_state.c
View file @
f2cffa22
...
...
@@ -1005,7 +1005,7 @@ static int mga_dma_blit(struct drm_device *dev, void *data, struct drm_file *fil
return
0
;
}
static
int
mga_getparam
(
struct
drm_device
*
dev
,
void
*
data
,
struct
drm_file
*
file_priv
)
int
mga_getparam
(
struct
drm_device
*
dev
,
void
*
data
,
struct
drm_file
*
file_priv
)
{
drm_mga_private_t
*
dev_priv
=
dev
->
dev_private
;
drm_mga_getparam_t
*
param
=
data
;
...
...
drivers/gpu/drm/radeon/Makefile
View file @
f2cffa22
...
...
@@ -105,7 +105,6 @@ radeon-y += \
vce_v2_0.o
\
radeon_kfd.o
radeon-$(CONFIG_COMPAT)
+=
radeon_ioc32.o
radeon-$(CONFIG_VGA_SWITCHEROO)
+=
radeon_atpx_handler.o
radeon-$(CONFIG_ACPI)
+=
radeon_acpi.o
...
...
drivers/gpu/drm/radeon/radeon_drv.c
View file @
f2cffa22
...
...
@@ -38,6 +38,7 @@
#include <linux/module.h>
#include <linux/pm_runtime.h>
#include <linux/vga_switcheroo.h>
#include <linux/compat.h>
#include <drm/drm_gem.h>
#include <drm/drm_fb_helper.h>
...
...
@@ -154,8 +155,6 @@ void radeon_gem_prime_unpin(struct drm_gem_object *obj);
struct
reservation_object
*
radeon_gem_prime_res_obj
(
struct
drm_gem_object
*
);
void
*
radeon_gem_prime_vmap
(
struct
drm_gem_object
*
obj
);
void
radeon_gem_prime_vunmap
(
struct
drm_gem_object
*
obj
,
void
*
vaddr
);
extern
long
radeon_kms_compat_ioctl
(
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
/* atpx handler */
#if defined(CONFIG_VGA_SWITCHEROO)
...
...
@@ -505,6 +504,21 @@ long radeon_drm_ioctl(struct file *filp,
return
ret
;
}
#ifdef CONFIG_COMPAT
static
long
radeon_kms_compat_ioctl
(
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
unsigned
int
nr
=
DRM_IOCTL_NR
(
cmd
);
int
ret
;
if
(
nr
<
DRM_COMMAND_BASE
)
return
drm_compat_ioctl
(
filp
,
cmd
,
arg
);
ret
=
radeon_drm_ioctl
(
filp
,
cmd
,
arg
);
return
ret
;
}
#endif
static
const
struct
dev_pm_ops
radeon_pm_ops
=
{
.
suspend
=
radeon_pmops_suspend
,
.
resume
=
radeon_pmops_resume
,
...
...
drivers/gpu/drm/radeon/radeon_ioc32.c
deleted
100644 → 0
View file @
8d1a81a8
This diff is collapsed.
Click to expand it.
include/drm/drm_ioctl.h
View file @
f2cffa22
...
...
@@ -172,6 +172,7 @@ struct drm_ioctl_desc {
int
drm_ioctl_permit
(
u32
flags
,
struct
drm_file
*
file_priv
);
long
drm_ioctl
(
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
long
drm_ioctl_kernel
(
struct
file
*
,
drm_ioctl_t
,
void
*
,
u32
);
#ifdef CONFIG_COMPAT
long
drm_compat_ioctl
(
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
#else
...
...
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