aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/firewire/core-iso.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/firewire/core-iso.c b/drivers/firewire/core-iso.c
index 34a513725c9e..9198e030e895 100644
--- a/drivers/firewire/core-iso.c
+++ b/drivers/firewire/core-iso.c
@@ -189,7 +189,7 @@ static int manage_bandwidth(struct fw_card *card, int irm_id, int generation,
189 for (try = 0; try < 5; try++) { 189 for (try = 0; try < 5; try++) {
190 new = allocate ? old - bandwidth : old + bandwidth; 190 new = allocate ? old - bandwidth : old + bandwidth;
191 if (new < 0 || new > BANDWIDTH_AVAILABLE_INITIAL) 191 if (new < 0 || new > BANDWIDTH_AVAILABLE_INITIAL)
192 break; 192 return -EBUSY;
193 193
194 data[0] = cpu_to_be32(old); 194 data[0] = cpu_to_be32(old);
195 data[1] = cpu_to_be32(new); 195 data[1] = cpu_to_be32(new);
@@ -217,7 +217,7 @@ static int manage_channel(struct fw_card *card, int irm_id, int generation,
217 u32 channels_mask, u64 offset, bool allocate, __be32 data[2]) 217 u32 channels_mask, u64 offset, bool allocate, __be32 data[2])
218{ 218{
219 __be32 c, all, old; 219 __be32 c, all, old;
220 int i, retry = 5; 220 int i, ret = -EIO, retry = 5;
221 221
222 old = all = allocate ? cpu_to_be32(~0) : 0; 222 old = all = allocate ? cpu_to_be32(~0) : 0;
223 223
@@ -225,6 +225,8 @@ static int manage_channel(struct fw_card *card, int irm_id, int generation,
225 if (!(channels_mask & 1 << i)) 225 if (!(channels_mask & 1 << i))
226 continue; 226 continue;
227 227
228 ret = -EBUSY;
229
228 c = cpu_to_be32(1 << (31 - i)); 230 c = cpu_to_be32(1 << (31 - i));
229 if ((old & c) != (all & c)) 231 if ((old & c) != (all & c))
230 continue; 232 continue;
@@ -253,11 +255,13 @@ static int manage_channel(struct fw_card *card, int irm_id, int generation,
253 if (retry) { 255 if (retry) {
254 retry--; 256 retry--;
255 i--; 257 i--;
258 } else {
259 ret = -EIO;
256 } 260 }
257 } 261 }
258 } 262 }
259 263
260 return -EIO; 264 return ret;
261} 265}
262 266
263static void deallocate_channel(struct fw_card *card, int irm_id, 267static void deallocate_channel(struct fw_card *card, int irm_id,