diff options
| -rw-r--r-- | drivers/char/agp/sgi-agp.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/char/agp/sgi-agp.c b/drivers/char/agp/sgi-agp.c index 4b3eda267976..d3aa159c9dec 100644 --- a/drivers/char/agp/sgi-agp.c +++ b/drivers/char/agp/sgi-agp.c | |||
| @@ -133,11 +133,14 @@ static int sgi_tioca_insert_memory(struct agp_memory *mem, off_t pg_start, | |||
| 133 | off_t j; | 133 | off_t j; |
| 134 | void *temp; | 134 | void *temp; |
| 135 | struct agp_bridge_data *bridge; | 135 | struct agp_bridge_data *bridge; |
| 136 | u64 *table; | ||
| 136 | 137 | ||
| 137 | bridge = mem->bridge; | 138 | bridge = mem->bridge; |
| 138 | if (!bridge) | 139 | if (!bridge) |
| 139 | return -EINVAL; | 140 | return -EINVAL; |
| 140 | 141 | ||
| 142 | table = (u64 *)bridge->gatt_table; | ||
| 143 | |||
| 141 | temp = bridge->current_size; | 144 | temp = bridge->current_size; |
| 142 | 145 | ||
| 143 | switch (bridge->driver->size_type) { | 146 | switch (bridge->driver->size_type) { |
| @@ -175,7 +178,7 @@ static int sgi_tioca_insert_memory(struct agp_memory *mem, off_t pg_start, | |||
| 175 | j = pg_start; | 178 | j = pg_start; |
| 176 | 179 | ||
| 177 | while (j < (pg_start + mem->page_count)) { | 180 | while (j < (pg_start + mem->page_count)) { |
| 178 | if (*(bridge->gatt_table + j)) | 181 | if (table[j]) |
| 179 | return -EBUSY; | 182 | return -EBUSY; |
| 180 | j++; | 183 | j++; |
| 181 | } | 184 | } |
| @@ -186,7 +189,7 @@ static int sgi_tioca_insert_memory(struct agp_memory *mem, off_t pg_start, | |||
| 186 | } | 189 | } |
| 187 | 190 | ||
| 188 | for (i = 0, j = pg_start; i < mem->page_count; i++, j++) { | 191 | for (i = 0, j = pg_start; i < mem->page_count; i++, j++) { |
| 189 | *(bridge->gatt_table + j) = | 192 | table[j] = |
| 190 | bridge->driver->mask_memory(bridge, mem->memory[i], | 193 | bridge->driver->mask_memory(bridge, mem->memory[i], |
| 191 | mem->type); | 194 | mem->type); |
| 192 | } | 195 | } |
| @@ -200,6 +203,7 @@ static int sgi_tioca_remove_memory(struct agp_memory *mem, off_t pg_start, | |||
| 200 | { | 203 | { |
| 201 | size_t i; | 204 | size_t i; |
| 202 | struct agp_bridge_data *bridge; | 205 | struct agp_bridge_data *bridge; |
| 206 | u64 *table; | ||
| 203 | 207 | ||
| 204 | bridge = mem->bridge; | 208 | bridge = mem->bridge; |
| 205 | if (!bridge) | 209 | if (!bridge) |
| @@ -209,8 +213,10 @@ static int sgi_tioca_remove_memory(struct agp_memory *mem, off_t pg_start, | |||
| 209 | return -EINVAL; | 213 | return -EINVAL; |
| 210 | } | 214 | } |
| 211 | 215 | ||
| 216 | table = (u64 *)bridge->gatt_table; | ||
| 217 | |||
| 212 | for (i = pg_start; i < (mem->page_count + pg_start); i++) { | 218 | for (i = pg_start; i < (mem->page_count + pg_start); i++) { |
| 213 | *(bridge->gatt_table + i) = 0; | 219 | table[i] = 0; |
| 214 | } | 220 | } |
| 215 | 221 | ||
| 216 | bridge->driver->tlb_flush(mem); | 222 | bridge->driver->tlb_flush(mem); |
