History

Merge tag 'firewire-fixes-6.8-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394

Pull firewire fix from Takashi Sakamoto: "A change to accelerate the device detection step in some cases. In the self-identification step after bus-reset, all nodes in the same bus broadcast selfID packet including the value of gap count. The value is related to the cable hops between nodes, and used to calculate the subaction gap and the arbitration reset gap. When each node has the different value of the gap count, the asynchronous communication between them is unreliable, since an asynchronous transaction could be interrupted by another asynchronous transaction before completion. The gap count inconsistency can be resolved by several ways; e.g. the transfer of PHY configuration packet and generation of bus-reset. The current implementation of firewire stack can correctly detect the gap count inconsistency, however the recovery action from the inconsistency tends to be delayed after reading configuration ROM of root node. This results in the long time to probe devices in some combinations of hardware. Here the stack is changed to schedule the action as soon as possible" * tag 'firewire-fixes-6.8-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394: firewire: core: send bus reset promptly on gap count error

Linus Torvalds committed 2 years ago

Commit a38ff5b2 parents 5a7ec87 7ed43801 file · +17 −1Browse files

Unified · Split

drivers/firewire/core-card.c+17−1
@@ -429,7 +429,23 @@ static void bm_work(struct work_struct *work) · 428 unmodified lines
429 */429 */
430 card->bm_generation = generation;430 card->bm_generation = generation;
431 431
432 if (root_device == NULL) {432 if (card->gap_count == 0) {
433 /*
434 * If self IDs have inconsistent gap counts, do a
435 * bus reset ASAP. The config rom read might never
436 * complete, so don't wait for it. However, still
437 * send a PHY configuration packet prior to the
438 * bus reset. The PHY configuration packet might
439 * fail, but 1394-2008 8.4.5.2 explicitly permits
440 * it in this case, so it should be safe to try.
441 */
442 new_root_id = local_id;
443 /*
444 * We must always send a bus reset if the gap count
445 * is inconsistent, so bypass the 5-reset limit.
446 */
447 card->bm_retries = 0;
448 } else if (root_device == NULL) {
433 /*449 /*
434 * Either link_on is false, or we failed to read the450 * Either link_on is false, or we failed to read the
435 * config rom. In either case, pick another root.451 * config rom. In either case, pick another root.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t