Fix most sparse warnings
Subsystems (6)
cover Fix most sparse warnings
There are still some sparse warnings. None of them are currently real bug, but they make sparse to be confused, and namespaces are not properly used. That could hide bug on some future change.
So, fix them. After this series, there are just 2 sparse warnings:
drivers/media/platform/timblogiw.c:562:22: warning: context imbalance in 'buffer_queue' - unexpected unlock drivers/media/platform/soc_camera/rcar_vin.c:835:25: warning: context imbalance in 'rcar_vin_wait_stop_streaming' - unexpected unlock
Both are OK, but I dunno how to shut up sparse to report them. If anyone has an idea, feel free to send a patch ;)
Mauro Carvalho Chehab (7):
[media] media-entity.c: get rid of var length arrays [media] s5c73m3: fix a sparse warning
[media] netup_unidvb: remove most of the sparse warnings [media] netup_unidvb_ci: Fix dereference of noderef expression [media] mipi-csis: make sparse happy
[media] c8sectpfe: fix namespace on memcpy/memset [media] rcar_jpu: Fix namespace for two __be16 vars
drivers/media/i2c/s5c73m3/s5c73m3-core.c | 2 +- drivers/media/media-entity.c | 4 ++-- drivers/media/pci/netup_unidvb/netup_unidvb.h | 4 ++-- drivers/media/pci/netup_unidvb/netup_unidvb_ci.c | 10 +++++----- drivers/media/pci/netup_unidvb/netup_unidvb_core.c | 14 ++++++-------- drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c | 2 +- drivers/media/pci/netup_unidvb/netup_unidvb_spi.c | 4 ++-- drivers/media/platform/exynos4-is/mipi-csis.c | 3 ++- drivers/media/platform/rcar_jpu.c | 4 ++-- drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c | 4 ++-- include/media/media-entity.h | 7 +++++++ 11 files changed, 32 insertions(+), 26 deletions(-)
Signature · 1 line
2.4.3
PATCH 1/7 media-entity.c: get rid of var length arrays
Fix those sparse warnings:
drivers/media/media-entity.c:238:17: warning: Variable length array is used. drivers/media/media-entity.c:239:17: warning: Variable length array is used.
That allows sparse and other code check tools to verify if the function is using more stack than allowed.
It also solves a bad Kernel pratice of using var length arrays at the stack.
drivers/media/media-entity.c +2 -2
@@ -235,8 +235,8 @@ __must_check int media_entity_pipeline_start(struct media_entity *entity,media_entity_graph_walk_start (&graph, entity);while ((entity =media_entity_graph_walk_next (&graph))) { -DECLARE_BITMAP (active, entity->num_pads); -DECLARE_BITMAP (has_no_links, entity->num_pads); +DECLARE_BITMAP (active,MEDIA_ENTITY_MAX_PADS ); +DECLARE_BITMAP (has_no_links,MEDIA_ENTITY_MAX_PADS );unsigned int i; entity->stream_count++;
include/media/media-entity.h +7 -0
@@ -116,6 +116,13 @@ static inline u32 media_entity_subtype(struct media_entity *entity)#define MEDIA_ENTITY_ENUM_MAX_DEPTH 16#define MEDIA_ENTITY_ENUM_MAX_ID 64 +/* +* The number of pads can't be bigger than the number of entities, +* as the worse-case scenario is to have one entity linked up to +* MEDIA_ENTITY_ENUM_MAX_ID - 1 entities. +*/ +#define MEDIA_ENTITY_MAX_PADS (MEDIA_ENTITY_ENUM_MAX_ID - 1) +struct media_entity_graph {struct {struct media_entity *entity;
Signature · 1 line
2.4.3
PATCH 2/7 s5c73m3: fix a sparse warning
In reply to Mauro Carvalho Chehabdrivers/media/i2c/s5c73m3/s5c73m3-core.c:170:39: warning: incorrect type in argument 1 (different base types)drivers/media/i2c/s5c73m3/s5c73m3-core.c:170:39: expected restricted __be16 const [usertype] *pdrivers/media/i2c/s5c73m3/s5c73m3-core.c:170:39: got unsigned short [usertype] *<noident>
drivers/media/i2c/s5c73m3/s5c73m3-core.c +1 -1
@@ -167,7 +167,7 @@ static int s5c73m3_i2c_read(struct i2c_client *client, u16 addr, u16 *data)*/ ret =i2c_transfer (client->adapter, msg,2 );if (ret ==2 ) { - *data =be16_to_cpup ((u16 *)rbuf); + *data =be16_to_cpup ((__be16 *)rbuf);v4l2_dbg (4 , s5c73m3_dbg, client,"%s: addr: 0x%04x, data: 0x%04x\n" , __func__, addr, *data);
Signature · 1 line
2.4.3
PATCH 3/7 netup_unidvb: remove most of the sparse warnings
In reply to Mauro Carvalho ChehabThere is a mess at the namespace on netup_unidvb:
drivers/media/pci/netup_unidvb/netup_unidvb_core.c:192:41: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_core.c:192:41: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_core.c:192:41: got restricted __le32 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_core.c:194:26: warning: cast removes address space of expression drivers/media/pci/netup_unidvb/netup_unidvb_core.c:194:26: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_core.c:194:26: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_core.c:194:26: got unsigned short [usertype] *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_core.c:196:41: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_core.c:196:41: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_core.c:196:41: got restricted __le32 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_core.c:198:26: warning: cast removes address space of expression drivers/media/pci/netup_unidvb/netup_unidvb_core.c:198:26: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_core.c:198:26: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_core.c:198:26: got unsigned short [usertype] *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_core.c:210:37: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_core.c:210:37: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_core.c:210:37: got restricted __le32 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_core.c:211:32: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_core.c:211:32: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_core.c:211:32: got restricted __le32 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_core.c:213:33: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_core.c:213:33: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_core.c:213:33: got restricted __le32 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_core.c:528:49: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_core.c:528:49: expected void const volatile [noderef] <asn:2>*srcdrivers/media/pci/netup_unidvb/netup_unidvb_core.c:528:49: got unsigned char [usertype] *drivers/media/pci/netup_unidvb/netup_unidvb_core.c:541:49: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_core.c:541:49: expected void const volatile [noderef] <asn:2>*srcdrivers/media/pci/netup_unidvb/netup_unidvb_core.c:541:49: got unsigned char [usertype] *drivers/media/pci/netup_unidvb/netup_unidvb_core.c:647:22: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_core.c:647:22: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_core.c:647:22: got unsigned char [usertype] *addr_virtdrivers/media/pci/netup_unidvb/netup_unidvb_core.c:650:22: warning: cast removes address space of expression drivers/media/pci/netup_unidvb/netup_unidvb_core.c:654:59: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_core.c:654:59: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_core.c:654:59: got restricted __le32 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_core.c:655:56: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_core.c:655:56: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_core.c:655:56: got restricted __le32 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_core.c:656:23: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_core.c:656:23: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_core.c:656:23: got restricted __le32 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_core.c:658:31: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_core.c:658:31: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_core.c:658:31: got restricted __le32 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_core.c:660:33: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_core.c:660:33: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_core.c:660:33: got restricted __le32 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:81:25: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:81:25: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:81:25: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:82:38: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:82:38: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:82:38: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:104:33: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:104:33: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:104:33: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:105:47: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:105:47: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:105:47: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:112:33: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:112:33: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:112:33: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:113:47: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:113:47: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:113:47: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:132:36: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:132:36: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:132:36: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:133:32: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:133:32: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:133:32: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:134:32: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:134:32: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:134:32: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:135:32: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:135:32: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:135:32: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:136:27: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:136:27: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:136:27: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:137:27: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:137:27: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:137:27: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:144:28: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:144:28: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:144:28: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:150:34: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:150:34: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:150:34: got unsigned char *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:157:34: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:157:34: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:157:34: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:158:29: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:158:29: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:158:29: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:165:35: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:165:35: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:165:35: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:170:34: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:170:34: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:170:34: got unsigned char *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:181:34: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:181:34: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:181:34: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:182:29: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:182:29: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:182:29: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:189:29: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:189:29: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:189:29: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:191:37: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:191:37: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:191:37: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:192:35: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:192:35: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:192:35: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:194:21: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:194:21: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:194:21: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:195:9: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:195:9: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:195:9: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:195:9: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:195:9: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:195:9: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:195:9: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:195:9: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:195:9: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:205:47: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:205:47: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:205:47: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:206:29: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:206:29: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:206:29: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:272:53: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:272:53: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:272:53: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:274:53: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:274:53: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:274:53: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c:323:22: warning: cast removes address space of expression drivers/media/pci/netup_unidvb/netup_unidvb_ci.c:229:38: warning: cast removes address space of expression drivers/media/pci/netup_unidvb/netup_unidvb_ci.c:229:38: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_ci.c:229:38: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_ci.c:229:38: got unsigned short [usertype] *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:89:25: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:89:25: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_spi.c:89:25: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:96:46: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:96:46: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_spi.c:96:46: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:97:25: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:97:25: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_spi.c:97:25: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:98:49: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:98:49: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_spi.c:98:49: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:116:44: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:116:44: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_spi.c:116:44: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:117:23: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:117:23: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_spi.c:117:23: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:132:48: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:132:48: expected void volatile [noderef] <asn:2>*dstdrivers/media/pci/netup_unidvb/netup_unidvb_spi.c:132:48: got unsigned char *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:136:46: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:136:46: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_spi.c:136:46: got unsigned char *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:144:37: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:144:37: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_spi.c:144:37: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:145:25: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:145:25: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_spi.c:145:25: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:154:52: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:154:52: expected void const volatile [noderef] <asn:2>*srcdrivers/media/pci/netup_unidvb/netup_unidvb_spi.c:154:52: got unsigned char *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:205:23: warning: cast removes address space of expression drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:206:24: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:206:24: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_spi.c:206:24: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:243:25: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:243:25: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_spi.c:243:25: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:244:46: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:244:46: expected void volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_spi.c:244:46: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:245:25: warning: incorrect type in argument 1 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:245:25: expected void const volatile [noderef] <asn:2>*addrdrivers/media/pci/netup_unidvb/netup_unidvb_spi.c:245:25: got restricted __le16 *<noident>drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:246:49: warning: incorrect type in argument 2 (different address spaces)drivers/media/pci/netup_unidvb/netup_unidvb_spi.c:246:49: expected void volatile [noderef] <asn:2>*addr
Fix the above sparse warnings.
drivers/media/pci/netup_unidvb/netup_unidvb.h +2 -2
@@ -54,7 +54,7 @@ struct netup_dma {u8 num;spinlock_t lock;struct netup_unidvb_dev *ndev; -struct netup_dma_regs *regs; +struct netup_dma_regs __iomem *regs;u32 ring_buffer_size;u8 *addr_virt;dma_addr_t addr_phys;
@@ -82,7 +82,7 @@ struct netup_i2c {wait_queue_head_t wq;struct i2c_adapter adap;struct netup_unidvb_dev *dev; -struct netup_i2c_regs *regs; +struct netup_i2c_regs __iomem *regs;struct i2c_msg *msg;enum netup_i2c_state state;u32 xmit_size;
drivers/media/pci/netup_unidvb/netup_unidvb_ci.c +1 -1
@@ -226,7 +226,7 @@ int netup_unidvb_ci_register(struct netup_unidvb_dev *dev, __func__, result);return result; } -writew (NETUP_UNIDVB_IRQ_CI , (u16 *)(dev->bmmio0 +REG_IMASK_SET )); +writew (NETUP_UNIDVB_IRQ_CI , dev->bmmio0 +REG_IMASK_SET );dev_info (&pci_dev->dev,"%s(): CI adapter %d init done\n" , __func__, num);return 0 ;
drivers/media/pci/netup_unidvb/netup_unidvb_core.c +6 -8
@@ -190,12 +190,10 @@ static void netup_unidvb_dma_enable(struct netup_dma *dma, int enable) "%s(): DMA%d enable %d\n", __func__, dma->num, enable);if (enable) {writel (BIT_DMA_RUN , &dma->regs->ctrlstat_set); -writew (irq_mask, - (u16 *)(dma->ndev->bmmio0 +REG_IMASK_SET )); +writew (irq_mask, dma->ndev->bmmio0 +REG_IMASK_SET ); }else {writel (BIT_DMA_RUN , &dma->regs->ctrlstat_clear); -writew (irq_mask, - (u16 *)(dma->ndev->bmmio0 +REG_IMASK_CLEAR )); +writew (irq_mask, dma->ndev->bmmio0 +REG_IMASK_CLEAR ); } }
@@ -525,7 +523,7 @@ static int netup_unidvb_ring_copy(struct netup_dma *dma, ring_bytes = dma->ring_buffer_size - dma->data_offset; copy_bytes = (ring_bytes > buff_bytes) ? buff_bytes : ring_bytes; -memcpy_fromio (p, dma->addr_virt + dma->data_offset, copy_bytes); +memcpy_fromio (p, (u8 __iomem *)(dma->addr_virt + dma->data_offset), copy_bytes); p += copy_bytes; buf->size += copy_bytes; buff_bytes -= copy_bytes;
@@ -538,7 +536,7 @@ static int netup_unidvb_ring_copy(struct netup_dma *dma, ring_bytes = dma->data_size; copy_bytes = (ring_bytes > buff_bytes) ? buff_bytes : ring_bytes; -memcpy_fromio (p, dma->addr_virt + dma->data_offset, copy_bytes); +memcpy_fromio (p, (u8 __iomem *)(dma->addr_virt + dma->data_offset), copy_bytes); buf->size += copy_bytes; dma->data_size -= copy_bytes; dma->data_offset += copy_bytes;
@@ -644,10 +642,10 @@ static int netup_unidvb_dma_init(struct netup_unidvb_dev *ndev, int num) __func__, num, dma->addr_virt, (unsigned long long )dma->addr_phys, dma->ring_buffer_size); -memset_io (dma->addr_virt,0 , dma->ring_buffer_size); +memset_io ((u8 __iomem *)dma->addr_virt,0 , dma->ring_buffer_size); dma->addr_last = dma->addr_phys; dma->high_addr = (u32)(dma->addr_phys &0xC0000000 ); - dma->regs = (struct netup_dma_regs *)(num ==0 ? + dma->regs = (struct netup_dma_regs __iomem *)(num ==0 ? ndev->bmmio0 +NETUP_DMA0_ADDR : ndev->bmmio0 +NETUP_DMA1_ADDR ); writel((NETUP_DMA_BLOCKS_COUNT << 24) |
drivers/media/pci/netup_unidvb/netup_unidvb_i2c.c +1 -1
@@ -320,7 +320,7 @@ static int netup_i2c_init(struct netup_unidvb_dev *ndev, int bus_num) i2c = &ndev->i2c[bus_num];spin_lock_init (&i2c->lock);init_waitqueue_head (&i2c->wq); - i2c->regs = (struct netup_i2c_regs *)(ndev->bmmio0 + + i2c->regs = (struct netup_i2c_regs __iomem *)(ndev->bmmio0 + (bus_num ==0 ?NETUP_I2C_BUS0_ADDR :NETUP_I2C_BUS1_ADDR ));netup_i2c_reset (i2c); i2c->adap = netup_i2c_adapter;
drivers/media/pci/netup_unidvb/netup_unidvb_spi.c +2 -2
@@ -45,7 +45,7 @@ struct netup_spi_regs {struct netup_spi {struct device *dev;struct spi_master *master; -struct netup_spi_regs *regs; +struct netup_spi_regs __iomem *regs;u8 __iomem *mmio;spinlock_t lock;wait_queue_head_t waitq;
@@ -202,7 +202,7 @@ int netup_spi_init(struct netup_unidvb_dev *ndev)spin_lock_init (&nspi->lock);init_waitqueue_head (&nspi->waitq); nspi->master = master; - nspi->regs = (struct netup_spi_regs *)(ndev->bmmio0 +0x4000 ); + nspi->regs = (struct netup_spi_regs __iomem *)(ndev->bmmio0 +0x4000 );writew (2 , &nspi->regs->clock_divider);writew (NETUP_UNIDVB_IRQ_SPI , ndev->bmmio0 +REG_IMASK_SET ); ndev->spi = nspi;
Signature · 1 line
2.4.3
PATCH 4/7 netup_unidvb_ci: Fix dereference of noderef expression
In reply to Mauro Carvalho ChehabFix those sparse warnings:
drivers/media/pci/netup_unidvb/netup_unidvb_ci.c:150:40: warning: dereference of noderef expression drivers/media/pci/netup_unidvb/netup_unidvb_ci.c:165:31: warning: dereference of noderef expression drivers/media/pci/netup_unidvb/netup_unidvb_ci.c:174:36: warning: dereference of noderef expression drivers/media/pci/netup_unidvb/netup_unidvb_ci.c:189:27: warning: dereference of noderef expression
drivers/media/pci/netup_unidvb/netup_unidvb_ci.c +4 -4
@@ -147,7 +147,7 @@ static int netup_unidvb_ci_read_attribute_mem(struct dvb_ca_en50221 *en50221, {struct netup_ci_state *state = en50221->data;struct netup_unidvb_dev *dev = state->dev; -u8 val = state->membase8_config[addr]; +u8 val = *((u8 __force *)state->membase8_io + addr);dev_dbg (&dev->pci_dev->dev,"%s(): addr=0x%x val=0x%x\n" , __func__, addr, val);
@@ -162,7 +162,7 @@ static int netup_unidvb_ci_write_attribute_mem(struct dvb_ca_en50221 *en50221,dev_dbg (&dev->pci_dev->dev,"%s(): addr=0x%x data=0x%x\n" , __func__, addr, data); - state->membase8_config[addr] = data; + *((u8 __force *)state->membase8_io + addr) = data;return 0 ; }
@@ -171,7 +171,7 @@ static int netup_unidvb_ci_read_cam_ctl(struct dvb_ca_en50221 *en50221, {struct netup_ci_state *state = en50221->data;struct netup_unidvb_dev *dev = state->dev; -u8 val = state->membase8_io[addr]; +u8 val = *((u8 __force *)state->membase8_io + addr);dev_dbg (&dev->pci_dev->dev,"%s(): addr=0x%x val=0x%x\n" , __func__, addr, val);
@@ -186,7 +186,7 @@ static int netup_unidvb_ci_write_cam_ctl(struct dvb_ca_en50221 *en50221,dev_dbg (&dev->pci_dev->dev,"%s(): addr=0x%x data=0x%x\n" , __func__, addr, data); - state->membase8_io[addr] = data; + *((u8 __force *)state->membase8_io + addr) = data;return 0 ; }
Signature · 1 line
2.4.3
PATCH 5/7 mipi-csis: make sparse happy
In reply to Mauro Carvalho ChehabFix the namespace issue that causes this warning:
drivers/media/platform/exynos4-is/mipi-csis.c:709:17: warning: incorrect type in argument 2 (different address spaces)drivers/media/platform/exynos4-is/mipi-csis.c:709:17: expected void const *<noident>drivers/media/platform/exynos4-is/mipi-csis.c:709:17: got void [noderef] <asn:2>*
drivers/media/platform/exynos4-is/mipi-csis.c +2 -1
@@ -706,7 +706,8 @@ static irqreturn_t s5pcsis_irq_handler(int irq, void *dev_id)else offset =S5PCSIS_PKTDATA_ODD ; -memcpy (pktbuf->data, state->regs + offset, pktbuf->len); +memcpy (pktbuf->data, (u8 __force *)state->regs + offset, + pktbuf->len); pktbuf->data =NULL ;rmb (); }
Signature · 1 line
2.4.3
PATCH 5/7 mipi-csis: make sparse happy
drivers/media/platform/exynos4-is/mipi-csis.c static irqreturn_t s5pcsis_irq_handler(int irq, void *dev_id) · line 712
Quoted 13 lines · On Thursday 01 October 2015 19:17:27 Mauro Carvalho Chehab wrote:
drivers/media/platform/exynos4-is/mipi-csis.c +2
-1@@ -706,7 +706,8 @@ static irqreturn_t s5pcsis_irq_handler(int irq, void *dev_id)else offset =S5PCSIS_PKTDATA_ODD ; -memcpy (pktbuf->data, state->regs + offset, pktbuf->len); +memcpy (pktbuf->data, (u8 __force *)state->regs + offset, + pktbuf->len); pktbuf->data =NULL ;
I think this is what memcpy_toio() is meant for.
Arnd
Sylwester Nawrocki
maintainerPATCH 5/7 mipi-csis: make sparse happy
Quoted 9 lines · Arnd Bergmann
Quoted 8 lines · On Thursday 01 October 2015 19:17:27 Mauro Carvalho Chehab wrote:
Quoted 8 lines
drivers/media/platform/exynos4-is/mipi-csis.c +0
-0@@ -706,7 +706,8 @@ static irqreturn_t s5pcsis_irq_handler(int irq, void *dev_id)else offset =S5PCSIS_PKTDATA_ODD ;
Quoted 7 lines
Quoted 5 lines
drivers/media/platform/exynos4-is/mipi-csis.c static irqreturn_t s5pcsis_irq_handler(int irq, void *dev_id)
Quoted 5 lines
drivers/media/platform/exynos4-is/mipi-csis.c +2
-1-memcpy (pktbuf->data, state->regs + offset, pktbuf->len); +memcpy (pktbuf->data, (u8 __force *)state->regs + offset, + pktbuf->len); pktbuf->data =NULL ;I think this is what
memcpy_toio()is meant for.
Exactly memcpy_fromio(). But it's implementation is inefficient on ARCH=arm, memcpy_fromio() will be translated to a loop of readb(), only if an arm sub-architecture provides a processor instruction to access memory by byte. Each readb() also involves a memory barrier. That's all what we wanted to avoid. AFAIR using memcpy_fromio() was causing increase of the copy operation several times comparing to memcpy(). On arm64 it looks better, but this driver is currently used only on arm32.
I would prefer to add (void __force *) instead:
memcpy(pktbuf->data, (void __force *)state->regs + offset, pktbuf->len);
Alternatively, the memset could just be replaced by a loop of u32 reads - __raw_readl();
--
Thanks,
Sylwester
PATCH 5/7 mipi-csis: make sparse happy
Quoted 27 lines · On Monday 05 October 2015 12:24:40 Sylwester Nawrocki wrote:
Quoted 9 lines · Arnd Bergmann
Quoted 8 lines · On Thursday 01 October 2015 19:17:27 Mauro Carvalho Chehab wrote:
Quoted 8 lines
drivers/media/platform/exynos4-is/mipi-csis.c +0
-0@@ -706,7 +706,8 @@ static irqreturn_t s5pcsis_irq_handler(int irq, void *dev_id)else offset =S5PCSIS_PKTDATA_ODD ;Quoted 7 lines
Quoted 5 lines
drivers/media/platform/exynos4-is/mipi-csis.c static irqreturn_t s5pcsis_irq_handler(int irq, void *dev_id)
Quoted 5 lines
drivers/media/platform/exynos4-is/mipi-csis.c +2
-1-memcpy (pktbuf->data, state->regs + offset, pktbuf->len); +memcpy (pktbuf->data, (u8 __force *)state->regs + offset, + pktbuf->len); pktbuf->data =NULL ;I think this is what
memcpy_toio()is meant for.Exactly
memcpy_fromio(). But it's implementation is inefficient on ARCH=arm,memcpy_fromio()will be translated to a loop ofreadb(), only if an arm sub-architecture provides a processor instruction to access memory by byte. Eachreadb()also involves a memory barrier. That's all what we wanted to avoid. AFAIR usingmemcpy_fromio()was causing increase of the copy operation several times comparing tomemcpy(). On arm64 it looks better, but this driver is currently used only on arm32.
Quoted 6 lines
I would prefer to add (void
__force*) instead:
memcpy(pktbuf->data, (void __force *)state->regs + offset, pktbuf->len);Alternatively, the memset could just be replaced by a loop of u32 reads -
__raw_readl();
You are right for old kernels, but this was fixed in 7ddfe625cb ("ARM:
optimize memset_io()/memcpy_fromio()/memcpy_toio()") at least for little-endian kernels and should be fine now on ARM just like everywhere else.
Arnd
Sylwester Nawrocki
maintainerPATCH 5/7 mipi-csis: make sparse happy
Quoted 32 lines · Arnd Bergmann
Quoted 31 lines · On Monday 05 October 2015 12:24:40 Sylwester Nawrocki wrote:
Quoted 31 lines · Arnd Bergmann
Quoted 9 lines
Quoted 9 lines · On Thursday 01 October 2015 19:17:27 Mauro Carvalho Chehab wrote:
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
drivers/media/platform/exynos4-is/mipi-csis.c +0
-0@@ -706,7 +706,8 @@ static irqreturn_t s5pcsis_irq_handler(int irq, void *dev_id)else offset =S5PCSIS_PKTDATA_ODD ;Quoted 7 lines
Quoted 7 lines
Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
drivers/media/platform/exynos4-is/mipi-csis.c static irqreturn_t s5pcsis_irq_handler(int irq, void *dev_id)
Quoted 5 lines
drivers/media/platform/exynos4-is/mipi-csis.c +2
-1-memcpy (pktbuf->data, state->regs + offset, pktbuf->len); +memcpy (pktbuf->data, (u8 __force *)state->regs + offset, + pktbuf->len); pktbuf->data =NULL ;I think this is what
memcpy_toio()is meant for.Exactly
memcpy_fromio(). But it's implementation is inefficient on ARCH=arm,memcpy_fromio()will be translated to a loop ofreadb(), only if an arm sub-architecture provides a processor instruction to access memory by byte. Eachreadb()also involves a memory barrier. That's all what we wanted to avoid. AFAIR usingmemcpy_fromio()was causing increase of the copy operation several times comparing tomemcpy(). On arm64 it looks better, but this driver is currently used only on arm32.I would prefer to add (void
__force*) instead:
memcpy(pktbuf->data, (void __force *)state->regs + offset, pktbuf->len);
Quoted 7 lines
Quoted 2 lines
Quoted 2 lines
Alternatively, the memset could just be replaced by a loop of u32 reads -
__raw_readl();You are right for old kernels, but this was fixed in
7ddfe625cb("ARM:
optimize memset_io()/memcpy_fromio()/memcpy_toio()") at least for little-endian kernels and should be fine now on ARM just like everywhere else.
Indeed, I had just previously checked it in 4.0 kernel and missed those recent further optimizations. It should be fine to replace memcpy() with memcpy_fromio() then.
--
Thanks,
Sylwester
PATCH 6/7 c8sectpfe: fix namespace on memcpy/memset
In reply to Mauro Carvalho ChehabSolves those sparse warnings:
drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c:1087:9: warning: incorrect type in argument 1 (different address spaces)drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c:1087:9: expected void *<noident>drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c:1087:9: got void [noderef] <asn:2>*<noident>drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c:1090:9: warning: incorrect type in argument 1 (different address spaces)drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c:1090:9: expected void *<noident>drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c:1090:9: got void [noderef] <asn:2>*
drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c +2 -2
@@ -1084,10 +1084,10 @@ static void load_dmem_segment(struct c8sectpfei *fei, Elf32_Phdr *phdr, seg_num, phdr->p_paddr, phdr->p_filesz, dst, phdr->p_memsz); -memcpy ((void __iomem *)dst, (void *)fw->data + phdr->p_offset, +memcpy ((void __force *)dst, (void *)fw->data + phdr->p_offset, phdr->p_filesz); -memset ((void __iomem *)dst + phdr->p_filesz,0 , +memset ((void __force *)dst + phdr->p_filesz,0 , phdr->p_memsz - phdr->p_filesz); }
Signature · 1 line
2.4.3
PATCH 6/7 c8sectpfe: fix namespace on memcpy/memset
drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c static void load_dmem_segment(struct c8sectpfei *fei, Elf32_Phdr *phdr, · line 1093
Quoted 13 lines · On Thursday 01 October 2015 19:17:28 Mauro Carvalho Chehab wrote:
drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c +2
-2@@ -1084,10 +1084,10 @@ static void load_dmem_segment(struct c8sectpfei *fei, Elf32_Phdr *phdr, seg_num, phdr->p_paddr, phdr->p_filesz, dst, phdr->p_memsz); -memcpy ((void __iomem *)dst, (void *)fw->data + phdr->p_offset, +memcpy ((void __force *)dst, (void *)fw->data + phdr->p_offset, phdr->p_filesz); -memset ((void __iomem *)dst + phdr->p_filesz,0 , +memset ((void __force *)dst + phdr->p_filesz,0 , phdr->p_memsz - phdr->p_filesz); }
Same here: this should really use memcpy_toio() for the first one, though it seems we don't have a corresponding memset_io().
Arnd
PATCH 7/7 rcar_jpu: Fix namespace for two __be16 vars
In reply to Mauro Carvalho ChehabFixes those sparse warnings:
drivers/media/platform/rcar_jpu.c:1150:51: warning: incorrect type in assignment (different base types)
drivers/media/platform/rcar_jpu.c:1150:51: expected unsigned short [unsigned] [short] [usertype] <noident>
drivers/media/platform/rcar_jpu.c:1150:51: got restricted __be16 [usertype] <noident>
drivers/media/platform/rcar_jpu.c:1152:50: warning: incorrect type in assignment (different base types)
drivers/media/platform/rcar_jpu.c:1152:50: expected unsigned short [unsigned] [short] [usertype] <noident>
drivers/media/platform/rcar_jpu.c:1152:50: got restricted __be16 [usertype] <noident>
drivers/media/platform/rcar_jpu.c +2 -2
@@ -1147,9 +1147,9 @@ static void jpu_buf_finish(struct vb2_buffer *vb) buffer =vb2_plane_vaddr (vb,0 );memcpy (buffer, jpeg_hdrs[jpu_buf->compr_quality],JPU_JPEG_HDR_SIZE ); - *(u16 *)(buffer +JPU_JPEG_HEIGHT_OFFSET ) = + *(__be16 *)(buffer +JPU_JPEG_HEIGHT_OFFSET ) =cpu_to_be16 (q_data->format.height); - *(u16 *)(buffer +JPU_JPEG_WIDTH_OFFSET ) = + *(__be16 *)(buffer +JPU_JPEG_WIDTH_OFFSET ) =cpu_to_be16 (q_data->format.width); *(buffer +JPU_JPEG_SUBS_OFFSET ) = q_data->fmtinfo->subsampling; }
Signature · 1 line
2.4.3