The sparse image format is defined in little endian, not in network
order, so we should not invoke ntohs()/ntohl() when reading them.
Further, the various constants are defined in host order, so we
shouldn't ntohs()/ntohl() them either.
This also implies that the code only works for little endian host
systems today.
Drop all the ntohs()/ntohl() conversions for now, to clean out the
incorrect conversions. The task to convert from little to host is left
as an exercise for the future.
While rewriting sparse_chunk_header_parse() the large if statement is
swapped for a select, to improve readability with a single successful
exit at the end and scattered exit returns throughout.
Fixes: 02c008adfd ("add support sparse attribute")
Signed-off-by: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
The unsparsed chunk size is expressed in units of blk_sz. For RAW chunks
this is then limited to (just under) 32-bits due to the total_sz
(sparsed chunk size), but FILL and DONT_CARE can be much bigger.
But doing the size calculation on the 32-bit integers overflows and any
upper bits are lost, and the unsparsed result is wrong. So, switch this
to 64-bit instead.
It's unclear what happens if we pass a larger num_sectors to the
programmer, so this limitation is left, and checked for.
Fixes: 02c008adfd ("add support sparse attribute")
Signed-off-by: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
When the sparse image parser finds a RAW chunk, it queries the current
file offset in the sparse image and store this for the programming
phase. But the offset is stored in a 32-bit unsigned int, so when the
sparse image passes 4GB the program entries start to refer to the wrong
data.
Split the fill_value and offset into dedicated fields and give them both
their specific type, to avoid any confusion related to the size of these
data types.
Fixes: 02c008adfd ("add support sparse attribute")
Signed-off-by: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
Fix memory leak, buffer have to be freed if file is not opened
successfully in sahara_debug64_one().
Signed-off-by: Igor Opaniuk <igor.opaniuk@oss.qualcomm.com>
`check` target runs checkpatch.pl on all sources files.
`check-cached` target runs checkpatch.pl on staged changes.
Signed-off-by: Igor Opaniuk <igor.opaniuk@oss.qualcomm.com>
WARNING: Comparisons should place the constant on the right side of the test
if (NULL != xmlGetProp(node, (xmlChar *)"last_sector")) {
Signed-off-by: Igor Opaniuk <igor.opaniuk@oss.qualcomm.com>
CHECK: Macro argument reuse 'x' - possible side-effects?
+#define MIN(x, y) ((x) < (y) ? (x) : (y))
CHECK: Macro argument reuse 'y' - possible side-effects?
+#define MIN(x, y) ((x) < (y) ? (x) : (y))
CHECK: line length of 167 exceeds 120 columns
+static const char * const progress_hashes = "########################################################################################################################";
CHECK: line length of 167 exceeds 120 columns
+static const char * const progress_dashes = "------------------------------------------------------------------------------------------------------------------------";
WARNING: please, no spaces at the start of a line
+ CONSOLE_SCREEN_BUFFER_INFO csbi;$
WARNING: please, no spaces at the start of a line
+ HANDLE stdoutHandle = GetStdHandle(STD_OUTPUT_HANDLE);$
WARNING: please, no spaces at the start of a line
+ if (GetConsoleScreenBufferInfo(stdoutHandle, &csbi)) {$
WARNING: suspect code indent for conditional statements (4, 16)
+ if (GetConsoleScreenBufferInfo(stdoutHandle, &csbi)) {
+ columns = csbi.srWindow.Right - csbi.srWindow.Left + 1;
WARNING: please, no spaces at the start of a line
+ }$
Signed-off-by: Igor Opaniuk <igor.opaniuk@oss.qualcomm.com>
Address these issues reported by checkpatch.pl script:
WARNING: void function return statements are not generally useful
+ return;
+}
WARNING: void function return statements are not generally useful
+ return;
+}
Signed-off-by: Igor Opaniuk <igor.opaniuk@oss.qualcomm.com>
Address these issues reported by checkpatch.pl:
CHECK: Alignment should match open parenthesis
+int ufs_provisioning_execute(struct qdl_device *qdl,
+ int (*apply_ufs_common)(struct qdl_device *qdl, struct ufs_common *ufs),
CHECK: line length of 133 exceeds 120 columns
+ result->bWriteBoosterBufferPreserveUserSpaceEn = !!attr_as_unsigned(node, "bWriteBoosterBufferPreserveUserSpaceEn", &errors);
CHECK: Please don't use multiple blank lines
Signed-off-by: Igor Opaniuk <igor.opaniuk@oss.qualcomm.com>