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,
|
||||
};
|
||||
|
||||
/* 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)
|
||||
{
|
||||
char *p, *endp, *dev;
|
||||
@ -183,43 +223,9 @@ int linux_spi_init(void)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Read max buffer size from sysfs, or use page size as fallback. */
|
||||
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();
|
||||
}
|
||||
|
||||
max_kernel_buf_size = get_max_kernel_buf_size();
|
||||
msg_pdbg("%s: max_kernel_buf_size: %zu\n", __func__, max_kernel_buf_size);
|
||||
|
||||
register_spi_master(&spi_master_linux);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user