Skip to content

Commit bafc628

Browse files
committed
drm/bridge: samsung-dsim: use while loop in samsung_dsim_transfer_start
Turn the open-coded goto-again construct into a while loop, to make samsung_dsim_transfer_start() a bit shorter and easier to read. Hold the spinlock when looping back around and avoid the duplicated list_empty() check. Reviewed-by: Alexander Stein <alexander.stein@ew.tq-group.com> Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de> Link: https://lore.kernel.org/r/20250527-samsung-dsim-v1-1-5be520d84fbb@pengutronix.de Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
1 parent 017a6f7 commit bafc628

1 file changed

Lines changed: 16 additions & 25 deletions

File tree

drivers/gpu/drm/bridge/samsung-dsim.c

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1236,43 +1236,34 @@ static void samsung_dsim_transfer_start(struct samsung_dsim *dsi)
12361236
{
12371237
unsigned long flags;
12381238
struct samsung_dsim_transfer *xfer;
1239-
bool start = false;
12401239

1241-
again:
12421240
spin_lock_irqsave(&dsi->transfer_lock, flags);
12431241

1244-
if (list_empty(&dsi->transfer_list)) {
1245-
spin_unlock_irqrestore(&dsi->transfer_lock, flags);
1246-
return;
1247-
}
1242+
while (!list_empty(&dsi->transfer_list)) {
1243+
xfer = list_first_entry(&dsi->transfer_list,
1244+
struct samsung_dsim_transfer, list);
12481245

1249-
xfer = list_first_entry(&dsi->transfer_list,
1250-
struct samsung_dsim_transfer, list);
1251-
1252-
spin_unlock_irqrestore(&dsi->transfer_lock, flags);
1246+
spin_unlock_irqrestore(&dsi->transfer_lock, flags);
12531247

1254-
if (xfer->packet.payload_length &&
1255-
xfer->tx_done == xfer->packet.payload_length)
1256-
/* waiting for RX */
1257-
return;
1248+
if (xfer->packet.payload_length &&
1249+
xfer->tx_done == xfer->packet.payload_length)
1250+
/* waiting for RX */
1251+
return;
12581252

1259-
samsung_dsim_send_to_fifo(dsi, xfer);
1253+
samsung_dsim_send_to_fifo(dsi, xfer);
12601254

1261-
if (xfer->packet.payload_length || xfer->rx_len)
1262-
return;
1255+
if (xfer->packet.payload_length || xfer->rx_len)
1256+
return;
12631257

1264-
xfer->result = 0;
1265-
complete(&xfer->completed);
1258+
xfer->result = 0;
1259+
complete(&xfer->completed);
12661260

1267-
spin_lock_irqsave(&dsi->transfer_lock, flags);
1261+
spin_lock_irqsave(&dsi->transfer_lock, flags);
12681262

1269-
list_del_init(&xfer->list);
1270-
start = !list_empty(&dsi->transfer_list);
1263+
list_del_init(&xfer->list);
1264+
}
12711265

12721266
spin_unlock_irqrestore(&dsi->transfer_lock, flags);
1273-
1274-
if (start)
1275-
goto again;
12761267
}
12771268

12781269
static bool samsung_dsim_transfer_finish(struct samsung_dsim *dsi)

0 commit comments

Comments
 (0)