1. 23 12月, 2007 7 次提交
  2. 20 12月, 2007 2 次提交
    • A
      [TG3]: Endianness bugfix. · 286e310f
      Al Viro 提交于
      tg3_nvram_write_block_unbuffered() is reading data from nvram into
      allocated buffer before overwriting a part of it with user-supplied
      data.  Then it feeds the entire page back to nvram.  It should be
      storing the words it had read as little-endian, not as host-endian.
      Note that tg3_set_eeprom() does exactly that for padding the same
      data to full words before it gets passed down to tg3_nvram_write_block()
      and then to tg3_nvram_write_block_unbuffered().
      
      Moreover, when we get to sending the entire thing back to nvram, we
      go through it word-by-word, doing essentially
      	writel(swab32(le32_to_cpu(word)), ...)
      so if we want them to reach the card in host-independent endianness,
      we'd better really have all that buffer filled with fixed-endian.
      For user-supplied part we obviously do have that (it's an array of
      octets memcpy'd in), ditto for padding of user-supplied part to word
      boundaries (taken care of in tg3_set_eeprom()).  The rest of the
      buffer gets filled by tg3_nvram_write_block_unbuffered() and it would
      damn better be consistent with that (and with tg3_get_eeprom(), while
      we are at it - there we also convert the words read from nvram to
      little-endian before returning the buffer to user).
      
      The bug should get triggered on big-endian boxen when set_eeprom is done
      for less than entire page.  Then the words that should've been unaffected
      at all will actually get byteswapped in place in nvram.
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      286e310f
    • A
      [TG3]: Endianness annotations. · b9fc7dc5
      Al Viro 提交于
      Fixed misannotations, introduced a new helper - tg3_nvram_read_le().
      It gets __le32 * instead of u32 * and puts there the value converted
      to little-endian.  A lot of callers of tg3_nvram_read() were doing
      that; converted them to tg3_nvram_read_le().
      
      At that point the driver is practically endian-clean; the only remaining
      place is an actual bug, AFAICS; will be dealt with in the next patch.
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      b9fc7dc5
  3. 18 12月, 2007 10 次提交
  4. 17 12月, 2007 3 次提交
  5. 15 12月, 2007 12 次提交
  6. 14 12月, 2007 1 次提交
  7. 12 12月, 2007 1 次提交
  8. 11 12月, 2007 3 次提交
  9. 08 12月, 2007 1 次提交