linux-serial.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/7] tty: ipwireless, cleanup TIOCGSERIAL
@ 2016-05-09  7:11 Jiri Slaby
  2016-05-09  7:11 ` [PATCH 2/7] net: ircomm, " Jiri Slaby
                   ` (6 more replies)
  0 siblings, 7 replies; 9+ messages in thread
From: Jiri Slaby @ 2016-05-09  7:11 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby, Jiri Kosina, David Sterba

In ipwireless_get_serial_info, struct serial_struct is memset to 0 and
then some members set to 0 explicitly.

Remove the latter as it is obviously superfluous.

And remove the retinfo check against NULL. copy_to_user will take care
of that.

Part of hub6 cleanup series.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Jiri Kosina <jikos@kernel.org>
Cc: David Sterba <dsterba@suse.com>
---
 drivers/tty/ipwireless/tty.c | 11 +----------
 1 file changed, 1 insertion(+), 10 deletions(-)

diff --git a/drivers/tty/ipwireless/tty.c b/drivers/tty/ipwireless/tty.c
index 345cebb07ae7..2685d59d2724 100644
--- a/drivers/tty/ipwireless/tty.c
+++ b/drivers/tty/ipwireless/tty.c
@@ -252,20 +252,11 @@ static int ipwireless_get_serial_info(struct ipw_tty *tty,
 {
 	struct serial_struct tmp;
 
-	if (!retinfo)
-		return (-EFAULT);
-
 	memset(&tmp, 0, sizeof(tmp));
 	tmp.type = PORT_UNKNOWN;
 	tmp.line = tty->index;
-	tmp.port = 0;
-	tmp.irq = 0;
-	tmp.flags = 0;
 	tmp.baud_base = 115200;
-	tmp.close_delay = 0;
-	tmp.closing_wait = 0;
-	tmp.custom_divisor = 0;
-	tmp.hub6 = 0;
+
 	if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
 		return -EFAULT;
 
-- 
2.8.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/7] net: ircomm, cleanup TIOCGSERIAL
  2016-05-09  7:11 [PATCH 1/7] tty: ipwireless, cleanup TIOCGSERIAL Jiri Slaby
@ 2016-05-09  7:11 ` Jiri Slaby
  2016-05-10 18:16   ` David Miller
  2016-05-09  7:11 ` [PATCH 3/7] tty: cyclades+mxser, do not initialize to zero Jiri Slaby
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 9+ messages in thread
From: Jiri Slaby @ 2016-05-09  7:11 UTC (permalink / raw)
  To: gregkh
  Cc: linux-serial, linux-kernel, Jiri Slaby, Samuel Ortiz,
	David S. Miller, netdev

In ircomm_tty_get_serial_info, struct serial_struct is memset to 0 and
then some members set to 0 explicitly.

Remove the latter as it is obviously superfluous.

And remove the retinfo check against NULL. copy_to_user will take care
of that.

Part of hub6 cleanup series.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Samuel Ortiz <samuel@sortiz.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: netdev@vger.kernel.org
---
 net/irda/ircomm/ircomm_tty_ioctl.c | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/net/irda/ircomm/ircomm_tty_ioctl.c b/net/irda/ircomm/ircomm_tty_ioctl.c
index 17c49bf26313..0985588c9dec 100644
--- a/net/irda/ircomm/ircomm_tty_ioctl.c
+++ b/net/irda/ircomm/ircomm_tty_ioctl.c
@@ -246,9 +246,6 @@ static int ircomm_tty_get_serial_info(struct ircomm_tty_cb *self,
 {
 	struct serial_struct info;
 
-	if (!retinfo)
-		return -EFAULT;
-
 	memset(&info, 0, sizeof(info));
 	info.line = self->line;
 	info.flags = self->port.flags;
@@ -258,11 +255,6 @@ static int ircomm_tty_get_serial_info(struct ircomm_tty_cb *self,
 
 	/* For compatibility  */
 	info.type = PORT_16550A;
-	info.port = 0;
-	info.irq = 0;
-	info.xmit_fifo_size = 0;
-	info.hub6 = 0;
-	info.custom_divisor = 0;
 
 	if (copy_to_user(retinfo, &info, sizeof(*retinfo)))
 		return -EFAULT;
-- 
2.8.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 3/7] tty: cyclades+mxser, do not initialize to zero
  2016-05-09  7:11 [PATCH 1/7] tty: ipwireless, cleanup TIOCGSERIAL Jiri Slaby
  2016-05-09  7:11 ` [PATCH 2/7] net: ircomm, " Jiri Slaby
@ 2016-05-09  7:11 ` Jiri Slaby
  2016-05-09  7:11 ` [PATCH 4/7] tty: frv, remove unused serial macros Jiri Slaby
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Jiri Slaby @ 2016-05-09  7:11 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

Do not initialize members of initialized structures to zero. They are
zeroed automatically.

Part of hub6 cleanup series.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/cyclades.c | 1 -
 drivers/tty/mxser.c    | 1 -
 2 files changed, 2 deletions(-)

diff --git a/drivers/tty/cyclades.c b/drivers/tty/cyclades.c
index 2943d6ff54df..7251430bf149 100644
--- a/drivers/tty/cyclades.c
+++ b/drivers/tty/cyclades.c
@@ -2288,7 +2288,6 @@ static int cy_get_serial_info(struct cyclades_port *info,
 		.closing_wait = info->port.closing_wait,
 		.baud_base = info->baud,
 		.custom_divisor = info->custom_divisor,
-		.hub6 = 0,		/*!!! */
 	};
 	return copy_to_user(retinfo, &tmp, sizeof(*retinfo)) ? -EFAULT : 0;
 }
diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index ebb8c0034101..2ff280d8045a 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -1219,7 +1219,6 @@ static int mxser_get_serial_info(struct tty_struct *tty,
 		.close_delay = info->port.close_delay,
 		.closing_wait = info->port.closing_wait,
 		.custom_divisor = info->custom_divisor,
-		.hub6 = 0
 	};
 	if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
 		return -EFAULT;
-- 
2.8.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 4/7] tty: frv, remove unused serial macros
  2016-05-09  7:11 [PATCH 1/7] tty: ipwireless, cleanup TIOCGSERIAL Jiri Slaby
  2016-05-09  7:11 ` [PATCH 2/7] net: ircomm, " Jiri Slaby
  2016-05-09  7:11 ` [PATCH 3/7] tty: cyclades+mxser, do not initialize to zero Jiri Slaby
@ 2016-05-09  7:11 ` Jiri Slaby
  2016-05-09  7:11 ` [PATCH 5/7] tty: stop defining STD_COM_FLAGS in drivers Jiri Slaby
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Jiri Slaby @ 2016-05-09  7:11 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby, David Howells

STD_COM_FLAGS needs not be defined as it is not used anywhere on frv.

SERIAL_PORT_DFNS is defined to be empty. 8250 is aware of empty
SERIAL_PORT_DFNS and does:
 #ifndef SERIAL_PORT_DFNS
 #define SERIAL_PORT_DFNS
 #endif

So no need to define it on frv.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: David Howells <dhowells@redhat.com>
---
 arch/frv/include/asm/serial.h | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/arch/frv/include/asm/serial.h b/arch/frv/include/asm/serial.h
index bce0d0d07e60..614c6d76789a 100644
--- a/arch/frv/include/asm/serial.h
+++ b/arch/frv/include/asm/serial.h
@@ -12,7 +12,3 @@
  * the base baud is derived from the clock speed and so is variable
  */
 #define BASE_BAUD 0
-
-#define STD_COM_FLAGS		UPF_BOOT_AUTOCONF
-
-#define SERIAL_PORT_DFNS
-- 
2.8.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 5/7] tty: stop defining STD_COM_FLAGS in drivers
  2016-05-09  7:11 [PATCH 1/7] tty: ipwireless, cleanup TIOCGSERIAL Jiri Slaby
                   ` (2 preceding siblings ...)
  2016-05-09  7:11 ` [PATCH 4/7] tty: frv, remove unused serial macros Jiri Slaby
@ 2016-05-09  7:11 ` Jiri Slaby
  2016-05-09  7:11 ` [PATCH 6/7] tty: 8250, drop unused members from struct old_serial_port Jiri Slaby
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Jiri Slaby @ 2016-05-09  7:11 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

STD_COM_FLAGS is mostly a bad name for what the drivers thinks it is.
Stop using it and pass the flags directly.

cyclades defines it as 0, so we do not assign anything to freshly
tty_port_init'ed structure.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 arch/xtensa/platforms/xt2000/setup.c | 1 -
 drivers/tty/cyclades.c               | 3 ---
 drivers/tty/serial/m32r_sio.c        | 5 +----
 3 files changed, 1 insertion(+), 8 deletions(-)

