1. 02 Jun, 2016 2 commits
  2. 31 May, 2016 3 commits
  3. 09 May, 2016 4 commits
  4. 06 May, 2016 1 commit
  5. 03 May, 2016 2 commits
  6. 29 Apr, 2016 4 commits
  7. 26 Apr, 2016 6 commits
  8. 25 Mar, 2016 4 commits
    • Andrew Jeffery's avatar
      strgrp: Add cosine fudge-curve to unify filter comparison spaces · e8f7a978
      Andrew Jeffery authored
      If we are to use should_grp_score_cos(x,y) as a filter the the following
      relationship must hold (from least to most expensive):
      
              should_grp_score_len(x,y)
                      >= should_grp_score_cos(x,y)
                      >= grp_score(x)
      
      should_grp_score_cos(x,y) wasn't holding up its part of the bargain, so
      real data was used to generate a fudge curve to bring
      should_grp_score_cos(x,y) results into the same space. Really this is a
      terrible hack and the problem needs more thought. Evaluation of
      should_grp_score_cos(x,y)'s performance benefit (given the relaxation of
      the filter under the fudge curve) is sorely needed.
      e8f7a978
    • Andrew Jeffery's avatar
      strgrp: Use angular similarity for distance metric properties · 911a66a7
      Andrew Jeffery authored
      Distance metrics allow us to compare similarity results, however
      applying the change leads to test suite breakage as we no longer satisfy
      the requirement that each filter's score is at most as large as that of
      the previous filter^. As such, also stop ccanlint from executing the
      tests that are known to fail until we work around the problem.
      
      ^ This is a problem that has existed since the introduction of the
      cosine similarity filter, it just wasn't detected by the test suite.
      911a66a7
    • Andrew Jeffery's avatar
      strgrp: Use ratio of hypotenuse for consistent comparisons · 44c0274a
      Andrew Jeffery authored
      Ensure comparing filter results is sensible by using a consistent
      calculation. Note that the cosine similarity measurement doesn't yet
      conform and this can give spurious results that are not detected by the
      test suite.
      44c0274a
    • Andrew Jeffery's avatar
      strgrp: Shift constant out of loop · 10db5dc0
      Andrew Jeffery authored
      Likely this was optimised away, but the code now represents the intent.
      10db5dc0
  9. 08 Mar, 2016 1 commit
  10. 25 Feb, 2016 3 commits
  11. 15 Feb, 2016 4 commits
    • David Gibson's avatar
      altstack: Clarify checking macros · 11af31c3
      David Gibson authored
      The chkfail() and chkok() macros in altstack's test program are pretty
      difficult to read.  More importantly, though, they do all their tests with
      one big ok1().  That means if the test fails, you get no indication which
      of the checks was actually wrong, making debugging harder.
      
      This reworks the macros into a more verbose form that's easier to read,
      and splits them into multiple ok1() tests to make failures more explicit.
      Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      11af31c3
    • David Gibson's avatar
      altstack: Declare memory clobbers · dd3f80c1
      David Gibson authored
      altstack includes a couple of inline asm blocks with x86 push and pop
      instructions.  These instructions will access memory (the stack), but
      that's not declared in inline asm statement.  We seem to be getting away
      with it, but in theory that could allow the compiler to re-order accesses
      to local variables across the asm block.  Since those blocks change the
      location of the stack, that could be very bad.
      
      Adding a "memory" clobber should prevent this (effectively making the asm
      blocks a compiler memory barrier).
      Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      dd3f80c1
    • David Gibson's avatar
      altstack: Include config.h in run.c · c9b3a91c
      David Gibson authored
      ccan programs should always include config.h before anything else to make
      sure everything is set up correctly.  Doing so in altstack's run.c means
      it no longer needs an explicit _XOPEN_SOURCE 700, since _GNU_SOURCE is set
      in config.h (for GNU libc, anyway).
      Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      c9b3a91c
    • David Gibson's avatar
      altstack: Increase signal stack size · a4e6f6cb
      David Gibson authored
      At present the altstack module uses a stack of size MINSIGSTKSZ for its
      SIGSEGV handler.  Although MINSIGSTKSZ is defined to be large enough to
      execute a signal handler, it doesn't guarantee that you can do anything
      very much within it.
      
      With certain libc versions, MINSIGSTKSZ is not enough to execute the
      longjmp() used in altstack.  Specfically, with Ubuntu 12.04 (the default
      install for Travis containers), the first time longjmp() is executed the
      symbol must be resolved by the dynamic linker in a process which overruns
      the MINSIGSTKSZ sized stack.  That then corrupts local variables in
      altstack() itself causing a number of subsequent failures.
      
      This patch addresses the problem by changing from MINSIGSTKSZ to SIGSTKSZ
      which is supposed to cover "the usual requirements for an alternate signal
      stack".
      Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      a4e6f6cb
  12. 08 Feb, 2016 1 commit
  13. 05 Feb, 2016 1 commit
  14. 03 Feb, 2016 4 commits
    • David Gibson's avatar
      cppmagic: Iteration · 0ca50da9
      David Gibson authored
      This implements macros which iterate across their arguments.  This is
      implemented in terms of (kinda sorta) recursion.  In fact, they will stop
      working with enough arguments, but the limit is large and can be easily
      increased by changing the depth of the CPPMAGIC_EVAL() macro.
      
      There are 3 iterators (for now):
        CPPMAGIC_MAP
          applies another macro to each of its remaining arguments - the results
          are comma separated, so they can be passed into another CPPMAGIC_MAP
          invocation.
        CPPMAGIC_2MAP
          does the same thing, but takes the arguments a pair at a time, using
          a supplied two-argument macro.
        CPPMAGIC_JOIN
          combines the arguments with a chosen delimiter (effectively replacing
      the commas between the arguments with the delimiter)
      same thing, but takes the arguments a pair at a time.
      Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      0ca50da9
    • David Gibson's avatar
      cppmagic: Allow multiple and deferred evaluation · 7ddee86d
      David Gibson authored
      Recursion (and therefore iteration) in cpp is difficult, since the
      preprocessor explicitly looks for and inhibits recursion.
      
      But, it's possible to trick it, up to a point.  CPPMAGIC_DEFER1() and
      CPPMAGIC_DEFER2() can "hide" a macro, preventing it from being expanded
      and being noticed as recursion.
      
      Along with that we need to cause extra expansion passes to be executed.
      There has to be a finite limit here - true recursion is impossible - but
      that number can be made very large pretty easily.  CPPMAGIC_EVAL() multiply
      expands its argument(s) - up to 1024 times.
      Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      7ddee86d
    • David Gibson's avatar
      cppmagic: Conditionals · 395a2f84
      David Gibson authored
      Implement CPPMAGIC_IFELSE which operates similar to the C ? : operator, but
      is evaluated at preprocessing time.
      Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      395a2f84
    • David Gibson's avatar
      cppmagic: Logical operations · f92c112c
      David Gibson authored
      In order to implement fancier things, we need to represent truth values in
      cpp.  We use '0' and '1' strings, like in C, but we need ways to get these
      values from other conditions.
      
      CPPMAGIC_ISZERO() and CPPMAGIC_NONZERO() test if the argument is '0' or
      anything else (ISZERO doubles as a logical not).
      
      CPPMAGIC_ISEMPTY() and CPPMAGIC_NON_EMPTY() expand to 0 or 1 depending on
      whether they have any arguments at all or not.
      Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      f92c112c