diff options
Diffstat (limited to 'drivers/gpu/ion/ion.c')
| -rw-r--r-- | drivers/gpu/ion/ion.c | 19 | 
1 files changed, 11 insertions, 8 deletions
diff --git a/drivers/gpu/ion/ion.c b/drivers/gpu/ion/ion.c index 8d43ad12ea6..9f73052c392 100644 --- a/drivers/gpu/ion/ion.c +++ b/drivers/gpu/ion/ion.c @@ -388,13 +388,16 @@ static int ion_handle_put(struct ion_handle *handle)  static struct ion_handle *ion_handle_lookup(struct ion_client *client,  					    struct ion_buffer *buffer)  { -	struct rb_node *n; +	struct rb_node *n = client->handles.rb_node; -	for (n = rb_first(&client->handles); n; n = rb_next(n)) { -		struct ion_handle *handle = rb_entry(n, struct ion_handle, -						   node); -		if (handle->buffer == buffer) -			return handle; +	while (n) { +		struct ion_handle *entry = rb_entry(n, struct ion_handle, node); +		if (buffer < entry->buffer) +			n = n->rb_left; +		else if (buffer > entry->buffer) +			n = n->rb_right; +		else +			return entry;  	}  	return ERR_PTR(-EINVAL);  } @@ -432,9 +435,9 @@ static int ion_handle_add(struct ion_client *client, struct ion_handle *handle)  		parent = *p;  		entry = rb_entry(parent, struct ion_handle, node); -		if (handle < entry) +		if (handle->buffer < entry->buffer)  			p = &(*p)->rb_left; -		else if (handle > entry) +		else if (handle->buffer > entry->buffer)  			p = &(*p)->rb_right;  		else  			WARN(1, "%s: buffer already found.", __func__);  |