From eb9f504d0b5dc0893fff5b2987efee39db205435 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Wed, 11 Apr 2012 17:37:36 +0200 Subject: [PATCH] --- yaml --- r: 307579 b: refs/heads/master c: db7494e2ce616f2e39e877cf9143b7d873701ec6 h: refs/heads/master i: 307577: 796d8328a72aa57d83dd08d95a00bec6880ea7ff 307575: 09e51c890eb7dedf3c6123aacc5ba544dad38921 v: v3 --- [refs] | 2 +- trunk/drivers/firewire/core-device.c | 40 +++++++++++++--------------- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/[refs] b/[refs] index 9a34ac3d6265..07b179431f33 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d33ec3b55e91f1c285099fee731b79a722d10fe6 +refs/heads/master: db7494e2ce616f2e39e877cf9143b7d873701ec6 diff --git a/trunk/drivers/firewire/core-device.c b/trunk/drivers/firewire/core-device.c index 8038311e1737..f9f782afedf2 100644 --- a/trunk/drivers/firewire/core-device.c +++ b/trunk/drivers/firewire/core-device.c @@ -1069,31 +1069,30 @@ static void fw_device_init(struct work_struct *work) put_device(&device->device); /* our reference */ } -enum { - REREAD_BIB_ERROR, - REREAD_BIB_UNCHANGED, - REREAD_BIB_CHANGED, -}; - /* Reread and compare bus info block and header of root directory */ -static int reread_config_rom(struct fw_device *device, int generation) +static int reread_config_rom(struct fw_device *device, int generation, + bool *changed) { u32 q; - int i; + int i, rcode; for (i = 0; i < 6; i++) { - if (read_rom(device, generation, i, &q) != RCODE_COMPLETE) - return REREAD_BIB_ERROR; + rcode = read_rom(device, generation, i, &q); + if (rcode != RCODE_COMPLETE) + return rcode; if (i == 0 && q == 0) /* inaccessible (see read_config_rom); retry later */ - return REREAD_BIB_ERROR; + return RCODE_BUSY; - if (q != device->config_rom[i]) - return REREAD_BIB_CHANGED; + if (q != device->config_rom[i]) { + *changed = true; + return RCODE_COMPLETE; + } } - return REREAD_BIB_UNCHANGED; + *changed = false; + return RCODE_COMPLETE; } static void fw_device_refresh(struct work_struct *work) @@ -1101,10 +1100,11 @@ static void fw_device_refresh(struct work_struct *work) struct fw_device *device = container_of(work, struct fw_device, work.work); struct fw_card *card = device->card; - int node_id = device->node_id; + int ret, node_id = device->node_id; + bool changed; - switch (reread_config_rom(device, device->generation)) { - case REREAD_BIB_ERROR: + ret = reread_config_rom(device, device->generation, &changed); + if (ret != RCODE_COMPLETE) { if (device->config_rom_retries < MAX_RETRIES / 2 && atomic_read(&device->state) == FW_DEVICE_INITIALIZING) { device->config_rom_retries++; @@ -1113,8 +1113,9 @@ static void fw_device_refresh(struct work_struct *work) return; } goto give_up; + } - case REREAD_BIB_UNCHANGED: + if (!changed) { if (atomic_cmpxchg(&device->state, FW_DEVICE_INITIALIZING, FW_DEVICE_RUNNING) == FW_DEVICE_GONE) @@ -1123,9 +1124,6 @@ static void fw_device_refresh(struct work_struct *work) fw_device_update(work); device->config_rom_retries = 0; goto out; - - case REREAD_BIB_CHANGED: - break; } /*