WARN_ON(!etr_buf->ops || !etr_buf->ops->sync);
 
        etr_buf->ops->sync(etr_buf, rrp, rwp);
-
-       /* Insert barrier packets at the beginning, if there was an overflow */
-       if (etr_buf->full)
-               tmc_etr_buf_insert_barrier_packet(etr_buf, etr_buf->offset);
 }
 
 static void __tmc_etr_enable_hw(struct tmc_drvdata *drvdata)
                drvdata->sysfs_buf = NULL;
        } else {
                tmc_sync_etr_buf(drvdata);
+               /*
+                * Insert barrier packets at the beginning, if there was
+                * an overflow.
+                */
+               if (etr_buf->full)
+                       tmc_etr_buf_insert_barrier_packet(etr_buf,
+                                                         etr_buf->offset);
        }
 }
 
        CS_LOCK(drvdata->base);
        spin_unlock_irqrestore(&drvdata->spinlock, flags);
 
+       lost = etr_buf->full;
        size = etr_buf->len;
        if (!etr_perf->snapshot && size > handle->size) {
                size = handle->size;
                lost = true;
        }
+
+       /* Insert barrier packets at the beginning, if there was an overflow */
+       if (lost)
+               tmc_etr_buf_insert_barrier_packet(etr_buf, etr_buf->offset);
        tmc_etr_sync_perf_buffer(etr_perf, size);
 
        /*
         */
        if (etr_perf->snapshot)
                handle->head += size;
-
-       lost |= etr_buf->full;
 out:
        /*
         * Don't set the TRUNCATED flag in snapshot mode because 1) the