My ltmodem patch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Media Development]     [Asterisk]     [DCCP]     [Netdev]     [X.org]     [Xfree86]     [Fedora Women]     [Linux USB]

  Powered by Linux