Hi to all. Some long time I use Lucent modem and ltmodem-* packages with Linux. In common they work, but... When I had compare the modem performance with Windows, it is significantly better than with Linux. With both systems the modem report nearly same "connection speed" (for example 48000 bits per second), but the resulting speed of (tcp/ip) network transfers with Linux are significantly less (for example, it is about 4 KByte per second (what corresponds 3600 Kbit per second) but usually ever less and about 3KB per second) than with Windows (which are 5 KBytes per second and the better "responsiveness"). I explore the problem and found the cause. It is (for now) in open source v8250 module (but the problem are from long past time). I think, that the driver and the module are really too big, and ever the driver contains some surplus code and data... In short, I correct the v8250.c file and the network performance of my Linux system become significantly better. In common the download speed as reported by the downloader go up about 1.5 times. In other cases, I think as the modem compression take significant effect, the speed go up ever more, about 3 - 4 times. For now, I use Linux 2.6.35 kernel and modified ltmodem-20100102. The patch are here (the most of it are some my comments, which may be yet some errorneous, but... :-) Excuse me). There are one line of real code.
*** ltmodem-20100102/v8250.c Wed Feb 3 03:07:48 2010 --- ltmodem-20100102-qlmodif/v8250.c Sun Oct 23 01:07:07 2011 *************** *** 186,190 **** #endif unsigned char ch, lsr = *status; ! int max_count = 256; char flag; --- 186,190 ---- #endif unsigned char ch, lsr = *status; ! int max_count = 256; /* May be 512 or fifosize are better? -- QL */ char flag; *************** *** 268,272 **** } ! count = up->tx_loadsz; do { serial_out(up, UART_TX, xmit->buf[xmit->tail]); --- 268,272 ---- } ! count = up->tx_loadsz; /* simple 64 by strange way. -- QL */ do { serial_out(up, UART_TX, xmit->buf[xmit->tail]); *************** *** 858,861 **** --- 858,862 ---- uart->port.flags = vuart_config[uart->vtype].flags /*| UPF_BOOT_AUTOCONF*/; uart->vflags = conf->flags; + uart->tx_loadsz = vuart_config[uart->vtype].tx_loadsz; /* simple 64 by strange way. -- QL */ uart->host = host; *************** *** 864,868 **** uart->port.type = PORT_VUART; ! uart->port.fifosize = vuart_config[uart->vtype].fifo_size; ret = uart_add_one_port(&serial8250_reg, &uart->port); --- 865,869 ---- uart->port.type = PORT_VUART; ! uart->port.fifosize = vuart_config[uart->vtype].fifo_size; /* simple 512 by strange way. -- QL */ ret = uart_add_one_port(&serial8250_reg, &uart->port);