Rev 5078 | Rev 5346 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5078 | Rev 5271 | ||
---|---|---|---|
Line 63... | Line 63... | ||
63 | return -ENOMEM; |
63 | return -ENOMEM; |
64 | } |
64 | } |
Line 65... | Line 65... | ||
65 | 65 | ||
66 | retry: |
66 | retry: |
67 | r = radeon_bo_create(rdev, size, alignment, kernel, initial_domain, |
67 | r = radeon_bo_create(rdev, size, alignment, kernel, initial_domain, |
68 | flags, NULL, &robj); |
68 | flags, NULL, NULL, &robj); |
69 | if (r) { |
69 | if (r) { |
70 | if (r != -ERESTARTSYS) { |
70 | if (r != -ERESTARTSYS) { |
71 | if (initial_domain == RADEON_GEM_DOMAIN_VRAM) { |
71 | if (initial_domain == RADEON_GEM_DOMAIN_VRAM) { |
72 | initial_domain |= RADEON_GEM_DOMAIN_GTT; |
72 | initial_domain |= RADEON_GEM_DOMAIN_GTT; |
Line 89... | Line 89... | ||
89 | static int radeon_gem_set_domain(struct drm_gem_object *gobj, |
89 | static int radeon_gem_set_domain(struct drm_gem_object *gobj, |
90 | uint32_t rdomain, uint32_t wdomain) |
90 | uint32_t rdomain, uint32_t wdomain) |
91 | { |
91 | { |
92 | struct radeon_bo *robj; |
92 | struct radeon_bo *robj; |
93 | uint32_t domain; |
93 | uint32_t domain; |
94 | int r; |
94 | long r; |
Line 95... | Line 95... | ||
95 | 95 | ||
96 | /* FIXME: reeimplement */ |
96 | /* FIXME: reeimplement */ |
97 | robj = gem_to_radeon_bo(gobj); |
97 | robj = gem_to_radeon_bo(gobj); |
98 | /* work out where to validate the buffer to */ |
98 | /* work out where to validate the buffer to */ |
Line 227... | Line 227... | ||
227 | up_read(&rdev->exclusive_lock); |
227 | up_read(&rdev->exclusive_lock); |
228 | r = radeon_gem_handle_lockup(robj->rdev, r); |
228 | r = radeon_gem_handle_lockup(robj->rdev, r); |
229 | return r; |
229 | return r; |
230 | } |
230 | } |
Line 231... | Line 231... | ||
231 | 231 | ||
232 | int radeon_mode_dumb_mmap(struct drm_file *filp, |
232 | static int radeon_mode_mmap(struct drm_file *filp, |
- | 233 | struct drm_device *dev, |
|
233 | struct drm_device *dev, |
234 | uint32_t handle, bool dumb, |
234 | uint32_t handle, uint64_t *offset_p) |
235 | uint64_t *offset_p) |
235 | { |
236 | { |
236 | struct drm_gem_object *gobj; |
237 | struct drm_gem_object *gobj; |
Line 237... | Line 238... | ||
237 | struct radeon_bo *robj; |
238 | struct radeon_bo *robj; |
238 | 239 | ||
239 | gobj = drm_gem_object_lookup(dev, filp, handle); |
240 | gobj = drm_gem_object_lookup(dev, filp, handle); |
240 | if (gobj == NULL) { |
241 | if (gobj == NULL) { |
- | 242 | return -ENOENT; |
|
- | 243 | } |
|
- | 244 | ||
- | 245 | /* |
|
- | 246 | * We don't allow dumb mmaps on objects created using another |
|
- | 247 | * interface. |
|
- | 248 | */ |
|
- | 249 | WARN_ONCE(dumb && !(gobj->dumb || gobj->import_attach), |
|
241 | return -ENOENT; |
250 | "Illegal dumb map of GPU buffer.\n"); |
242 | } |
251 | |
243 | robj = gem_to_radeon_bo(gobj); |
252 | robj = gem_to_radeon_bo(gobj); |
244 | *offset_p = radeon_bo_mmap_offset(robj); |
253 | *offset_p = radeon_bo_mmap_offset(robj); |
245 | drm_gem_object_unreference_unlocked(gobj); |
254 | drm_gem_object_unreference_unlocked(gobj); |
Line 249... | Line 258... | ||
249 | int radeon_gem_mmap_ioctl(struct drm_device *dev, void *data, |
258 | int radeon_gem_mmap_ioctl(struct drm_device *dev, void *data, |
250 | struct drm_file *filp) |
259 | struct drm_file *filp) |
251 | { |
260 | { |
252 | struct drm_radeon_gem_mmap *args = data; |
261 | struct drm_radeon_gem_mmap *args = data; |
Line 253... | Line 262... | ||
253 | 262 | ||
- | 263 | return radeon_mode_mmap(filp, dev, args->handle, false, |
|
254 | return radeon_mode_dumb_mmap(filp, dev, args->handle, &args->addr_ptr); |
264 | &args->addr_ptr); |
Line 255... | Line 265... | ||
255 | } |
265 | } |
256 | 266 | ||
257 | int radeon_gem_busy_ioctl(struct drm_device *dev, void *data, |
267 | int radeon_gem_busy_ioctl(struct drm_device *dev, void *data, |
Line 281... | Line 291... | ||
281 | { |
291 | { |
282 | struct radeon_device *rdev = dev->dev_private; |
292 | struct radeon_device *rdev = dev->dev_private; |
283 | struct drm_radeon_gem_wait_idle *args = data; |
293 | struct drm_radeon_gem_wait_idle *args = data; |
284 | struct drm_gem_object *gobj; |
294 | struct drm_gem_object *gobj; |
285 | struct radeon_bo *robj; |
295 | struct radeon_bo *robj; |
286 | int r; |
296 | int r = 0; |
287 | uint32_t cur_placement = 0; |
297 | uint32_t cur_placement = 0; |
- | 298 | long ret; |
|
Line 288... | Line 299... | ||
288 | 299 | ||
289 | gobj = drm_gem_object_lookup(dev, filp, args->handle); |
300 | gobj = drm_gem_object_lookup(dev, filp, args->handle); |
290 | if (gobj == NULL) { |
301 | if (gobj == NULL) { |
291 | return -ENOENT; |
302 | return -ENOENT; |