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

Commit 6c689886 authored by Baolin Wang's avatar Baolin Wang Committed by Ulf Hansson
Browse files

mmc: core: Optimize the mmc erase size alignment



In most cases the 'card->erase_size' is power of 2, then the round_up/down()
function is more efficient than '%' operation when the 'card->erase_size' is
power of 2.

Signed-off-by: default avatarBaolin Wang <baolin.wang@linaro.org>
Tested-by: default avatarShawn Lin <shawn.lin@rock-chips.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 71085123
Loading
Loading
Loading
Loading
+26 −8
Original line number Diff line number Diff line
@@ -2212,6 +2212,23 @@ static unsigned int mmc_align_erase_size(struct mmc_card *card,
{
	unsigned int from_new = *from, nr_new = nr, rem;

	/*
	 * When the 'card->erase_size' is power of 2, we can use round_up/down()
	 * to align the erase size efficiently.
	 */
	if (is_power_of_2(card->erase_size)) {
		unsigned int temp = from_new;

		from_new = round_up(temp, card->erase_size);
		rem = from_new - temp;

		if (nr_new > rem)
			nr_new -= rem;
		else
			return 0;

		nr_new = round_down(nr_new, card->erase_size);
	} else {
		rem = from_new % card->erase_size;
		if (rem) {
			rem = card->erase_size - rem;
@@ -2225,6 +2242,7 @@ static unsigned int mmc_align_erase_size(struct mmc_card *card,
		rem = nr_new % card->erase_size;
		if (rem)
			nr_new -= rem;
	}

	if (nr_new == 0)
		return 0;