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
a5ee3634
Commit
a5ee3634
authored
Nov 09, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/pub/scm/linux/kernel/git/davej/agpgart
parents
28d838cc
49ebd7c6
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
30 additions
and
12 deletions
+30
-12
drivers/char/agp/backend.c
drivers/char/agp/backend.c
+7
-2
drivers/char/agp/generic.c
drivers/char/agp/generic.c
+8
-3
drivers/char/agp/i460-agp.c
drivers/char/agp/i460-agp.c
+11
-6
drivers/char/agp/intel-agp.c
drivers/char/agp/intel-agp.c
+4
-1
No files found.
drivers/char/agp/backend.c
View file @
a5ee3634
...
...
@@ -147,6 +147,7 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge)
printk
(
KERN_ERR
PFX
"unable to get memory for scratch page.
\n
"
);
return
-
ENOMEM
;
}
global_flush_tlb
();
bridge
->
scratch_page_real
=
virt_to_gart
(
addr
);
bridge
->
scratch_page
=
...
...
@@ -187,9 +188,11 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge)
return
0
;
err_out:
if
(
bridge
->
driver
->
needs_scratch_page
)
if
(
bridge
->
driver
->
needs_scratch_page
)
{
bridge
->
driver
->
agp_destroy_page
(
gart_to_virt
(
bridge
->
scratch_page_real
));
global_flush_tlb
();
}
if
(
got_gatt
)
bridge
->
driver
->
free_gatt_table
(
bridge
);
if
(
got_keylist
)
{
...
...
@@ -211,9 +214,11 @@ static void agp_backend_cleanup(struct agp_bridge_data *bridge)
bridge
->
key_list
=
NULL
;
if
(
bridge
->
driver
->
agp_destroy_page
&&
bridge
->
driver
->
needs_scratch_page
)
bridge
->
driver
->
needs_scratch_page
)
{
bridge
->
driver
->
agp_destroy_page
(
gart_to_virt
(
bridge
->
scratch_page_real
));
global_flush_tlb
();
}
}
/* When we remove the global variable agp_bridge from all drivers
...
...
drivers/char/agp/generic.c
View file @
a5ee3634
...
...
@@ -57,7 +57,8 @@ int map_page_into_agp(struct page *page)
{
int
i
;
i
=
change_page_attr
(
page
,
1
,
PAGE_KERNEL_NOCACHE
);
global_flush_tlb
();
/* Caller's responsibility to call global_flush_tlb() for
* performance reasons */
return
i
;
}
EXPORT_SYMBOL_GPL
(
map_page_into_agp
);
...
...
@@ -66,7 +67,8 @@ int unmap_page_from_agp(struct page *page)
{
int
i
;
i
=
change_page_attr
(
page
,
1
,
PAGE_KERNEL
);
global_flush_tlb
();
/* Caller's responsibility to call global_flush_tlb() for
* performance reasons */
return
i
;
}
EXPORT_SYMBOL_GPL
(
unmap_page_from_agp
);
...
...
@@ -153,6 +155,7 @@ void agp_free_memory(struct agp_memory *curr)
for
(
i
=
0
;
i
<
curr
->
page_count
;
i
++
)
{
curr
->
bridge
->
driver
->
agp_destroy_page
(
gart_to_virt
(
curr
->
memory
[
i
]));
}
global_flush_tlb
();
}
agp_free_key
(
curr
->
key
);
vfree
(
curr
->
memory
);
...
...
@@ -210,7 +213,9 @@ struct agp_memory *agp_allocate_memory(struct agp_bridge_data *bridge,
new
->
memory
[
i
]
=
virt_to_gart
(
addr
);
new
->
page_count
++
;
}
new
->
bridge
=
bridge
;
global_flush_tlb
();
new
->
bridge
=
bridge
;
flush_agp_mappings
();
...
...
drivers/char/agp/i460-agp.c
View file @
a5ee3634
...
...
@@ -111,8 +111,10 @@ static int i460_fetch_size (void)
if
(
i460
.
io_page_shift
!=
I460_IO_PAGE_SHIFT
)
{
printk
(
KERN_ERR
PFX
"I/O (GART) page-size %ZuKB doesn't match expected size %ZuKB
\n
"
,
1UL
<<
(
i460
.
io_page_shift
-
10
),
1UL
<<
(
I460_IO_PAGE_SHIFT
));
"I/O (GART) page-size %luKB doesn't match expected "
"size %luKB
\n
"
,
1UL
<<
(
i460
.
io_page_shift
-
10
),
1UL
<<
(
I460_IO_PAGE_SHIFT
));
return
0
;
}
...
...
@@ -514,9 +516,10 @@ static void *i460_alloc_page (struct agp_bridge_data *bridge)
{
void
*
page
;
if
(
I460_IO_PAGE_SHIFT
<=
PAGE_SHIFT
)
if
(
I460_IO_PAGE_SHIFT
<=
PAGE_SHIFT
)
{
page
=
agp_generic_alloc_page
(
agp_bridge
);
else
global_flush_tlb
();
}
else
/* Returning NULL would cause problems */
/* AK: really dubious code. */
page
=
(
void
*
)
~
0UL
;
...
...
@@ -525,8 +528,10 @@ static void *i460_alloc_page (struct agp_bridge_data *bridge)
static
void
i460_destroy_page
(
void
*
page
)
{
if
(
I460_IO_PAGE_SHIFT
<=
PAGE_SHIFT
)
if
(
I460_IO_PAGE_SHIFT
<=
PAGE_SHIFT
)
{
agp_generic_destroy_page
(
page
);
global_flush_tlb
();
}
}
#endif
/* I460_LARGE_IO_PAGES */
...
...
@@ -536,7 +541,7 @@ static unsigned long i460_mask_memory (struct agp_bridge_data *bridge,
{
/* Make sure the returned address is a valid GATT entry */
return
bridge
->
driver
->
masks
[
0
].
mask
|
(((
addr
&
~
((
1
<<
I460_IO_PAGE_SHIFT
)
-
1
))
&
0xfffff
f
000
)
>>
12
);
|
(((
addr
&
~
((
1
<<
I460_IO_PAGE_SHIFT
)
-
1
))
&
0xfffff000
)
>>
12
);
}
struct
agp_bridge_driver
intel_i460_driver
=
{
...
...
drivers/char/agp/intel-agp.c
View file @
a5ee3634
...
...
@@ -270,6 +270,7 @@ static struct agp_memory *alloc_agpphysmem_i8xx(size_t pg_count, int type)
switch
(
pg_count
)
{
case
1
:
addr
=
agp_bridge
->
driver
->
agp_alloc_page
(
agp_bridge
);
global_flush_tlb
();
break
;
case
4
:
/* kludge to get 4 physical pages for ARGB cursor */
...
...
@@ -330,9 +331,11 @@ static void intel_i810_free_by_type(struct agp_memory *curr)
if
(
curr
->
type
==
AGP_PHYS_MEMORY
)
{
if
(
curr
->
page_count
==
4
)
i8xx_destroy_pages
(
gart_to_virt
(
curr
->
memory
[
0
]));
else
else
{
agp_bridge
->
driver
->
agp_destroy_page
(
gart_to_virt
(
curr
->
memory
[
0
]));
global_flush_tlb
();
}
vfree
(
curr
->
memory
);
}
kfree
(
curr
);
...
...
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