Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bc680ab1 authored by Nicolas Gagnon's avatar Nicolas Gagnon Committed by Keith Mok
Browse files

Port ADB's new handling of the USB packet ClearFeature(HALT) to Fastboot.

This patch addresses Fastboot/Fastbootd connection issues seen on ARM Mac devices.

Original ADB patch: https://android-review.googlesource.com/c/platform/packages/modules/adb/+/1699250/



Bug: 238779161
Test: 'fastboot update <path_to_update_archive>.zip' now works on ARM Mac.

Signed-off-by: default avatarNicolas Gagnon <nicolasgagnon@google.com>
Merged-In: Id67904d91abc8b66ef1a00962e1fd57c97df98a7
Change-Id: Id67904d91abc8b66ef1a00962e1fd57c97df98a7
(cherry picked from commit 3efef5694ee242f0fbeeaaa15c128dfb84418798)
parent 8ea0c2e2
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -171,6 +171,16 @@ static int usb_ffs_do_aio(usb_handle* h, const void* data, int len, bool read) {
        if (num_bufs == 1 && aiob->events[0].res == -EINTR) {
            continue;
        }
        if (read && aiob->events[0].res == -EPIPE) {
            // On initial connection, some clients will send a ClearFeature(HALT) to
            // attempt to resynchronize host and device after the fastboot server is killed.
            // On newer device kernels, the reads we've already dispatched will be cancelled.
            // Instead of treating this as a failure, which will tear down the interface and
            // lead to the client doing the same thing again, just resubmit if this happens
            // before we've actually read anything.
            PLOG(ERROR) << "aio: got -EPIPE on first read attempt. Re-submitting read... ";
            continue;
        }
        int ret = 0;
        for (int i = 0; i < num_bufs; i++) {
            if (aiob->events[i].res < 0) {