linux-sparse.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Pavel Pisa <pisa@cmp.felk.cvut.cz>
To: Rob Landley <rob@landley.net>
Cc: daniel.santos@pobox.com, Daniel Santos <danielfsantos@att.net>,
	Andrew Morton <akpm@linux-foundation.org>,
	Christopher Li <sparse@chrisli.org>,
	David Daney <david.daney@cavium.com>,
	David Howells <dhowells@redhat.com>,
	David Rientjes <rientjes@google.com>,
	Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>,
	"H. Peter Anvin" <hpa@zytor.com>, Ingo Molnar <mingo@elte.hu>,
	Ingo Molnar <mingo@kernel.org>, Joe Perches <joe@perches.com>,
	Konstantin Khlebnikov <khlebnikov@openvz.org>,
	linux-doc@vger.kernel.org, linux-sparse@vger.kernel.org,
	LKML <linux-kernel@vger.kernel.org>,
	Paul Gortmaker <paul.gortmaker@windriver.com>,
	Paul Turner <pjt@google.com>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Richard Weinberger <richard@nod.at>,
	Steven Rostedt <rostedt@goodmis.org>,
	Suresh Siddha <suresh.b.siddha@intel.com>
Subject: Re: [PATCH v4 0/13] Generic Red-Black Trees
Date: Sun, 24 Jun 2012 09:57:08 +0200	[thread overview]
Message-ID: <201206240957.09136.pisa@cmp.felk.cvut.cz> (raw)
In-Reply-To: <4FE69A14.6040904@landley.net>

Hello Rob,

I follow-up Daniel's RB series from Jonathan Corbet's
summarry on LWN http://lwn.net/Articles/500355/ .

I have attempted ourself to solve implementation of
type safe tree containers for C more than 10 years ago
(GAVL) and it is used in many of my own and our university
projects and even in (at least three) companies for
proprietary projects.

I have done multiple reviews of the Daniel's RB series
and I am confident that his approach is more clean
and generic than mine.

I would be happy if it can get into Linux kernel,
because it makes use of RB trees much simpler (user does
not need to care about details) and with much better
potential to catch user errors.

According to my review, there is only one possibly problematic
preprocessor construct. The Linux kernel is already dependent
on this CPP behavior (IS_ENABLED macro) anyway.

If you are fan of other compilers, please, provide
constructive help and debate there and test attached
C code on compilers which you use and consider
them as candidates to compile linux kernel.

According to my test, there is problem with MSVC
(free WDF version run under WINE to deliver our company
open-source projects to unfortunate users using Windows).

Version

Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.207 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

But that is compiler which breaks many standards
and if GCC is not enough open to you then I expect that
you do not mind if Linux kernel cannot be compiled by MSVC.
So I do not see that as a problem.

So again, please, test LLVM or other your beloved
compilers and report if there is a problem.

It would worth to have even user space version of the
kernel RB tree code with Dainie's interface to run feasibility
and performance tests in more environments quickly
(as Daniel mentioned already). But it is not necessary
for me to be convinced that provided changes should go into
kernel because I am convinced  already and offer my
"Reviewed-by" confirmation.

It would even worth to have this code available for
user space projects and libraries use. But there is a problem
that core part of the Linux RB code is GPL licensed
and for library use LGPL, MPL or GPL with linking exception
is usually required.

Best wishes,

                Pavel Pisa
    e-mail:     pisa@cmp.felk.cvut.cz
    www:        http://cmp.felk.cvut.cz/~pisa
    university: http://dce.fel.cvut.cz/
    company:    http://www.pikron.com/



#include <stdio.h>

#define IFF_EMPTY(test, t, f) _iff_empty(__JUNK##test, t, f)

#define __JUNK junk ,
#define _iff_empty(test_or_junk, t, f) __iff_empty(test_or_junk, t, f)
#define __iff_empty(__ignored1, __ignored2, result, ...) result

#define IS_EMPTY(arg)	IFF_EMPTY(arg, 1, 0)

#define TESTER_empty
#define TESTER_filled filled

