Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 57147
b: refs/heads/master
c: c4814f9
h: refs/heads/master
i:
  57145: f5328c1
  57143: eb30e86
v: v3
  • Loading branch information
Michel Dänzer authored and Dave Airlie committed May 25, 2007
1 parent 7c204ae commit 3448d34
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 16 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 777c7738a598c6e8d4b850181a509757fb79cf36
refs/heads/master: c4814f9001a8dd28e39311a919beac34f778f76d
41 changes: 26 additions & 15 deletions trunk/drivers/char/drm/drm_drawable.c
Original file line number Diff line number Diff line change
Expand Up @@ -172,38 +172,49 @@ int drm_rmdraw(DRM_IOCTL_ARGS)

bitfield_length = idx + 1;

if (idx != id / (8 * sizeof(*bitfield)))
bitfield = drm_alloc(bitfield_length *
sizeof(*bitfield), DRM_MEM_BUFS);
bitfield = NULL;

if (!bitfield && bitfield_length) {
bitfield = dev->drw_bitfield;
bitfield_length = dev->drw_bitfield_length;
if (bitfield_length) {
if (bitfield_length != dev->drw_bitfield_length)
bitfield = drm_alloc(bitfield_length *
sizeof(*bitfield),
DRM_MEM_BUFS);

if (!bitfield) {
bitfield = dev->drw_bitfield;
bitfield_length = dev->drw_bitfield_length;
}
}
}

if (bitfield != dev->drw_bitfield) {
info_length = 8 * sizeof(*bitfield) * bitfield_length;

info = drm_alloc(info_length * sizeof(*info), DRM_MEM_BUFS);
if (info_length) {
info = drm_alloc(info_length * sizeof(*info),
DRM_MEM_BUFS);

if (!info && info_length) {
info = dev->drw_info;
info_length = dev->drw_info_length;
}
if (!info) {
info = dev->drw_info;
info_length = dev->drw_info_length;
}
} else
info = NULL;

spin_lock_irqsave(&dev->drw_lock, irqflags);

memcpy(bitfield, dev->drw_bitfield, bitfield_length *
sizeof(*bitfield));
if (bitfield)
memcpy(bitfield, dev->drw_bitfield, bitfield_length *
sizeof(*bitfield));
drm_free(dev->drw_bitfield, sizeof(*bitfield) *
dev->drw_bitfield_length, DRM_MEM_BUFS);
dev->drw_bitfield = bitfield;
dev->drw_bitfield_length = bitfield_length;

if (info != dev->drw_info) {
memcpy(info, dev->drw_info, info_length *
sizeof(*info));
if (info)
memcpy(info, dev->drw_info, info_length *
sizeof(*info));
drm_free(dev->drw_info, sizeof(*info) *
dev->drw_info_length, DRM_MEM_BUFS);
dev->drw_info = info;
Expand Down

0 comments on commit 3448d34

Please sign in to comment.