mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-27 23:22:37 +02:00
linux_spi.c: Extract get_max_kernel_buf_size() as a function
To get max_kernel_buf_size is a piece of logic on its own, it opens resources and closes resources, also has some local variables only for this task. Extracting get_max_kernel_buf_size() as a separate function simplifies init flow and allows to remove global state from linux_spi (see next patches in this chain). TEST=builds BUG=b:140394053 Change-Id: I4b8c5775fb8f4b0dff702fcc0fb258221254c659 Signed-off-by: Anastasia Klimchuk <aklm@chromium.org> Reviewed-on: https://review.coreboot.org/c/flashrom/+/52283 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Edward O'Callaghan <quasisec@chromium.org>
This commit is contained in:
parent
5f1524b22f
commit
f227cd3760
78
linux_spi.c
78
linux_spi.c
@ -119,6 +119,46 @@ static const struct spi_master spi_master_linux = {
|
|||||||
.write_aai = default_spi_write_aai,
|
.write_aai = default_spi_write_aai,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Read max buffer size from sysfs, or use page size as fallback. */
|
||||||
|
static size_t get_max_kernel_buf_size() {
|
||||||
|
size_t result = 0;
|
||||||
|
FILE *fp;
|
||||||
|
fp = fopen(BUF_SIZE_FROM_SYSFS, "r");
|
||||||
|
if (!fp) {
|
||||||
|
msg_pwarn("Cannot open %s: %s.\n", BUF_SIZE_FROM_SYSFS, strerror(errno));
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
char buf[10];
|
||||||
|
if (!fgets(buf, sizeof(buf), fp)) {
|
||||||
|
if (feof(fp))
|
||||||
|
msg_pwarn("Cannot read %s: file is empty.\n", BUF_SIZE_FROM_SYSFS);
|
||||||
|
else
|
||||||
|
msg_pwarn("Cannot read %s: %s.\n", BUF_SIZE_FROM_SYSFS, strerror(errno));
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
long int tmp;
|
||||||
|
errno = 0;
|
||||||
|
tmp = strtol(buf, NULL, 0);
|
||||||
|
if ((tmp < 0) || errno) {
|
||||||
|
msg_pwarn("Buffer size %ld from %s seems wrong.\n", tmp, BUF_SIZE_FROM_SYSFS);
|
||||||
|
} else {
|
||||||
|
msg_pdbg("%s: Using value from %s as max buffer size.\n", __func__, BUF_SIZE_FROM_SYSFS);
|
||||||
|
result = (size_t)tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
|
if (fp)
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
if (!result) {
|
||||||
|
msg_pdbg("%s: Using page size as max buffer size.\n", __func__);
|
||||||
|
result = (size_t)getpagesize();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
int linux_spi_init(void)
|
int linux_spi_init(void)
|
||||||
{
|
{
|
||||||
char *p, *endp, *dev;
|
char *p, *endp, *dev;
|
||||||
@ -183,43 +223,9 @@ int linux_spi_init(void)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read max buffer size from sysfs, or use page size as fallback. */
|
max_kernel_buf_size = get_max_kernel_buf_size();
|
||||||
FILE *fp;
|
|
||||||
fp = fopen(BUF_SIZE_FROM_SYSFS, "r");
|
|
||||||
if (!fp) {
|
|
||||||
msg_pwarn("Cannot open %s: %s.\n", BUF_SIZE_FROM_SYSFS, strerror(errno));
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
char buf[10];
|
|
||||||
if (!fgets(buf, sizeof(buf), fp)) {
|
|
||||||
if (feof(fp))
|
|
||||||
msg_pwarn("Cannot read %s: file is empty.\n", BUF_SIZE_FROM_SYSFS);
|
|
||||||
else
|
|
||||||
msg_pwarn("Cannot read %s: %s.\n", BUF_SIZE_FROM_SYSFS, strerror(errno));
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
long int tmp;
|
|
||||||
errno = 0;
|
|
||||||
tmp = strtol(buf, NULL, 0);
|
|
||||||
if ((tmp < 0) || errno) {
|
|
||||||
msg_pwarn("Buffer size %ld from %s seems wrong.\n", tmp, BUF_SIZE_FROM_SYSFS);
|
|
||||||
} else {
|
|
||||||
msg_pdbg("%s: Using value from %s as max buffer size.\n", __func__, BUF_SIZE_FROM_SYSFS);
|
|
||||||
max_kernel_buf_size = (size_t)tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
out:
|
|
||||||
if (fp)
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
if (!max_kernel_buf_size) {
|
|
||||||
msg_pdbg("%s: Using page size as max buffer size.\n", __func__);
|
|
||||||
max_kernel_buf_size = (size_t)getpagesize();
|
|
||||||
}
|
|
||||||
|
|
||||||
msg_pdbg("%s: max_kernel_buf_size: %zu\n", __func__, max_kernel_buf_size);
|
msg_pdbg("%s: max_kernel_buf_size: %zu\n", __func__, max_kernel_buf_size);
|
||||||
|
|
||||||
register_spi_master(&spi_master_linux);
|
register_spi_master(&spi_master_linux);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user