mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-03-01 12:53:28 +07:00
[PATCH] sgi-agp: fixes a problem with accessing GART memory in sgi_tioca_insert_memory and sgi_tioca_remove_memory
This patch fixes a problem with accessing GART memory in sgi_tioca_insert_memory and sgi_tioca_remove_memory. sgi-agp.c | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-) Signed-off-by: Mike Werner <werner@sgi.com> Signed-off-by: Dave Jones <davej@redhat.com>
This commit is contained in:
parent
d0de98fa16
commit
e29b545cb1
@ -133,11 +133,14 @@ static int sgi_tioca_insert_memory(struct agp_memory *mem, off_t pg_start,
|
|||||||
off_t j;
|
off_t j;
|
||||||
void *temp;
|
void *temp;
|
||||||
struct agp_bridge_data *bridge;
|
struct agp_bridge_data *bridge;
|
||||||
|
u64 *table;
|
||||||
|
|
||||||
bridge = mem->bridge;
|
bridge = mem->bridge;
|
||||||
if (!bridge)
|
if (!bridge)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
table = (u64 *)bridge->gatt_table;
|
||||||
|
|
||||||
temp = bridge->current_size;
|
temp = bridge->current_size;
|
||||||
|
|
||||||
switch (bridge->driver->size_type) {
|
switch (bridge->driver->size_type) {
|
||||||
@ -175,7 +178,7 @@ static int sgi_tioca_insert_memory(struct agp_memory *mem, off_t pg_start,
|
|||||||
j = pg_start;
|
j = pg_start;
|
||||||
|
|
||||||
while (j < (pg_start + mem->page_count)) {
|
while (j < (pg_start + mem->page_count)) {
|
||||||
if (*(bridge->gatt_table + j))
|
if (table[j])
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
@ -186,7 +189,7 @@ static int sgi_tioca_insert_memory(struct agp_memory *mem, off_t pg_start,
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0, j = pg_start; i < mem->page_count; i++, j++) {
|
for (i = 0, j = pg_start; i < mem->page_count; i++, j++) {
|
||||||
*(bridge->gatt_table + j) =
|
table[j] =
|
||||||
bridge->driver->mask_memory(bridge, mem->memory[i],
|
bridge->driver->mask_memory(bridge, mem->memory[i],
|
||||||
mem->type);
|
mem->type);
|
||||||
}
|
}
|
||||||
@ -200,6 +203,7 @@ static int sgi_tioca_remove_memory(struct agp_memory *mem, off_t pg_start,
|
|||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
struct agp_bridge_data *bridge;
|
struct agp_bridge_data *bridge;
|
||||||
|
u64 *table;
|
||||||
|
|
||||||
bridge = mem->bridge;
|
bridge = mem->bridge;
|
||||||
if (!bridge)
|
if (!bridge)
|
||||||
@ -209,8 +213,10 @@ static int sgi_tioca_remove_memory(struct agp_memory *mem, off_t pg_start,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table = (u64 *)bridge->gatt_table;
|
||||||
|
|
||||||
for (i = pg_start; i < (mem->page_count + pg_start); i++) {
|
for (i = pg_start; i < (mem->page_count + pg_start); i++) {
|
||||||
*(bridge->gatt_table + i) = 0;
|
table[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bridge->driver->tlb_flush(mem);
|
bridge->driver->tlb_flush(mem);
|
||||||
|
Loading…
Reference in New Issue
Block a user