Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 371679
b: refs/heads/master
c: 307b9c0
h: refs/heads/master
i:
  371677: 33f21b7
  371675: 7b0d74e
  371671: 7c87a91
  371663: 86cdab7
  371647: 1f8c4dc
v: v3
  • Loading branch information
Dave Airlie committed May 3, 2013
1 parent c7d9cda commit 74502a2
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 25 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: d2dbaaf6265d292575bfe41bf668b0cab759e19c
refs/heads/master: 307b9c022720f9de90d58e51743e01e9a42aec59
19 changes: 7 additions & 12 deletions trunk/drivers/gpu/drm/qxl/qxl_cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -435,22 +435,18 @@ void qxl_io_monitors_config(struct qxl_device *qdev)
int qxl_surface_id_alloc(struct qxl_device *qdev,
struct qxl_bo *surf)
{
uint32_t handle = -ENOMEM;
uint32_t handle;
int idr_ret;
int count = 0;
again:
if (idr_pre_get(&qdev->surf_id_idr, GFP_ATOMIC) == 0) {
DRM_ERROR("Out of memory for surf idr\n");
kfree(surf);
goto alloc_fail;
}

idr_preload(GFP_ATOMIC);
spin_lock(&qdev->surf_id_idr_lock);
idr_ret = idr_get_new_above(&qdev->surf_id_idr, NULL, 1, &handle);
idr_ret = idr_alloc(&qdev->surf_id_idr, NULL, 1, 0, GFP_NOWAIT);
spin_unlock(&qdev->surf_id_idr_lock);

if (idr_ret == -EAGAIN)
goto again;
idr_preload_end();
if (idr_ret < 0)
return idr_ret;
handle = idr_ret;

if (handle >= qdev->rom->n_surfaces) {
count++;
Expand All @@ -465,7 +461,6 @@ int qxl_surface_id_alloc(struct qxl_device *qdev,
spin_lock(&qdev->surf_id_idr_lock);
qdev->last_alloced_surf_id = handle;
spin_unlock(&qdev->surf_id_idr_lock);
alloc_fail:
return 0;
}

Expand Down
21 changes: 9 additions & 12 deletions trunk/drivers/gpu/drm/qxl/qxl_release.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ qxl_release_alloc(struct qxl_device *qdev, int type,
struct qxl_release **ret)
{
struct qxl_release *release;
int handle = 0;
int handle;
size_t size = sizeof(*release);
int idr_ret;

Expand All @@ -56,19 +56,16 @@ qxl_release_alloc(struct qxl_device *qdev, int type,
release->bo_count = 0;
release->release_offset = 0;
release->surface_release_id = 0;
again:
if (idr_pre_get(&qdev->release_idr, GFP_KERNEL) == 0) {
DRM_ERROR("Out of memory for release idr\n");
kfree(release);
goto release_fail;
}

idr_preload(GFP_KERNEL);
spin_lock(&qdev->release_idr_lock);
idr_ret = idr_get_new_above(&qdev->release_idr, release, 1, &handle);
idr_ret = idr_alloc(&qdev->release_idr, release, 1, 0, GFP_NOWAIT);
spin_unlock(&qdev->release_idr_lock);
if (idr_ret == -EAGAIN)
goto again;
if (ret)
*ret = release;
idr_preload_end();
handle = idr_ret;
if (idr_ret < 0)
goto release_fail;
*ret = release;
QXL_INFO(qdev, "allocated release %lld\n", handle);
release->id = handle;
release_fail:
Expand Down

0 comments on commit 74502a2

Please sign in to comment.