diff options
author | David Woodhouse <dwmw2@infradead.org> | 2006-05-14 19:49:43 -0400 |
---|---|---|
committer | David Woodhouse <dwmw2@infradead.org> | 2006-05-14 19:49:43 -0400 |
commit | 3e68fbb59b3d4e6b47b65e9928b5929e02179759 (patch) | |
tree | 6ff2574161328a89f81f637ac42ce639e8ba31d3 /include/linux | |
parent | 52239da1b06ff445bf71d35e04d8ce74e4c6fe7b (diff) |
[JFFS2] Don't pack on-medium structures, because GCC emits crappy code
If we use __attribute__((packed)), GCC will _also_ assume that the
structures aren't sensibly aligned, and it'll emit code to cope with
that instead of straight word load/save. This can be _very_ suboptimal
on architectures like ARM.
Ideally, we want an attribute which just tells GCC not to do any
padding, without the alignment side-effects. In the absense of that,
we'll just drop the 'packed' attribute and hope that everything stays as
it was (which to be fair is fairly much what we expect). And add some
paranoia checks in the initialisation code, which should be optimised
away completely in the normal case.
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/jffs2.h | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/include/linux/jffs2.h b/include/linux/jffs2.h index cf792bb3c726..228ad72f7dd8 100644 --- a/include/linux/jffs2.h +++ b/include/linux/jffs2.h | |||
@@ -82,15 +82,15 @@ | |||
82 | 82 | ||
83 | typedef struct { | 83 | typedef struct { |
84 | uint32_t v32; | 84 | uint32_t v32; |
85 | } __attribute__((packed)) jint32_t; | 85 | } jint32_t; |
86 | 86 | ||
87 | typedef struct { | 87 | typedef struct { |
88 | uint32_t m; | 88 | uint32_t m; |
89 | } __attribute__((packed)) jmode_t; | 89 | } jmode_t; |
90 | 90 | ||
91 | typedef struct { | 91 | typedef struct { |
92 | uint16_t v16; | 92 | uint16_t v16; |
93 | } __attribute__((packed)) jint16_t; | 93 | } jint16_t; |
94 | 94 | ||
95 | struct jffs2_unknown_node | 95 | struct jffs2_unknown_node |
96 | { | 96 | { |
@@ -99,7 +99,7 @@ struct jffs2_unknown_node | |||
99 | jint16_t nodetype; | 99 | jint16_t nodetype; |
100 | jint32_t totlen; /* So we can skip over nodes we don't grok */ | 100 | jint32_t totlen; /* So we can skip over nodes we don't grok */ |
101 | jint32_t hdr_crc; | 101 | jint32_t hdr_crc; |
102 | } __attribute__((packed)); | 102 | }; |
103 | 103 | ||
104 | struct jffs2_raw_dirent | 104 | struct jffs2_raw_dirent |
105 | { | 105 | { |
@@ -117,7 +117,7 @@ struct jffs2_raw_dirent | |||
117 | jint32_t node_crc; | 117 | jint32_t node_crc; |
118 | jint32_t name_crc; | 118 | jint32_t name_crc; |
119 | uint8_t name[0]; | 119 | uint8_t name[0]; |
120 | } __attribute__((packed)); | 120 | }; |
121 | 121 | ||
122 | /* The JFFS2 raw inode structure: Used for storage on physical media. */ | 122 | /* The JFFS2 raw inode structure: Used for storage on physical media. */ |
123 | /* The uid, gid, atime, mtime and ctime members could be longer, but | 123 | /* The uid, gid, atime, mtime and ctime members could be longer, but |
@@ -149,7 +149,7 @@ struct jffs2_raw_inode | |||
149 | jint32_t data_crc; /* CRC for the (compressed) data. */ | 149 | jint32_t data_crc; /* CRC for the (compressed) data. */ |
150 | jint32_t node_crc; /* CRC for the raw inode (excluding data) */ | 150 | jint32_t node_crc; /* CRC for the raw inode (excluding data) */ |
151 | uint8_t data[0]; | 151 | uint8_t data[0]; |
152 | } __attribute__((packed)); | 152 | }; |
153 | 153 | ||
154 | struct jffs2_raw_summary | 154 | struct jffs2_raw_summary |
155 | { | 155 | { |
@@ -163,7 +163,7 @@ struct jffs2_raw_summary | |||
163 | jint32_t sum_crc; /* summary information crc */ | 163 | jint32_t sum_crc; /* summary information crc */ |
164 | jint32_t node_crc; /* node crc */ | 164 | jint32_t node_crc; /* node crc */ |
165 | jint32_t sum[0]; /* inode summary info */ | 165 | jint32_t sum[0]; /* inode summary info */ |
166 | } __attribute__((packed)); | 166 | }; |
167 | 167 | ||
168 | union jffs2_node_union | 168 | union jffs2_node_union |
169 | { | 169 | { |