int main(int argc, char *argv[])
{
  printf("IS_EMPTY for empty %d (should be 1)\n", IS_EMPTY(TESTER_empty));
  printf("IS_EMPTY for filled %d (should be 0)\n", IS_EMPTY(TESTER_filled));
  printf("IS_EMPTY for unknown %d (should be 0)\n", IS_EMPTY(TESTER_unknown));
  printf("IS_EMPTY for nil %d (should be 1)\n", IS_EMPTY());
  printf("IS_EMPTY for space %d (should be 1)\n", IS_EMPTY( ));
  printf("IS_EMPTY for comment %d (should be 1)\n", IS_EMPTY(/*test*/));
}



  reply	other threads:[~2012-06-24  7:57 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-23  4:00 [PATCH v4 0/13] Generic Red-Black Trees Daniel Santos
2012-06-23  4:00 ` [PATCH v4 1/13] compiler-gcc4.h: Correct verion check for __compiletime_error Daniel Santos
2012-06-23  4:00 ` [PATCH v4 2/13] compiler-gcc4.h: Reorder macros based upon gcc ver Daniel Santos
2012-06-23  4:00 ` [PATCH v4 3/13] compiler-gcc.h: Add gcc-recommended GCC_VERSION macro Daniel Santos
2012-06-23  4:00 ` [PATCH v4 4/13] compiler-gcc{3,4}.h: Use " Daniel Santos
2012-06-23  4:00 ` [PATCH v4 5/13] compiler{,-gcc4}.h: Remove duplicate macros Daniel Santos
2012-06-23  4:00 ` [PATCH v4 6/13] bug.h: Replace __linktime_error with __compiletime_error Daniel Santos
2012-06-25 18:16   ` Paul Gortmaker
2012-06-25 19:30     ` Daniel Santos
2012-06-23  4:00 ` [PATCH v4 7/13] compiler{,-gcc4}.h: Introduce __flatten function attribute Daniel Santos
2012-06-23  4:00 ` [PATCH v4 8/13] bug.h: Make BUILD_BUG_ON generate compile-time error Daniel Santos
2012-06-23  4:00 ` [PATCH v4 9/13] bug.h: Add BUILD_BUG_ON_NON_CONST macro Daniel Santos
2012-06-23  4:00 ` [PATCH v4 10/13] bug.h: Add gcc 4.2+ versions of BUILD_BUG_ON_* macros Daniel Santos
2012-06-23  4:00 ` [PATCH v4 11/13] rbtree.h: Generic Red-Black Trees Daniel Santos
2012-06-27 13:00   ` Peter Zijlstra
2012-06-23  4:00 ` [PATCH v4 12/13] fair.c: Use generic rbtree impl in fair scheduler Daniel Santos
2012-06-26 12:15   ` Peter Zijlstra
2012-06-26 21:59     ` Daniel Santos
2012-06-27 12:36       ` Peter Zijlstra
2012-06-23  4:00 ` [PATCH v4 13/13] documentation for rbtrees Daniel Santos
2012-06-23 23:01 ` [PATCH v4 0/13] Generic Red-Black Trees Rob Landley
2012-06-24  0:40   ` Daniel Santos
2012-06-24  4:39     ` Rob Landley
2012-06-24  7:57       ` Pavel Pisa [this message]
2012-06-24 23:29         ` Rob Landley
2012-06-25  8:35         ` Daniel Santos
2012-06-24 16:06       ` Alan Cox
2012-06-25  0:33       ` Daniel Santos

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201206240957.09136.pisa@cmp.felk.cvut.cz \
    --to=pisa@cmp.felk.cvut.cz \
    --cc=a.p.zijlstra@chello.nl \
    --cc=akpm@linux-foundation.org \
    --cc=daniel.santos@pobox.com \
    --cc=danielfsantos@att.net \
    --cc=david.daney@cavium.com \
    --cc=dhowells@redhat.com \
    --cc=hpa@zytor.com \
    --cc=joe@perches.com \
    --cc=khlebnikov@openvz.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sparse@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=mingo@kernel.org \
    --cc=paul.gortmaker@windriver.com \
    --cc=pjt@google.com \
    --cc=richard@nod.at \
    --cc=rientjes@google.com \
    --cc=rob@landley.net \
    --cc=rostedt@goodmis.org \
    --cc=seto.hidetoshi@jp.fujitsu.com \
    --cc=sparse@chrisli.org \
    --cc=suresh.b.siddha@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).