diff options
| author | Takashi Iwai <tiwai@suse.de> | 2009-12-15 04:29:06 -0500 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2009-12-15 04:29:06 -0500 |
| commit | 709334c87dbdb44150ce436b3d13c814db0dcae9 (patch) | |
| tree | 5861a45f70c1f283720337abd864498f5afb3dbe /kernel/resource.c | |
| parent | 0d64b568fcd48b133721c1d322e7c51d85eb12df (diff) | |
| parent | f74890277a196949e4004fe2955e1d4fb3930f98 (diff) | |
Merge branch 'fixes' of git://git.alsa-project.org/alsa-kernel into for-linus
Diffstat (limited to 'kernel/resource.c')
| -rw-r--r-- | kernel/resource.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/kernel/resource.c b/kernel/resource.c index fb11a58b9594..dc15686b7a77 100644 --- a/kernel/resource.c +++ b/kernel/resource.c | |||
| @@ -308,35 +308,37 @@ static int find_resource(struct resource *root, struct resource *new, | |||
| 308 | void *alignf_data) | 308 | void *alignf_data) |
| 309 | { | 309 | { |
| 310 | struct resource *this = root->child; | 310 | struct resource *this = root->child; |
| 311 | resource_size_t start, end; | ||
| 311 | 312 | ||
| 312 | new->start = root->start; | 313 | start = root->start; |
| 313 | /* | 314 | /* |
| 314 | * Skip past an allocated resource that starts at 0, since the assignment | 315 | * Skip past an allocated resource that starts at 0, since the assignment |
| 315 | * of this->start - 1 to new->end below would cause an underflow. | 316 | * of this->start - 1 to new->end below would cause an underflow. |
| 316 | */ | 317 | */ |
| 317 | if (this && this->start == 0) { | 318 | if (this && this->start == 0) { |
| 318 | new->start = this->end + 1; | 319 | start = this->end + 1; |
| 319 | this = this->sibling; | 320 | this = this->sibling; |
| 320 | } | 321 | } |
| 321 | for(;;) { | 322 | for(;;) { |
| 322 | if (this) | 323 | if (this) |
| 323 | new->end = this->start - 1; | 324 | end = this->start - 1; |
| 324 | else | 325 | else |
| 325 | new->end = root->end; | 326 | end = root->end; |
| 326 | if (new->start < min) | 327 | if (start < min) |
| 327 | new->start = min; | 328 | start = min; |
| 328 | if (new->end > max) | 329 | if (end > max) |
| 329 | new->end = max; | 330 | end = max; |
| 330 | new->start = ALIGN(new->start, align); | 331 | start = ALIGN(start, align); |
| 331 | if (alignf) | 332 | if (alignf) |
| 332 | alignf(alignf_data, new, size, align); | 333 | alignf(alignf_data, new, size, align); |
| 333 | if (new->start < new->end && new->end - new->start >= size - 1) { | 334 | if (start < end && end - start >= size - 1) { |
| 334 | new->end = new->start + size - 1; | 335 | new->start = start; |
| 336 | new->end = start + size - 1; | ||
| 335 | return 0; | 337 | return 0; |
| 336 | } | 338 | } |
| 337 | if (!this) | 339 | if (!this) |
| 338 | break; | 340 | break; |
| 339 | new->start = this->end + 1; | 341 | start = this->end + 1; |
| 340 | this = this->sibling; | 342 | this = this->sibling; |
| 341 | } | 343 | } |
| 342 | return -EBUSY; | 344 | return -EBUSY; |
