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
1545085a
Commit
1545085a
authored
Feb 08, 2007
by
Thomas Hellstrom
Committed by
Dave Airlie
Feb 08, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
drm: Allow for 44 bit user-tokens (or drm_file offsets)
parent
756db73d
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
14 additions
and
13 deletions
+14
-13
drivers/char/drm/drm_bufs.c
drivers/char/drm/drm_bufs.c
+5
-4
drivers/char/drm/drm_proc.c
drivers/char/drm/drm_proc.c
+2
-2
drivers/char/drm/drm_vm.c
drivers/char/drm/drm_vm.c
+7
-7
No files found.
drivers/char/drm/drm_bufs.c
View file @
1545085a
...
@@ -79,14 +79,14 @@ static int drm_map_handle(drm_device_t *dev, drm_hash_item_t *hash,
...
@@ -79,14 +79,14 @@ static int drm_map_handle(drm_device_t *dev, drm_hash_item_t *hash,
if
(
!
use_hashed_handle
)
{
if
(
!
use_hashed_handle
)
{
int
ret
;
int
ret
;
hash
->
key
=
user_token
;
hash
->
key
=
user_token
>>
PAGE_SHIFT
;
ret
=
drm_ht_insert_item
(
&
dev
->
map_hash
,
hash
);
ret
=
drm_ht_insert_item
(
&
dev
->
map_hash
,
hash
);
if
(
ret
!=
-
EINVAL
)
if
(
ret
!=
-
EINVAL
)
return
ret
;
return
ret
;
}
}
return
drm_ht_just_insert_please
(
&
dev
->
map_hash
,
hash
,
return
drm_ht_just_insert_please
(
&
dev
->
map_hash
,
hash
,
user_token
,
32
-
PAGE_SHIFT
-
3
,
user_token
,
32
-
PAGE_SHIFT
-
3
,
PAGE_SHIFT
,
DRM_MAP_HASH_OFFSE
T
);
0
,
DRM_MAP_HASH_OFFSET
>>
PAGE_SHIF
T
);
}
}
/**
/**
...
@@ -262,7 +262,7 @@ static int drm_addmap_core(drm_device_t * dev, unsigned int offset,
...
@@ -262,7 +262,7 @@ static int drm_addmap_core(drm_device_t * dev, unsigned int offset,
return
ret
;
return
ret
;
}
}
list
->
user_token
=
list
->
hash
.
key
;
list
->
user_token
=
list
->
hash
.
key
<<
PAGE_SHIFT
;
mutex_unlock
(
&
dev
->
struct_mutex
);
mutex_unlock
(
&
dev
->
struct_mutex
);
*
maplist
=
list
;
*
maplist
=
list
;
...
@@ -347,7 +347,8 @@ int drm_rmmap_locked(drm_device_t *dev, drm_local_map_t *map)
...
@@ -347,7 +347,8 @@ int drm_rmmap_locked(drm_device_t *dev, drm_local_map_t *map)
if
(
r_list
->
map
==
map
)
{
if
(
r_list
->
map
==
map
)
{
list_del
(
list
);
list_del
(
list
);
drm_ht_remove_key
(
&
dev
->
map_hash
,
r_list
->
user_token
);
drm_ht_remove_key
(
&
dev
->
map_hash
,
r_list
->
user_token
>>
PAGE_SHIFT
);
drm_free
(
list
,
sizeof
(
*
list
),
DRM_MEM_MAPS
);
drm_free
(
list
,
sizeof
(
*
list
),
DRM_MEM_MAPS
);
break
;
break
;
}
}
...
...
drivers/char/drm/drm_proc.c
View file @
1545085a
...
@@ -500,7 +500,7 @@ static int drm__vma_info(char *buf, char **start, off_t offset, int request,
...
@@ -500,7 +500,7 @@ static int drm__vma_info(char *buf, char **start, off_t offset, int request,
for
(
pt
=
dev
->
vmalist
;
pt
;
pt
=
pt
->
next
)
{
for
(
pt
=
dev
->
vmalist
;
pt
;
pt
=
pt
->
next
)
{
if
(
!
(
vma
=
pt
->
vma
))
if
(
!
(
vma
=
pt
->
vma
))
continue
;
continue
;
DRM_PROC_PRINT
(
"
\n
%5d 0x%08lx-0x%08lx %c%c%c%c%c%c 0x%08lx"
,
DRM_PROC_PRINT
(
"
\n
%5d 0x%08lx-0x%08lx %c%c%c%c%c%c 0x%08lx
000
"
,
pt
->
pid
,
pt
->
pid
,
vma
->
vm_start
,
vma
->
vm_start
,
vma
->
vm_end
,
vma
->
vm_end
,
...
@@ -510,7 +510,7 @@ static int drm__vma_info(char *buf, char **start, off_t offset, int request,
...
@@ -510,7 +510,7 @@ static int drm__vma_info(char *buf, char **start, off_t offset, int request,
vma
->
vm_flags
&
VM_MAYSHARE
?
's'
:
'p'
,
vma
->
vm_flags
&
VM_MAYSHARE
?
's'
:
'p'
,
vma
->
vm_flags
&
VM_LOCKED
?
'l'
:
'-'
,
vma
->
vm_flags
&
VM_LOCKED
?
'l'
:
'-'
,
vma
->
vm_flags
&
VM_IO
?
'i'
:
'-'
,
vma
->
vm_flags
&
VM_IO
?
'i'
:
'-'
,
vma
->
vm_pgoff
<<
PAGE_SHIFT
);
vma
->
vm_pgoff
);
#if defined(__i386__)
#if defined(__i386__)
pgprot
=
pgprot_val
(
vma
->
vm_page_prot
);
pgprot
=
pgprot_val
(
vma
->
vm_page_prot
);
...
...
drivers/char/drm/drm_vm.c
View file @
1545085a
...
@@ -70,7 +70,7 @@ static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
...
@@ -70,7 +70,7 @@ static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
if
(
!
dev
->
agp
||
!
dev
->
agp
->
cant_use_aperture
)
if
(
!
dev
->
agp
||
!
dev
->
agp
->
cant_use_aperture
)
goto
vm_nopage_error
;
goto
vm_nopage_error
;
if
(
drm_ht_find_item
(
&
dev
->
map_hash
,
vma
->
vm_pgoff
<<
PAGE_SHIFT
,
&
hash
))
if
(
drm_ht_find_item
(
&
dev
->
map_hash
,
vma
->
vm_pgoff
,
&
hash
))
goto
vm_nopage_error
;
goto
vm_nopage_error
;
r_list
=
drm_hash_entry
(
hash
,
drm_map_list_t
,
hash
);
r_list
=
drm_hash_entry
(
hash
,
drm_map_list_t
,
hash
);
...
@@ -463,8 +463,8 @@ static int drm_mmap_dma(struct file *filp, struct vm_area_struct *vma)
...
@@ -463,8 +463,8 @@ static int drm_mmap_dma(struct file *filp, struct vm_area_struct *vma)
lock_kernel
();
lock_kernel
();
dev
=
priv
->
head
->
dev
;
dev
=
priv
->
head
->
dev
;
dma
=
dev
->
dma
;
dma
=
dev
->
dma
;
DRM_DEBUG
(
"start = 0x%lx, end = 0x%lx, offset = 0x%lx
\n
"
,
DRM_DEBUG
(
"start = 0x%lx, end = 0x%lx,
page
offset = 0x%lx
\n
"
,
vma
->
vm_start
,
vma
->
vm_end
,
vma
->
vm_pgoff
<<
PAGE_SHIFT
);
vma
->
vm_start
,
vma
->
vm_end
,
vma
->
vm_pgoff
);
/* Length must match exact page count */
/* Length must match exact page count */
if
(
!
dma
||
(
length
>>
PAGE_SHIFT
)
!=
dma
->
page_count
)
{
if
(
!
dma
||
(
length
>>
PAGE_SHIFT
)
!=
dma
->
page_count
)
{
...
@@ -537,8 +537,8 @@ int drm_mmap(struct file *filp, struct vm_area_struct *vma)
...
@@ -537,8 +537,8 @@ int drm_mmap(struct file *filp, struct vm_area_struct *vma)
unsigned
long
offset
=
0
;
unsigned
long
offset
=
0
;
drm_hash_item_t
*
hash
;
drm_hash_item_t
*
hash
;
DRM_DEBUG
(
"start = 0x%lx, end = 0x%lx, offset = 0x%lx
\n
"
,
DRM_DEBUG
(
"start = 0x%lx, end = 0x%lx,
page
offset = 0x%lx
\n
"
,
vma
->
vm_start
,
vma
->
vm_end
,
vma
->
vm_pgoff
<<
PAGE_SHIFT
);
vma
->
vm_start
,
vma
->
vm_end
,
vma
->
vm_pgoff
);
if
(
!
priv
->
authenticated
)
if
(
!
priv
->
authenticated
)
return
-
EACCES
;
return
-
EACCES
;
...
@@ -547,7 +547,7 @@ int drm_mmap(struct file *filp, struct vm_area_struct *vma)
...
@@ -547,7 +547,7 @@ int drm_mmap(struct file *filp, struct vm_area_struct *vma)
* the AGP mapped at physical address 0
* the AGP mapped at physical address 0
* --BenH.
* --BenH.
*/
*/
if
(
!
(
vma
->
vm_pgoff
<<
PAGE_SHIFT
)
if
(
!
vma
->
vm_pgoff
#if __OS_HAS_AGP
#if __OS_HAS_AGP
&&
(
!
dev
->
agp
&&
(
!
dev
->
agp
||
dev
->
agp
->
agp_info
.
device
->
vendor
!=
PCI_VENDOR_ID_APPLE
)
||
dev
->
agp
->
agp_info
.
device
->
vendor
!=
PCI_VENDOR_ID_APPLE
)
...
@@ -555,7 +555,7 @@ int drm_mmap(struct file *filp, struct vm_area_struct *vma)
...
@@ -555,7 +555,7 @@ int drm_mmap(struct file *filp, struct vm_area_struct *vma)
)
)
return
drm_mmap_dma
(
filp
,
vma
);
return
drm_mmap_dma
(
filp
,
vma
);
if
(
drm_ht_find_item
(
&
dev
->
map_hash
,
vma
->
vm_pgoff
<<
PAGE_SHIFT
,
&
hash
))
{
if
(
drm_ht_find_item
(
&
dev
->
map_hash
,
vma
->
vm_pgoff
,
&
hash
))
{
DRM_ERROR
(
"Could not find map
\n
"
);
DRM_ERROR
(
"Could not find map
\n
"
);
return
-
EINVAL
;
return
-
EINVAL
;
}
}
...
...
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