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

Changed files
+17 -1
drivers
firewire
+17 -1
drivers/firewire/core-card.c
··· 429 429 */ 430 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 450 * Either link_on is false, or we failed to read the 435 451 * config rom. In either case, pick another root.