diff --git a/arch/xtensa/platforms/xt2000/setup.c b/arch/xtensa/platforms/xt2000/setup.c
index 5f4bd71971d6..4904c5c16918 100644
--- a/arch/xtensa/platforms/xt2000/setup.c
+++ b/arch/xtensa/platforms/xt2000/setup.c
@@ -113,7 +113,6 @@ void platform_heartbeat(void)
 }
 
 //#define RS_TABLE_SIZE 2
-//#define STD_COM_FLAGS (UPF_BOOT_AUTOCONF|UPF_SKIP_TEST)
 
 #define _SERIAL_PORT(_base,_irq)					\
 {									\
diff --git a/drivers/tty/cyclades.c b/drivers/tty/cyclades.c
index 7251430bf149..5d535cb902dc 100644
--- a/drivers/tty/cyclades.c
+++ b/drivers/tty/cyclades.c
@@ -93,8 +93,6 @@ static void cy_send_xchar(struct tty_struct *tty, char ch);
 #define	SERIAL_XMIT_SIZE	(min(PAGE_SIZE, 4096))
 #endif
 
-#define STD_COM_FLAGS (0)
-
 /* firmware stuff */
 #define ZL_MAX_BLOCKS	16
 #define DRIVER_VERSION	0x02010203
@@ -3083,7 +3081,6 @@ static int cy_init_card(struct cyclades_card *cinfo)
 
 		info->port.closing_wait = CLOSING_WAIT_DELAY;
 		info->port.close_delay = 5 * HZ / 10;
-		info->port.flags = STD_COM_FLAGS;
 		init_completion(&info->shutdown_wait);
 
 		if (cy_is_Z(cinfo)) {
diff --git a/drivers/tty/serial/m32r_sio.c b/drivers/tty/serial/m32r_sio.c
index 68765f7c2645..1b01504cf306 100644
--- a/drivers/tty/serial/m32r_sio.c
+++ b/drivers/tty/serial/m32r_sio.c
@@ -51,9 +51,6 @@
 
 #define PASS_LIMIT	256
 
-/* Standard COM flags */
-#define STD_COM_FLAGS (UPF_BOOT_AUTOCONF | UPF_SKIP_TEST)
-
 static const struct {
 	unsigned int port;
 	unsigned int irq;
@@ -892,7 +889,7 @@ static void __init m32r_sio_init_ports(void)
 		up->port.iobase   = old_serial_port[i].port;
 		up->port.irq      = irq_canonicalize(old_serial_port[i].irq);
 		up->port.uartclk  = BAUD_RATE * 16;
-		up->port.flags    = STD_COM_FLAGS;
+		up->port.flags    = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
 		up->port.membase  = 0;
 		up->port.iotype   = 0;
 		up->port.regshift = 0;
-- 
2.8.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 6/7] tty: 8250, drop unused members from struct old_serial_port
  2016-05-09  7:11 [PATCH 1/7] tty: ipwireless, cleanup TIOCGSERIAL Jiri Slaby
                   ` (3 preceding siblings ...)
  2016-05-09  7:11 ` [PATCH 5/7] tty: stop defining STD_COM_FLAGS in drivers Jiri Slaby
@ 2016-05-09  7:11 ` Jiri Slaby
  2016-05-09  7:11 ` [PATCH 7/7] tty: 8250, kill DEBUG_INTR Jiri Slaby
  2016-05-09  7:32 ` [PATCH 1/7] tty: ipwireless, cleanup TIOCGSERIAL David Sterba
  6 siblings, 0 replies; 9+ messages in thread
From: Jiri Slaby @ 2016-05-09  7:11 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

hub6 and irqflags from struct old_serial_port are nowhere set. Drop
them from the structure and replace the reads by zeros.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/serial/8250/8250.h      | 2 --
 drivers/tty/serial/8250/8250_core.c | 4 ++--
 2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/tty/serial/8250/8250.h b/drivers/tty/serial/8250/8250.h
index 215a99237e95..563ccbe3612b 100644
--- a/drivers/tty/serial/8250/8250.h
+++ b/drivers/tty/serial/8250/8250.h
@@ -53,11 +53,9 @@ struct old_serial_port {
 	unsigned int port;
 	unsigned int irq;
 	upf_t        flags;
-	unsigned char hub6;
 	unsigned char io_type;
 	unsigned char __iomem *iomem_base;
 	unsigned short iomem_reg_shift;
-	unsigned long irqflags;
 };
 
 struct serial8250_config {
diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
index 0fbd7c033a25..e938ac93743a 100644
--- a/drivers/tty/serial/8250/8250_core.c
+++ b/drivers/tty/serial/8250/8250_core.c
@@ -546,10 +546,10 @@ static void __init serial8250_isa_init_ports(void)
 
 		port->iobase   = old_serial_port[i].port;
 		port->irq      = irq_canonicalize(old_serial_port[i].irq);
-		port->irqflags = old_serial_port[i].irqflags;
+		port->irqflags = 0;
 		port->uartclk  = old_serial_port[i].baud_base * 16;
 		port->flags    = old_serial_port[i].flags;
-		port->hub6     = old_serial_port[i].hub6;
+		port->hub6     = 0;
 		port->membase  = old_serial_port[i].iomem_base;
 		port->iotype   = old_serial_port[i].io_type;
 		port->regshift = old_serial_port[i].iomem_reg_shift;
-- 
2.8.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 7/7] tty: 8250, kill DEBUG_INTR
  2016-05-09  7:11 [PATCH 1/7] tty: ipwireless, cleanup TIOCGSERIAL Jiri Slaby
                   ` (4 preceding siblings ...)
  2016-05-09  7:11 ` [PATCH 6/7] tty: 8250, drop unused members from struct old_serial_port Jiri Slaby
@ 2016-05-09  7:11 ` Jiri Slaby
  2016-05-09  7:32 ` [PATCH 1/7] tty: ipwireless, cleanup TIOCGSERIAL David Sterba
  6 siblings, 0 replies; 9+ messages in thread
From: Jiri Slaby @ 2016-05-09  7:11 UTC (permalink / raw)
  To: gregkh; +Cc: linux-serial, linux-kernel, Jiri Slaby

Convert DEBUG_INTR to pr_debug:
* defined semantics (DEBUG, DYNAMIC_DEBUG)
* KERN_DEBUG level instead of KERN_DEFAULT
* emit __func__ and \n
* verified 'fmt' even when !DEBUG

I wonder if anybody ever used that or whether we should just drop the
lines.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/tty/serial/8250/8250.h      | 6 ------
 drivers/tty/serial/8250/8250_core.c | 4 ++--
 drivers/tty/serial/8250/8250_port.c | 6 +++---
 3 files changed, 5 insertions(+), 11 deletions(-)

diff --git a/drivers/tty/serial/8250/8250.h b/drivers/tty/serial/8250/8250.h
index 563ccbe3612b..31b3d55211d0 100644
--- a/drivers/tty/serial/8250/8250.h
+++ b/drivers/tty/serial/8250/8250.h
@@ -235,9 +235,3 @@ static inline int serial_index(struct uart_port *port)
 {
 	return port->minor - 64;
 }
-
-#if 0
-#define DEBUG_INTR(fmt...)	printk(fmt)
-#else
-#define DEBUG_INTR(fmt...)	do { } while (0)
-#endif
diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
index e938ac93743a..fa823a54cf35 100644
--- a/drivers/tty/serial/8250/8250_core.c
+++ b/drivers/tty/serial/8250/8250_core.c
@@ -114,7 +114,7 @@ static irqreturn_t serial8250_interrupt(int irq, void *dev_id)
 	struct list_head *l, *end = NULL;
 	int pass_counter = 0, handled = 0;
 
-	DEBUG_INTR("serial8250_interrupt(%d)...", irq);
+	pr_debug("%s(%d): start\n", __func__, irq);
 
 	spin_lock(&i->lock);
 
@@ -144,7 +144,7 @@ static irqreturn_t serial8250_interrupt(int irq, void *dev_id)
 
 	spin_unlock(&i->lock);
 
-	DEBUG_INTR("end.\n");
+	pr_debug("%s(%d): end\n", __func__, irq);
 
 	return IRQ_RETVAL(handled);
 }
diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
index d4036038a4dd..b10d05f2004b 100644
--- a/drivers/tty/serial/8250/8250_port.c
+++ b/drivers/tty/serial/8250/8250_port.c
@@ -1686,7 +1686,7 @@ static void serial8250_read_char(struct uart_8250_port *up, unsigned char lsr)
 		lsr &= port->read_status_mask;
 
 		if (lsr & UART_LSR_BI) {
-			DEBUG_INTR("handling break....");
+			pr_debug("%s: handling break\n", __func__);
 			flag = TTY_BREAK;
 		} else if (lsr & UART_LSR_PE)
 			flag = TTY_PARITY;
@@ -1757,7 +1757,7 @@ void serial8250_tx_chars(struct uart_8250_port *up)
 	if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
 		uart_write_wakeup(port);
 
-	DEBUG_INTR("THRE...");
+	pr_debug("%s: THRE\n", __func__);
 
 	/*
 	 * With RPM enabled, we have to wait until the FIFO is empty before the
@@ -1823,7 +1823,7 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir)
 
 	status = serial_port_in(port, UART_LSR);
 
-	DEBUG_INTR("status = %x...", status);
+	pr_debug("%s: status = %x\n", __func__, status);
 
 	if (status & (UART_LSR_DR | UART_LSR_BI)) {
 		if (!up->dma || handle_rx_dma(up, iir))
-- 
2.8.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/7] tty: ipwireless, cleanup TIOCGSERIAL
  2016-05-09  7:11 [PATCH 1/7] tty: ipwireless, cleanup TIOCGSERIAL Jiri Slaby
                   ` (5 preceding siblings ...)
  2016-05-09  7:11 ` [PATCH 7/7] tty: 8250, kill DEBUG_INTR Jiri Slaby
@ 2016-05-09  7:32 ` David Sterba
  6 siblings, 0 replies; 9+ messages in thread
From: David Sterba @ 2016-05-09  7:32 UTC (permalink / raw)
  To: Jiri Slaby; +Cc: gregkh, Jiri Kosina, linux-kernel, linux-serial

On Mon, May 09, 2016 at 09:11:53AM +0200, Jiri Slaby wrote:
> In ipwireless_get_serial_info, struct serial_struct is memset to 0 and
> then some members set to 0 explicitly.
> 
> Remove the latter as it is obviously superfluous.
> 
> And remove the retinfo check against NULL. copy_to_user will take care
> of that.
> 
> Part of hub6 cleanup series.
> 
> Signed-off-by: Jiri Slaby <jslaby@suse.cz>
> Cc: Jiri Kosina <jikos@kernel.org>
> Cc: David Sterba <dsterba@suse.com>

Acked-by: David Sterba <dsterba@suse.com>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/7] net: ircomm, cleanup TIOCGSERIAL
  2016-05-09  7:11 ` [PATCH 2/7] net: ircomm, " Jiri Slaby
@ 2016-05-10 18:16   ` David Miller
  0 siblings, 0 replies; 9+ messages in thread
From: David Miller @ 2016-05-10 18:16 UTC (permalink / raw)
  To: jslaby; +Cc: gregkh, linux-serial, linux-kernel, samuel, netdev

From: Jiri Slaby <jslaby@suse.cz>
Date: Mon,  9 May 2016 09:11:54 +0200

> In ircomm_tty_get_serial_info, struct serial_struct is memset to 0 and
> then some members set to 0 explicitly.
> 
> Remove the latter as it is obviously superfluous.
> 
> And remove the retinfo check against NULL. copy_to_user will take care
> of that.
> 
> Part of hub6 cleanup series.
> 
> Signed-off-by: Jiri Slaby <jslaby@suse.cz>

Acked-by: David S. Miller <davem@davemloft.net>

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2016-05-10 18:16 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-05-09  7:11 [PATCH 1/7] tty: ipwireless, cleanup TIOCGSERIAL Jiri Slaby
2016-05-09  7:11 ` [PATCH 2/7] net: ircomm, " Jiri Slaby
2016-05-10 18:16   ` David Miller
2016-05-09  7:11 ` [PATCH 3/7] tty: cyclades+mxser, do not initialize to zero Jiri Slaby
2016-05-09  7:11 ` [PATCH 4/7] tty: frv, remove unused serial macros Jiri Slaby
2016-05-09  7:11 ` [PATCH 5/7] tty: stop defining STD_COM_FLAGS in drivers Jiri Slaby
2016-05-09  7:11 ` [PATCH 6/7] tty: 8250, drop unused members from struct old_serial_port Jiri Slaby
2016-05-09  7:11 ` [PATCH 7/7] tty: 8250, kill DEBUG_INTR Jiri Slaby
2016-05-09  7:32 ` [PATCH 1/7] tty: ipwireless, cleanup TIOCGSERIAL David Sterba

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).