1. 30 7月, 2012 4 次提交
  2. 11 7月, 2012 2 次提交
  3. 27 6月, 2012 1 次提交
  4. 12 6月, 2012 1 次提交
    • P
      hwrng: atmel-rng - fix data valid check · c475c06f
      Peter Korsgaard 提交于
      Brown paper bag: Data valid is LSB of the ISR (status register), and NOT
      of ODATA (current random data word)!
      
      With this, rngtest is a lot happier. Before:
      
      rngtest 3
      Copyright (c) 2004 by Henrique de Moraes Holschuh
      This is free software; see the source for copying conditions.  There is NO warr.
      
      rngtest: starting FIPS tests...
      rngtest: bits received from input: 20000032
      rngtest: FIPS 140-2 successes: 3
      rngtest: FIPS 140-2 failures: 997
      rngtest: FIPS 140-2(2001-10-10) Monobit: 604
      rngtest: FIPS 140-2(2001-10-10) Poker: 996
      rngtest: FIPS 140-2(2001-10-10) Runs: 36
      rngtest: FIPS 140-2(2001-10-10) Long run: 0
      rngtest: FIPS 140-2(2001-10-10) Continuous run: 117
      rngtest: input channel speed: (min=622.371; avg=23682.481; max=28224.350)Kibitss
      rngtest: FIPS tests speed: (min=12.361; avg=12.718; max=12.861)Mibits/s
      rngtest: Program run time: 2331696 microsecondsx
      
      After:
      rngtest 3
      Copyright (c) 2004 by Henrique de Moraes Holschuh
      This is free software; see the source for copying conditions.  There is NO warr.
      
      rngtest: starting FIPS tests...
      rngtest: bits received from input: 20000032
      rngtest: FIPS 140-2 successes: 999
      rngtest: FIPS 140-2 failures: 1
      rngtest: FIPS 140-2(2001-10-10) Monobit: 0
      rngtest: FIPS 140-2(2001-10-10) Poker: 0
      rngtest: FIPS 140-2(2001-10-10) Runs: 1
      rngtest: FIPS 140-2(2001-10-10) Long run: 0
      rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
      rngtest: input channel speed: (min=777.363; avg=43588.270; max=47870.711)Kibitss
      rngtest: FIPS tests speed: (min=11.943; avg=12.716; max=12.844)Mibits/s
      rngtest: Program run time: 1955282 microseconds
      
      Cc: stable@vger.kernel.org
      Signed-off-by: NPeter Korsgaard <jacmet@sunsite.dk>
      Reported-by: NGeorge Pontis <GPontis@z9.com>
      Acked-by: NNicolas Ferre <nicolas.ferre@atmel.com>
      Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
      c475c06f
  5. 31 5月, 2012 1 次提交
    • P
      hwrng: atmel-rng - fix race condition leading to repeated bits · 121daad8
      Peter Korsgaard 提交于
      Data valid gets cleared by reading the ISR (status register) and NOT from
      reading ODATA (data register). A new data word can become available between
      checking ISR and reading ODATA, causing us to reuse the same data word next
      time atmel_trng_read() gets called, if that happens before the following
      data word is ready.
      
      With this fixed, rngtest no longer complains of 'Continous run' errors.
      Before:
      
      rngtest -c 1000 < /dev/hwrng
      rngtest 3
      Copyright (c) 2004 by Henrique de Moraes Holschuh
      This is free software; see the source for copying conditions.  There is NO warr.
      
      rngtest: starting FIPS tests...
      rngtest: bits received from input: 20000032
      rngtest: FIPS 140-2 successes: 923
      rngtest: FIPS 140-2 failures: 77
      rngtest: FIPS 140-2(2001-10-10) Monobit: 0
      rngtest: FIPS 140-2(2001-10-10) Poker: 0
      rngtest: FIPS 140-2(2001-10-10) Runs: 1
      rngtest: FIPS 140-2(2001-10-10) Long run: 0
      rngtest: FIPS 140-2(2001-10-10) Continuous run: 76
      rngtest: input channel speed: (min=721.402; avg=46003.510; max=49321.338)Kibitss
      rngtest: FIPS tests speed: (min=11.442; avg=12.714; max=12.801)Mibits/s
      rngtest: Program run time: 1931860 microseconds
      
      After:
      
      rngtest -c 1000 < /dev/hwrng
      rngtest 3
      Copyright (c) 2004 by Henrique de Moraes Holschuh
      This is free software; see the source for copying conditions.  There is NO warr.
      
      rngtest: starting FIPS tests...
      rngtest: bits received from input: 20000032
      rngtest: FIPS 140-2 successes: 1000
      rngtest: FIPS 140-2 failures: 0
      rngtest: FIPS 140-2(2001-10-10) Monobit: 0
      rngtest: FIPS 140-2(2001-10-10) Poker: 0
      rngtest: FIPS 140-2(2001-10-10) Runs: 0
      rngtest: FIPS 140-2(2001-10-10) Long run: 0
      rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
      rngtest: input channel speed: (min=777.518; avg=36988.482; max=43115.342)Kibitss
      rngtest: FIPS tests speed: (min=11.951; avg=12.715; max=12.887)Mibits/s
      rngtest: Program run time: 2035543 microseconds
      
      Cc: stable@vger.kernel.org
      Signed-off-by: NPeter Korsgaard <jacmet@sunsite.dk>
      Reported-by: NGeorge Pontis <GPontis@z9.com>
      Acked-by: NNicolas Ferre <nicolas.ferre@atmel.com>
      Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
      121daad8
  6. 14 5月, 2012 1 次提交
  7. 30 4月, 2012 1 次提交
  8. 27 4月, 2012 1 次提交
  9. 16 4月, 2012 1 次提交
  10. 17 3月, 2012 1 次提交
  11. 25 2月, 2012 1 次提交
  12. 13 1月, 2012 1 次提交
    • J
      hwrng: tx4939 - use devm_request_and_ioremap · d0b03c5f
      Julia Lawall 提交于
      Reimplement a call to devm_request_mem_region followed by a call to ioremap
      or ioremap_nocache by a call to devm_request_and_ioremap.
      
      The semantic patch that makes this transformation is as follows:
      (http://coccinelle.lip6.fr/)
      
      // <smpl>
      @nm@
      expression myname;
      identifier i;
      @@
      
      struct platform_driver i = { .driver = { .name = myname } };
      
      @@
      expression dev,res,size;
      expression nm.myname;
      @@
      
      -if (!devm_request_mem_region(dev, res->start, size,
      -                              \(res->name\|dev_name(dev)\|myname\))) {
      -   ...
      -   return ...;
      -}
      ... when != res->start
      (
      -devm_ioremap(dev,res->start,size)
      +devm_request_and_ioremap(dev,res)
      |
      -devm_ioremap_nocache(dev,res->start,size)
      +devm_request_and_ioremap(dev,res)
      )
      ... when any
          when != res->start
      // </smpl>
      Signed-off-by: NJulia Lawall <julia@diku.dk>
      Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
      d0b03c5f
  13. 12 1月, 2012 1 次提交
  14. 30 11月, 2011 1 次提交
  15. 22 11月, 2011 1 次提交
  16. 02 11月, 2011 1 次提交
  17. 01 11月, 2011 1 次提交
  18. 10 10月, 2011 1 次提交
  19. 28 7月, 2011 1 次提交
  20. 07 7月, 2011 1 次提交
  21. 30 6月, 2011 4 次提交
  22. 19 5月, 2011 1 次提交
    • G
      drivercore: revert addition of of_match to struct device · b1608d69
      Grant Likely 提交于
      Commit b826291c, "drivercore/dt: add a match table pointer to struct
      device" added an of_match pointer to struct device to cache the
      of_match_table entry discovered at driver match time.  This was unsafe
      because matching is not an atomic operation with probing a driver.  If
      two or more drivers are attempted to be matched to a driver at the
      same time, then the cached matching entry pointer could get
      overwritten.
      
      This patch reverts the of_match cache pointer and reworks all users to
      call of_match_device() directly instead.
      Signed-off-by: NGrant Likely <grant.likely@secretlab.ca>
      b1608d69
  23. 04 5月, 2011 2 次提交
  24. 28 2月, 2011 2 次提交
  25. 24 2月, 2011 1 次提交
  26. 16 2月, 2011 1 次提交
  27. 23 1月, 2011 1 次提交
  28. 07 1月, 2011 2 次提交
    • H
      hwrng: via_rng - Fix memory scribbling on some CPUs · 55db8387
      Herbert Xu 提交于
      It has been reported that on at least one Nano CPU the xstore
      instruction will write as many as 16 bytes of data to the output
      buffer.
      
      This causes memory corruption as we use rng->priv which is only
      4-8 bytes long.
      
      This patch fixes this by using an intermediate buffer on the stack
      with at least 16 bytes and aligned to a 16-byte boundary.
      
      The problem was observed on the following processor:
      
      processor	: 0
      vendor_id	: CentaurHauls
      cpu family	: 6
      model		: 15
      model name	: VIA Nano processor U2250 (1.6GHz Capable)
      stepping	: 3
      cpu MHz		: 1600.000
      cache size	: 1024 KB
      fdiv_bug	: no
      hlt_bug		: no
      f00f_bug	: no
      coma_bug	: no
      fpu		: yes
      fpu_exception	: yes
      cpuid level	: 10
      wp		: yes
      flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush acpi mmx fxsr sse sse2 ss tm syscall nx lm constant_tsc up rep_good pni monitor vmx est tm2 ssse3 cx16 xtpr rng rng_en ace ace_en ace2 phe phe_en lahf_lm
      bogomips	: 3192.08
      clflush size	: 64
      cache_alignment	: 128
      address sizes	: 36 bits physical, 48 bits virtual
      power management:
      Tested-by: NMario 'BitKoenig' Holbe <Mario.Holbe@TU-Ilmenau.DE>
      Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
      55db8387
    • H
      hwrng: via_rng - Fix asm constraints · 0735ac1f
      Herbert Xu 提交于
      The inline asm to invoke xstore did not specify the constraints
      correctly.  In particular, dx/di should have been marked as output
      registers as well as input as they're modified by xstore.
      
      Thanks to Mario Holbe for creating this patch and testing it.
      Tested-by: NMario 'BitKoenig' Holbe <Mario.Holbe@TU-Ilmenau.DE>
      Signed-off-by: NHerbert Xu <herbert@gondor.apana.org.au>
      0735ac1f
  29. 18 11月, 2010 1 次提交
  30. 15 10月, 2010 1 次提交
    • A
      llseek: automatically add .llseek fop · 6038f373
      Arnd Bergmann 提交于
      All file_operations should get a .llseek operation so we can make
      nonseekable_open the default for future file operations without a
      .llseek pointer.
      
      The three cases that we can automatically detect are no_llseek, seq_lseek
      and default_llseek. For cases where we can we can automatically prove that
      the file offset is always ignored, we use noop_llseek, which maintains
      the current behavior of not returning an error from a seek.
      
      New drivers should normally not use noop_llseek but instead use no_llseek
      and call nonseekable_open at open time.  Existing drivers can be converted
      to do the same when the maintainer knows for certain that no user code
      relies on calling seek on the device file.
      
      The generated code is often incorrectly indented and right now contains
      comments that clarify for each added line why a specific variant was
      chosen. In the version that gets submitted upstream, the comments will
      be gone and I will manually fix the indentation, because there does not
      seem to be a way to do that using coccinelle.
      
      Some amount of new code is currently sitting in linux-next that should get
      the same modifications, which I will do at the end of the merge window.
      
      Many thanks to Julia Lawall for helping me learn to write a semantic
      patch that does all this.
      
      ===== begin semantic patch =====
      // This adds an llseek= method to all file operations,
      // as a preparation for making no_llseek the default.
      //
      // The rules are
      // - use no_llseek explicitly if we do nonseekable_open
      // - use seq_lseek for sequential files
      // - use default_llseek if we know we access f_pos
      // - use noop_llseek if we know we don't access f_pos,
      //   but we still want to allow users to call lseek
      //
      @ open1 exists @
      identifier nested_open;
      @@
      nested_open(...)
      {
      <+...
      nonseekable_open(...)
      ...+>
      }
      
      @ open exists@
      identifier open_f;
      identifier i, f;
      identifier open1.nested_open;
      @@
      int open_f(struct inode *i, struct file *f)
      {
      <+...
      (
      nonseekable_open(...)
      |
      nested_open(...)
      )
      ...+>
      }
      
      @ read disable optional_qualifier exists @
      identifier read_f;
      identifier f, p, s, off;
      type ssize_t, size_t, loff_t;
      expression E;
      identifier func;
      @@
      ssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)
      {
      <+...
      (
         *off = E
      |
         *off += E
      |
         func(..., off, ...)
      |
         E = *off
      )
      ...+>
      }
      
      @ read_no_fpos disable optional_qualifier exists @
      identifier read_f;
      identifier f, p, s, off;
      type ssize_t, size_t, loff_t;
      @@
      ssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)
      {
      ... when != off
      }
      
      @ write @
      identifier write_f;
      identifier f, p, s, off;
      type ssize_t, size_t, loff_t;
      expression E;
      identifier func;
      @@
      ssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)
      {
      <+...
      (
        *off = E
      |
        *off += E
      |
        func(..., off, ...)
      |
        E = *off
      )
      ...+>
      }
      
      @ write_no_fpos @
      identifier write_f;
      identifier f, p, s, off;
      type ssize_t, size_t, loff_t;
      @@
      ssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)
      {
      ... when != off
      }
      
      @ fops0 @
      identifier fops;
      @@
      struct file_operations fops = {
       ...
      };
      
      @ has_llseek depends on fops0 @
      identifier fops0.fops;
      identifier llseek_f;
      @@
      struct file_operations fops = {
      ...
       .llseek = llseek_f,
      ...
      };
      
      @ has_read depends on fops0 @
      identifier fops0.fops;
      identifier read_f;
      @@
      struct file_operations fops = {
      ...
       .read = read_f,
      ...
      };
      
      @ has_write depends on fops0 @
      identifier fops0.fops;
      identifier write_f;
      @@
      struct file_operations fops = {
      ...
       .write = write_f,
      ...
      };
      
      @ has_open depends on fops0 @
      identifier fops0.fops;
      identifier open_f;
      @@
      struct file_operations fops = {
      ...
       .open = open_f,
      ...
      };
      
      // use no_llseek if we call nonseekable_open
      ////////////////////////////////////////////
      @ nonseekable1 depends on !has_llseek && has_open @
      identifier fops0.fops;
      identifier nso ~= "nonseekable_open";
      @@
      struct file_operations fops = {
      ...  .open = nso, ...
      +.llseek = no_llseek, /* nonseekable */
      };
      
      @ nonseekable2 depends on !has_llseek @
      identifier fops0.fops;
      identifier open.open_f;
      @@
      struct file_operations fops = {
      ...  .open = open_f, ...
      +.llseek = no_llseek, /* open uses nonseekable */
      };
      
      // use seq_lseek for sequential files
      /////////////////////////////////////
      @ seq depends on !has_llseek @
      identifier fops0.fops;
      identifier sr ~= "seq_read";
      @@
      struct file_operations fops = {
      ...  .read = sr, ...
      +.llseek = seq_lseek, /* we have seq_read */
      };
      
      // use default_llseek if there is a readdir
      ///////////////////////////////////////////
      @ fops1 depends on !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
      identifier fops0.fops;
      identifier readdir_e;
      @@
      // any other fop is used that changes pos
      struct file_operations fops = {
      ... .readdir = readdir_e, ...
      +.llseek = default_llseek, /* readdir is present */
      };
      
      // use default_llseek if at least one of read/write touches f_pos
      /////////////////////////////////////////////////////////////////
      @ fops2 depends on !fops1 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
      identifier fops0.fops;
      identifier read.read_f;
      @@
      // read fops use offset
      struct file_operations fops = {
      ... .read = read_f, ...
      +.llseek = default_llseek, /* read accesses f_pos */
      };
      
      @ fops3 depends on !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
      identifier fops0.fops;
      identifier write.write_f;
      @@
      // write fops use offset
      struct file_operations fops = {
      ... .write = write_f, ...
      +	.llseek = default_llseek, /* write accesses f_pos */
      };
      
      // Use noop_llseek if neither read nor write accesses f_pos
      ///////////////////////////////////////////////////////////
      
      @ fops4 depends on !fops1 && !fops2 && !fops3 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
      identifier fops0.fops;
      identifier read_no_fpos.read_f;
      identifier write_no_fpos.write_f;
      @@
      // write fops use offset
      struct file_operations fops = {
      ...
       .write = write_f,
       .read = read_f,
      ...
      +.llseek = noop_llseek, /* read and write both use no f_pos */
      };
      
      @ depends on has_write && !has_read && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
      identifier fops0.fops;
      identifier write_no_fpos.write_f;
      @@
      struct file_operations fops = {
      ... .write = write_f, ...
      +.llseek = noop_llseek, /* write uses no f_pos */
      };
      
      @ depends on has_read && !has_write && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
      identifier fops0.fops;
      identifier read_no_fpos.read_f;
      @@
      struct file_operations fops = {
      ... .read = read_f, ...
      +.llseek = noop_llseek, /* read uses no f_pos */
      };
      
      @ depends on !has_read && !has_write && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
      identifier fops0.fops;
      @@
      struct file_operations fops = {
      ...
      +.llseek = noop_llseek, /* no read or write fn */
      };
      ===== End semantic patch =====
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Cc: Julia Lawall <julia@diku.dk>
      Cc: Christoph Hellwig <hch@infradead.org>
      6038f373