Commit bafc6286 authored by Philipp Zabel's avatar Philipp Zabel
Browse files

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: default avatarAlexander Stein <alexander.stein@ew.tq-group.com>
Reviewed-by: default avatarFrieder Schrempf <frieder.schrempf@kontron.de>
Link: https://lore.kernel.org/r/20250527-samsung-dsim-v1-1-5be520d84fbb@pengutronix.de


Signed-off-by: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
parent 017a6f7e
Loading
Loading
Loading
Loading
+16 −25
Original line number Diff line number Diff line
@@ -1236,16 +1236,10 @@ static void samsung_dsim_transfer_start(struct samsung_dsim *dsi)
{
	unsigned long flags;
	struct samsung_dsim_transfer *xfer;
	bool start = false;

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

	if (list_empty(&dsi->transfer_list)) {
		spin_unlock_irqrestore(&dsi->transfer_lock, flags);
		return;
	}

	while (!list_empty(&dsi->transfer_list)) {
		xfer = list_first_entry(&dsi->transfer_list,
					struct samsung_dsim_transfer, list);

@@ -1267,12 +1261,9 @@ static void samsung_dsim_transfer_start(struct samsung_dsim *dsi)
		spin_lock_irqsave(&dsi->transfer_lock, flags);

		list_del_init(&xfer->list);
	start = !list_empty(&dsi->transfer_list);
	}

	spin_unlock_irqrestore(&dsi->transfer_lock, flags);

	if (start)
		goto again;
}

static bool samsung_dsim_transfer_finish(struct samsung_dsim *dsi)