Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754505AbbLaLnV (ORCPT ); Thu, 31 Dec 2015 06:43:21 -0500 Received: from mo4-p00-ob.smtp.rzone.de ([81.169.146.162]:52203 "EHLO mo4-p00-ob.smtp.rzone.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753516AbbLaLnR (ORCPT ); Thu, 31 Dec 2015 06:43:17 -0500 X-Greylist: delayed 364 seconds by postgrey-1.27 at vger.kernel.org; Thu, 31 Dec 2015 06:43:16 EST X-RZG-AUTH: :OH8QVVOrc/CP6za/qRmbF3BWedPGA1vjs2ejZCzW8NRdwTYefHi0LhjeQF0sTFwGWOFPJQ== X-RZG-CLASS-ID: mo00 From: Thomas Schoebel-Theuer To: linux-kernel@vger.kernel.org, tst@schoebel-theuer.de Subject: [RFC 01/31] mars: add new module lamport Date: Thu, 31 Dec 2015 12:35:56 +0100 Message-Id: X-Mailer: git-send-email 2.6.4 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3445 Lines: 115 Signed-off-by: Thomas Schoebel-Theuer --- drivers/staging/mars/lamport.c | 61 ++++++++++++++++++++++++++++++++++++++++++ include/linux/brick/lamport.h | 26 ++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 drivers/staging/mars/lamport.c create mode 100644 include/linux/brick/lamport.h diff --git a/drivers/staging/mars/lamport.c b/drivers/staging/mars/lamport.c new file mode 100644 index 0000000..373093f --- /dev/null +++ b/drivers/staging/mars/lamport.c @@ -0,0 +1,61 @@ +/* + * MARS Long Distance Replication Software + * + * Copyright (C) 2010-2014 Thomas Schoebel-Theuer + * Copyright (C) 2011-2014 1&1 Internet AG + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include + +#include + +/* TODO: replace with spinlock if possible (first check) */ +struct semaphore lamport_sem = __SEMAPHORE_INITIALIZER(lamport_sem, 1); +struct timespec lamport_now = {}; + +void get_lamport(struct timespec *now) +{ + int diff; + + down(&lamport_sem); + + *now = CURRENT_TIME; + diff = timespec_compare(now, &lamport_now); + if (diff >= 0) { + timespec_add_ns(now, 1); + memcpy(&lamport_now, now, sizeof(lamport_now)); + timespec_add_ns(&lamport_now, 1); + } else { + timespec_add_ns(&lamport_now, 1); + memcpy(now, &lamport_now, sizeof(*now)); + } + + up(&lamport_sem); +} + +void set_lamport(struct timespec *old) +{ + int diff; + + down(&lamport_sem); + + diff = timespec_compare(old, &lamport_now); + if (diff >= 0) { + memcpy(&lamport_now, old, sizeof(lamport_now)); + timespec_add_ns(&lamport_now, 1); + } + + up(&lamport_sem); +} diff --git a/include/linux/brick/lamport.h b/include/linux/brick/lamport.h new file mode 100644 index 0000000..9aac0ce --- /dev/null +++ b/include/linux/brick/lamport.h @@ -0,0 +1,26 @@ +/* + * MARS Long Distance Replication Software + * + * Copyright (C) 2010-2014 Thomas Schoebel-Theuer + * Copyright (C) 2011-2014 1&1 Internet AG + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef LAMPORT_H +#define LAMPORT_H + +#include + +extern void get_lamport(struct timespec *now); +extern void set_lamport(struct timespec *old); + +#endif -- 2.6.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/