Commit 88738c09ab04fb10dc63204cb02f8992a43d1de0
1 parent
f94f7181
e1000: fix unaligned access
(Tristan Gingold) git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4121 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
8 additions
and
1 deletions
bswap.h
... | ... | @@ -132,6 +132,7 @@ CPU_CONVERT(le, 64, uint64_t) |
132 | 132 | #define cpu_to_le32wu(p, v) cpu_to_le32w(p, v) |
133 | 133 | #define le16_to_cpupu(p) le16_to_cpup(p) |
134 | 134 | #define le32_to_cpupu(p) le32_to_cpup(p) |
135 | +#define be32_to_cpupu(p) be32_to_cpup(p) | |
135 | 136 | |
136 | 137 | #define cpu_to_be16wu(p, v) cpu_to_be16w(p, v) |
137 | 138 | #define cpu_to_be32wu(p, v) cpu_to_be32w(p, v) |
... | ... | @@ -168,6 +169,12 @@ static inline uint32_t le32_to_cpupu(const uint32_t *p) |
168 | 169 | return p1[0] | (p1[1] << 8) | (p1[2] << 16) | (p1[3] << 24); |
169 | 170 | } |
170 | 171 | |
172 | +static inline uint32_t be32_to_cpupu(const uint32_t *p) | |
173 | +{ | |
174 | + const uint8_t *p1 = (const uint8_t *)p; | |
175 | + return p1[3] | (p1[2] << 8) | (p1[1] << 16) | (p1[0] << 24); | |
176 | +} | |
177 | + | |
171 | 178 | static inline void cpu_to_be16wu(uint16_t *p, uint16_t v) |
172 | 179 | { |
173 | 180 | uint8_t *p1 = (uint8_t *)p; | ... | ... |
hw/e1000.c
... | ... | @@ -326,7 +326,7 @@ xmit_seg(E1000State *s) |
326 | 326 | if (tp->tcp) { |
327 | 327 | sofar = frames * tp->mss; |
328 | 328 | cpu_to_be32wu((uint32_t *)(tp->data+css+4), // seq |
329 | - be32_to_cpup((uint32_t *)(tp->data+css+4))+sofar); | |
329 | + be32_to_cpupu((uint32_t *)(tp->data+css+4))+sofar); | |
330 | 330 | if (tp->paylen - sofar > tp->mss) |
331 | 331 | tp->data[css + 13] &= ~9; // PSH, FIN |
332 | 332 | } else // UDP | ... | ... |