return 0;
                if (err == -EAGAIN ||
                    intel_pt_fup_with_nlip(decoder, &intel_pt_insn, ip, err)) {
+                       decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
                        if (intel_pt_fup_event(decoder))
                                return 0;
                        return -EAGAIN;
                        }
                        if (decoder->set_fup_mwait)
                                no_tip = true;
+                       if (no_tip)
+                               decoder->pkt_state = INTEL_PT_STATE_FUP_NO_TIP;
+                       else
+                               decoder->pkt_state = INTEL_PT_STATE_FUP;
                        err = intel_pt_walk_fup(decoder);
-                       if (err != -EAGAIN) {
-                               if (err)
-                                       return err;
-                               if (no_tip)
-                                       decoder->pkt_state =
-                                               INTEL_PT_STATE_FUP_NO_TIP;
-                               else
-                                       decoder->pkt_state = INTEL_PT_STATE_FUP;
-                               return 0;
-                       }
+                       if (err != -EAGAIN)
+                               return err;
                        if (no_tip) {
                                no_tip = false;
                                break;
                        err = intel_pt_walk_tip(decoder);
                        break;
                case INTEL_PT_STATE_FUP:
-                       decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
                        err = intel_pt_walk_fup(decoder);
                        if (err == -EAGAIN)
                                err = intel_pt_walk_fup_tip(decoder);
-                       else if (!err)
-                               decoder->pkt_state = INTEL_PT_STATE_FUP;
                        break;
                case INTEL_PT_STATE_FUP_NO_TIP:
-                       decoder->pkt_state = INTEL_PT_STATE_IN_SYNC;
                        err = intel_pt_walk_fup(decoder);
                        if (err == -EAGAIN)
                                err = intel_pt_walk_trace(decoder);