Skip to content
Snippets Groups Projects
  1. Jul 01, 2019
    • Masahiro Yamada's avatar
      fixdep: check return value of printf() and putchar() · 6f9ac9f4
      Masahiro Yamada authored
      
      When there is not enough space on your storage device, the build will
      fail with 'No space left on device' error message.
      
      The reason is obvious from the message, so you will free up some disk
      space, then you will resume the build.
      
      However, sometimes you may still see a mysterious error message:
      
        unterminated call to function 'wildcard': missing ')'.
      
      If you run out of the disk space, fixdep may end up with generating
      incomplete .*.cmd files.
      
      For example, if the disk-full error occurs while fixdep is running
      print_dep(), the .*.cmd might be truncated like this:
      
         $(wildcard include/config/
      
      When you run 'make' next time, this broken .*.cmd will be included,
      then Make will terminate parsing since it is a wrong syntax.
      
      Once this happens, you need to run 'make clean' or delete the broken
      .*.cmd file manually.
      
      Even if you do not see any error message, the .*.cmd files after any
      error could be potentially incomplete, and unreliable. You may miss
      the re-compilation due to missing header dependency.
      
      If printf() cannot output the string for disk shortage or whatever
      reason, it returns a negative value, but currently fixdep does not
      check it at all. Consequently, fixdep *successfully* generates a
      broken .*.cmd file. Make never notices that since fixdep exits with 0,
      which means success.
      
      Given the intended usage of fixdep, it must respect the return value
      of not only malloc(), but also printf() and putchar().
      
      This seems a long-standing issue since the introduction of fixdep.
      
      In old days, Kbuild tried to provide an extra safety by letting fixdep
      output to a temporary file and renaming it after everything is done:
      
        scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(dot-target).tmp;\
        rm -f $(depfile);                                                    \
        mv -f $(dot-target).tmp $(dot-target).cmd)
      
      It was no help to avoid the current issue; fixdep successfully created
      a truncated tmp file, which would be renamed to a .*.cmd file.
      
      This problem should be fixed by propagating the error status to the
      build system because:
      
      [1] Since commit 9c2af1c7 ("kbuild: add .DELETE_ON_ERROR special
          target"), Make will delete the target automatically on any failure
          in the recipe.
      
      [2] Since commit 392885ee ("kbuild: let fixdep directly write to
          .*.cmd files"), .*.cmd file is included only when the corresponding
          target already exists.
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      6f9ac9f4
  2. May 21, 2019
  3. Dec 01, 2018
    • Masahiro Yamada's avatar
      kbuild: simplify dependency generation for CONFIG_TRIM_UNUSED_KSYMS · bbda5ec6
      Masahiro Yamada authored
      
      My main motivation of this commit is to clean up scripts/Kbuild.include
      and scripts/Makefile.build.
      
      Currently, CONFIG_TRIM_UNUSED_KSYMS works with a tricky gimmick;
      possibly exported symbols are detected by letting $(CPP) replace
      EXPORT_SYMBOL* with a special string '=== __KSYM_*===', which is
      post-processed by sed, and passed to fixdep. The extra preprocessing
      is costly, and hacking cmd_and_fixdep is ugly.
      
      I came up with a new way to find exported symbols; insert a dummy
      symbol __ksym_marker_* to each potentially exported symbol. Those
      dummy symbols are picked up by $(NM), post-processed by sed, then
      appended to .*.cmd files. I collected the post-process part to a
      new shell script scripts/gen_ksymdeps.sh for readability. The dummy
      symbols are put into the .discard.* section so that the linker
      script rips them off the final vmlinux or modules.
      
      A nice side-effect is building with CONFIG_TRIM_UNUSED_KSYMS will
      be much faster.
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      Reviewed-by: default avatarNicolas Pitre <nico@linaro.org>
      bbda5ec6
  4. Jul 17, 2018
    • Masahiro Yamada's avatar
      kbuild: move bin2c back to scripts/ from scripts/basic/ · c417fbce
      Masahiro Yamada authored
      
      Commit 8370edea ("bin2c: move bin2c in scripts/basic") moved bin2c
      to the scripts/basic/ directory, incorrectly stating "Kexec wants to
      use bin2c and it wants to use it really early in the build process.
      See arch/x86/purgatory/ code in later patches."
      
      Commit bdab125c ("Revert "kexec/purgatory: Add clean-up for
      purgatory directory"") and commit d6605b6b ("x86/build: Remove
      unnecessary preparation for purgatory") removed the redundant
      purgatory build magic entirely.
      
      That means that the move of bin2c was unnecessary in the first place.
      
      fixdep is the only host program that deserves to sit in the
      scripts/basic/ directory.
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      c417fbce
  5. May 07, 2018
  6. Mar 25, 2018
  7. Mar 05, 2018
    • Rasmus Villemoes's avatar
      fixdep: do not ignore kconfig.h · 638e69cf
      Rasmus Villemoes authored
      kconfig.h was excluded from consideration by fixdep by
      6a5be57f (fixdep: fix extraneous dependencies) to avoid some false
      positive hits
      
      (1) include/config/.h
      (2) include/config/h.h
      (3) include/config/foo.h
      
      (1) occurred because kconfig.h contains the string CONFIG_ in a
      comment. However, since dee81e98 (fixdep: faster CONFIG_ search), we
      have a check that the part after CONFIG_ is non-empty, so this does not
      happen anymore (and CONFIG_ appears by itself elsewhere, so that check
      is worthwhile).
      
      (2) comes from the include guard, __LINUX_KCONFIG_H. But with the
      previous patch, we no longer match that either.
      
      That leaves (3), which amounts to one [1] false dependency (aka stat() call
      done by make), which I think we can live with:
      
      We've already had one case [2] where the lack of include/linux/kconfig.h in
      the .o.cmd file caused a missing rebuild, and while I originally thought
      we should just put kconfig.h in the dependency list without parsing it
      for the CONFIG_ pattern, we actually do have some real CONFIG_ symbols
      mentioned in it, and one can imagine some translation unit that just
      does '#ifdef __BIG_ENDIAN' but doesn't through some other header
      actually depend on CONFIG_CPU_BIG_ENDIAN - so changing the target
      endianness could end up rebuilding the world, minus that small
      TU. Quoting Linus,
      
        ... when missing dependencies cause a missed re-compile, the resulting
        bugs can be _really_ subtle.
      
      [1] well, two, we now also have CONFIG_BOOGER/booger.h - we could change
      that to FOO if we care
      
      [2] https://lkml.org/lkml/2018/2/22/838
      
      
      
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarRasmus Villemoes <linux@rasmusvillemoes.dk>
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      638e69cf
    • Rasmus Villemoes's avatar
      fixdep: remove some false CONFIG_ matches · 5b8ad96d
      Rasmus Villemoes authored
      
      The string CONFIG_ quite often appears after other alphanumerics,
      meaning that that instance cannot be referencing a Kconfig
      symbol. Omitting these means make has fewer files to stat() when
      deciding what needs to be rebuilt - for a defconfig build, this seems to
      remove about 2% of the (wildcard ...) lines from the .o.cmd files.
      
      Signed-off-by: default avatarRasmus Villemoes <linux@rasmusvillemoes.dk>
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      5b8ad96d
    • Rasmus Villemoes's avatar
      fixdep: remove stale references to uml-config.h · 14a596a7
      Rasmus Villemoes authored
      
      uml-config.h hasn't existed in this decade (87e299e5 - x86, um: get
      rid of uml-config.h). The few remaining UML_CONFIG instances are defined
      directly in terms of their real CONFIG symbol in common-offsets.h, so
      unlike when the symbols got defined via a sed script, anything that uses
      UML_CONFIG_FOO now should also automatically pick up a dependency on
      CONFIG_FOO via the normal fixdep mechanism (since common-offsets.h
      should at least recursively be a dependency). Hence I believe we should
      actually be able to ignore the HELLO_CONFIG_BOOM cases.
      
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Richard Weinberger <richard@nod.at>
      Cc: user-mode-linux-devel@lists.sourceforge.net
      Signed-off-by: default avatarRasmus Villemoes <linux@rasmusvillemoes.dk>
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      14a596a7
  8. Jan 18, 2018
    • Masahiro Yamada's avatar
      fixdep: use existing helper to check modular CONFIG options · ab9ce9fe
      Masahiro Yamada authored
      
      str_ends_with() tests if the given token ends with a particular string.
      Currently, it is used to check file paths without $(srctree).
      
      Actually, we have one more place where this helper is useful.  Use it
      to check if CONFIG option ends with _MODULE.
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      ab9ce9fe
    • Masahiro Yamada's avatar
      fixdep: refactor parse_dep_file() · 87b95a81
      Masahiro Yamada authored
      
      parse_dep_file() has too much indentation, and puts the code far to
      the right.  This commit refactors the code and reduces the one level
      of indentation.
      
      strrcmp() computes 'slen' by itself, but the caller already knows the
      length of the token, so 'slen' can be passed via function argument.
      With this, we can swap the order of strrcmp() and "*p = \0;"
      
      Also, strrcmp() is an ambiguous function name.  Flip the logic and
      rename it to str_ends_with().
      
      I added a new helper is_ignored_file() - this returns 1 if the token
      represents a file that should be ignored.
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      87b95a81
    • Masahiro Yamada's avatar
      fixdep: move global variables to local variables of main() · 5d1ef76f
      Masahiro Yamada authored
      
      I do not mind global variables where they are useful enough.  In this
      case, I do not see a good reason to use global variables since they
      are just referenced in shallow places.  It is easy to pass them via
      function arguments.
      
      I squashed print_cmdline() into main() since it is just one line code.
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      5d1ef76f
    • Masahiro Yamada's avatar
      fixdep: remove unneeded memcpy() in parse_dep_file() · ccfe7887
      Masahiro Yamada authored
      
      Each token in the depfile is copied to the temporary buffer 's' to
      terminate the token with zero.  We do not need to do this any more
      because the parsed buffer is now writable.  Insert '\0' directly in
      the buffer without calling memcpy().
      
      <limits.h> is no longer necessary. (It was needed for PATH_MAX).
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      ccfe7887
    • Masahiro Yamada's avatar
      fixdep: factor out common code for reading files · 4003fd80
      Masahiro Yamada authored
      
      Now, do_config_files() and print_deps() are almost the same.  Only
      the difference is the parser function called (parse_config_file vs
      parse_dep_file).
      
      We can reduce the code duplication by factoring out the common code
      into read_file() - this function allocates a buffer and loads a file
      to it.  It returns the pointer to the allocated buffer.  (As before,
      it bails out by exit(2) for any error.)  The caller must free the
      buffer when done.
      
      Having empty source files is possible; fixdep should simply skip them.
      I deleted the "st.st_size == 0" check, so read_file() allocates 1-byte
      buffer for an empty file.  strstr() will immediately return NULL, and
      this is what we expect.
      
      On the other hand, an empty dep_file should be treated as an error.
      In this case, parse_dep_file() will error out with "no targets found"
      and it is a correct error message.
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      4003fd80
    • Masahiro Yamada's avatar
      fixdep: use malloc() and read() to load dep_file to buffer · 01b5cbe7
      Masahiro Yamada authored
      
      Commit dee81e98 ("fixdep: faster CONFIG_ search") changed how to
      read files in which CONFIG options are searched.  It used malloc()
      and read() instead of mmap() because it needed to zero-terminate the
      buffer in order to use strstr().  print_deps() was left untouched
      since there was no reason to change it.
      
      Now, I have two motivations to change it in the same way.
      
       - do_config_file() and print_deps() do quite similar things; they
         open a file, load it onto memory, and pass it to a parser function.
         If we use malloc() and read() for print_deps() too, we can factor
         out the common code.  (I will do this in the next commit.)
      
       - parse_dep_file() copies each token to a temporary buffer because
         it needs to zero-terminate it to be passed to printf().  It is not
         possible to modify the buffer directly because it is mmap'ed with
         O_RDONLY.  If we load the file content into a malloc'ed buffer, we
         can insert '\0' after each token, and save memcpy().  (I will do
         this in the commit after next.)
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      01b5cbe7
    • Masahiro Yamada's avatar
      fixdep: remove unnecessary <arpa/inet.h> inclusion · 41f92cff
      Masahiro Yamada authored
      
      <arpa/inet.h> was included for ntohl(), but it was removed by
      commit dee81e98 ("fixdep: faster CONFIG_ search").
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      41f92cff
  9. Jan 08, 2018
  10. Aug 09, 2017
  11. Aug 24, 2016
    • Alexey Dobriyan's avatar
      fixdep: faster CONFIG_ search · dee81e98
      Alexey Dobriyan authored
      
      Do you think kernel build is 100% dominated by gcc? You are wrong!
      One small utility called "fixdep" consistently manages to sneak into
      profile's first page (unless you have small monitor of course).
      
      The choke point is this clever code:
      
      	for (; m < end; m++) {
      		if (*m == INT_CONF) { p = (char *) m  ; goto conf; }
      		if (*m == INT_ONFI) { p = (char *) m-1; goto conf; }
      		if (*m == INT_NFIG) { p = (char *) m-2; goto conf; }
      		if (*m == INT_FIG_) { p = (char *) m-3; goto conf; }
      
      4 branches per 4 characters is not fast.
      
      Use strstr(3), so that SSE2 etc can be used.
      
      With this patch, fixdep is so deep at the bottom, it is hard to find it.
      
      Signed-off-by: default avatarAlexey Dobriyan <adobriyan@gmail.com>
      Signed-off-by: default avatarMichal Marek <mmarek@suse.com>
      dee81e98
  12. Jul 22, 2016
    • Tautschnig, Michael's avatar
      scripts: Fix size mismatch of kexec_purgatory_size · 21532b9e
      Tautschnig, Michael authored
      
      bin2c is used to create a valid C file out of a binary file where two
      symbols will be globally defined: <name> and <name>_size. <name> is
      passed as the first parameter of the host binary.
      
      Building using goto-cc reported that the purgatory binary code (the only
      current user of this utility) declares kexec_purgatory_size as 'size_t'
      where bin2c generate <name>_size to be 'int' so in a 64-bit host where
      sizeof(size_t) > sizeof(int) this type mismatch will always yield the
      wrong value for big-endian architectures while for little-endian it will
      be wrong if the object laid in memory directly after
      kexec_purgatory_size contains non-zero value at the time of reading.
      
      This commit changes <name>_size to be size_t instead.
      
      Note:
      
      Another way to fix the problem is to change the type of
      kexec_purgatory_size to be 'int' as there's this check in code:
      (kexec_purgatory_size <= 0)
      
      Signed-off-by: default avatarMichael Tautschnig <tautschn@amazon.com>
      Cc: Vivek Goyal <vgoyal@redhat.com>
      Acked-by: default avatarDave Young <dyoung@redhat.com>
      Signed-off-by: default avatarMichal Marek <mmarek@suse.com>
      21532b9e
  13. Mar 29, 2016
    • Nicolas Pitre's avatar
      kbuild: add fine grained build dependencies for exported symbols · c1a95fda
      Nicolas Pitre authored
      
      Like with kconfig options, we now have the ability to compile in and
      out individual EXPORT_SYMBOL() declarations based on the content of
      include/generated/autoksyms.h.  However we don't want the entire
      world to be rebuilt whenever that file is touched.
      
      Let's apply the same build dependency trick used for CONFIG_* symbols
      where the time stamp of empty files whose paths matching those symbols
      is used to trigger fine grained rebuilds. In our case the key is the
      symbol name passed to EXPORT_SYMBOL().
      
      However, unlike config options, we cannot just use fixdep to parse
      the source code for EXPORT_SYMBOL(ksym) because several variants exist
      and parsing them all in a separate tool, and keeping it in synch, is
      not trivially maintainable.  Furthermore, there are variants such as
      
      	EXPORT_SYMBOL_GPL(pci_user_read_config_##size);
      
      that are instanciated via a macro for which we can't easily determine
      the actual exported symbol name(s) short of actually running the
      preprocessor on them.
      
      Storing the symbol name string in a special ELF section doesn't work
      for targets that output assembly or preprocessed source.
      
      So the best way is really to leverage the preprocessor by having it
      output actual symbol names anchored by a special sequence that can be
      easily filtered out. Then the list of symbols is simply fed to fixdep
      to be merged with the other dependencies.
      
      That implies the preprocessor is executed twice for each source file.
      A previous attempt relied on a warning pragma for each EXPORT_SYMBOL()
      instance that was filtered apart from stderr by the build system with
      a sed script during the actual compilation pass. Unfortunately the
      preprocessor/compiler diagnostic output isn't stable between versions
      and this solution, although more efficient, was deemed too fragile.
      
      Because of the lowercasing performed by fixdep, there might be name
      collisions triggering spurious rebuilds for similar symbols. But this
      shouldn't be a big issue in practice. (This is the case for CONFIG_*
      symbols and I didn't want to be different here, whatever the original
      reason for doing so.)
      
      To avoid needless build overhead, the exported symbol name gathering is
      performed only when CONFIG_TRIM_UNUSED_KSYMS is selected.
      
      Signed-off-by: default avatarNicolas Pitre <nico@linaro.org>
      Acked-by: default avatarRusty Russell <rusty@rustcorp.com.au>
      c1a95fda
    • Nicolas Pitre's avatar
      fixdep: accept extra dependencies on stdin · d8329e35
      Nicolas Pitre authored
      
      ... and merge them in the list of parsed dependencies.
      
      Signed-off-by: default avatarNicolas Pitre <nico@linaro.org>
      d8329e35
  14. Feb 17, 2016
  15. Dec 07, 2015
  16. Aug 24, 2015
  17. Aug 08, 2014
    • Vivek Goyal's avatar
      kernel: build bin2c based on config option CONFIG_BUILD_BIN2C · de5b56ba
      Vivek Goyal authored
      
      currently bin2c builds only if CONFIG_IKCONFIG=y. But bin2c will now be
      used by kexec too.  So make it compilation dependent on CONFIG_BUILD_BIN2C
      and this config option can be selected by CONFIG_KEXEC and CONFIG_IKCONFIG.
      
      Signed-off-by: default avatarVivek Goyal <vgoyal@redhat.com>
      Cc: Borislav Petkov <bp@suse.de>
      Cc: Michael Kerrisk <mtk.manpages@gmail.com>
      Cc: Yinghai Lu <yinghai@kernel.org>
      Cc: Eric Biederman <ebiederm@xmission.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Matthew Garrett <mjg59@srcf.ucam.org>
      Cc: Greg Kroah-Hartman <greg@kroah.com>
      Cc: Dave Young <dyoung@redhat.com>
      Cc: WANG Chao <chaowang@redhat.com>
      Cc: Baoquan He <bhe@redhat.com>
      Cc: Andy Lutomirski <luto@amacapital.net>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      de5b56ba
    • Vivek Goyal's avatar
      bin2c: move bin2c in scripts/basic · 8370edea
      Vivek Goyal authored
      
      This patch series does not do kernel signature verification yet.  I plan
      to post another patch series for that.  Now distributions are already
      signing PE/COFF bzImage with PKCS7 signature I plan to parse and verify
      those signatures.
      
      Primary goal of this patchset is to prepare groundwork so that kernel
      image can be signed and signatures be verified during kexec load.  This
      should help with two things.
      
      - It should allow kexec/kdump on secureboot enabled machines.
      
      - In general it can help even without secureboot. By being able to verify
        kernel image signature in kexec, it should help with avoiding module
        signing restrictions. Matthew Garret showed how to boot into a custom
        kernel, modify first kernel's memory and then jump back to old kernel and
        bypass any policy one wants to.
      
      This patch (of 15):
      
      Kexec wants to use bin2c and it wants to use it really early in the build
      process. See arch/x86/purgatory/ code in later patches.
      
      So move bin2c in scripts/basic so that it can be built very early and
      be usable by arch/x86/purgatory/
      
      Signed-off-by: default avatarVivek Goyal <vgoyal@redhat.com>
      Cc: Borislav Petkov <bp@suse.de>
      Cc: Michael Kerrisk <mtk.manpages@gmail.com>
      Cc: Yinghai Lu <yinghai@kernel.org>
      Cc: Eric Biederman <ebiederm@xmission.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Matthew Garrett <mjg59@srcf.ucam.org>
      Cc: Greg Kroah-Hartman <greg@kroah.com>
      Cc: Dave Young <dyoung@redhat.com>
      Cc: WANG Chao <chaowang@redhat.com>
      Cc: Baoquan He <bhe@redhat.com>
      Cc: Andy Lutomirski <luto@amacapital.net>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      8370edea
  18. Jun 10, 2014
  19. Apr 05, 2013
    • Stephen Warren's avatar
      kbuild: fixdep: support concatenated dep files · 2ab8a996
      Stephen Warren authored
      
      The current use-case for fixdep is: a source file is run through a single
      processing step, which creates a single dependency file as a side-effect,
      which fixdep transforms into the file used by the kernel build process.
      
      In order to transparently run the C pre-processor on device-tree files,
      we wish to run both gcc -E and dtc on a source file in a single rule.
      This generates two dependency files, which must be transformed together
      into the file used by the kernel build process. This change modifies
      fixdep so it can process the concatenation of multiple separate input
      dependency files, and produce a correct unified output.
      
      The code changes have the slight benefit of transforming the loop in
      parse_dep_file() into more of a lexer/tokenizer, with the loop body being
      more of a parser. Previously, some of this logic was mixed together
      before the loop. I also added some comments, which I hope are useful.
      
      Benchmarking shows that on a cross-compiled ARM tegra_defconfig build,
      there is less than 0.5 seconds speed decrease with this change, on top
      of a build time of ~2m24s. This is probably within the noise.
      
      Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
      Acked-by: default avatarRob Herring <rob.herring@calxeda.com>
      2ab8a996
  20. Jan 09, 2013
  21. Sep 09, 2011
  22. May 02, 2011
  23. Mar 13, 2011
  24. Feb 21, 2011
  25. Dec 22, 2010
  26. Nov 11, 2010
    • Eric Dumazet's avatar
      fixdep: use hash table instead of a single array · 8af27e1d
      Eric Dumazet authored
      
      I noticed fixdep uses ~2% of cpu time in kernel build, in function
      use_config()
      
      fixdep spends a lot of cpu cycles in linear searches in its internal
      string array. With about 400 stored strings per dep file, this begins to
      be noticeable.
      
      Convert fixdep to use a hash table.
      
      kbuild results on my x86_64 allmodconfig
      
      Before patch :
      
      real	10m30.414s
      user	61m51.456s
      sys	8m28.200s
      
      real	10m12.334s
      user	61m50.236s
      sys	8m30.448s
      
      real	10m42.947s
      user	61m50.028s
      sys	8m32.380s
      
      After:
      
      real	10m8.180s
      user	61m22.506s
      sys	8m32.384s
      
      real	10m35.039s
      user	61m21.654s
      sys	8m32.212s
      
      real	10m14.487s
      user	61m23.498s
      sys	8m32.312s
      
      Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: default avatarMichal Marek <mmarek@suse.cz>
      8af27e1d
  27. Oct 27, 2010
  28. Sep 22, 2010
Loading