Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Dec 11, 2019 8:27 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 331 posts ]  Go to page Previous 115 16 17 18 1923 Next
Author Message
PostPosted: Thu Nov 19, 2009 10:24 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Fri Jun 30, 2006 9:01 am
Posts: 1248
Sounds like a bug in 3c905b driver.
Try to initialise stack manually (through stackcfg) and run some program that uses network, if it also crashed, i'm pretty sure its a problem in driver.

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Top
   
PostPosted: Thu Nov 19, 2009 10:56 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
Статическая конфигурация не вешает систему, но сеть не работает - в программе "статус сети" количество пакетов везде ноль.


Top
   
PostPosted: Thu Nov 19, 2009 11:07 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
Поставил до и после eth.write_udp сообщения Sending... и ОК. Первое сообщение напечаталось, от второго успело напечататься только О.


Top
   
PostPosted: Thu Nov 19, 2009 11:20 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
Yes, all network programms crashes system, always at addr 80024D1C.
I suppose it is in e3c59x_boomerang_transmit after
Code:
; program DPD
        mov     edi, eax
        pop     eax


Top
   
PostPosted: Fri Nov 20, 2009 12:39 am 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
Насколько я понял, макросы:

virt_to_dma reg
dma_to_virt reg
zero_to_virt reg
virt_to_zero reg
zero_to_dma reg
dma_to_zero reg

оказались пустыми. Например virt_to_zero должен быть что-то вроде sub reg,OS_BASE и т.д.
Вопрос только, должен ли быть пустым dma_to_zero/zero_to_dma?

И судя по всему это не единственная ошибка в драйвере. Неужели у кого-то работает?
Вот когда ось была по нулевому адресу, то это наверное работало...


Top
   
PostPosted: Fri Nov 20, 2009 10:14 am 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
В ревизии 1276 я допустил ошибку, я ее уже исправил, залью на свн вечером, сейчас нет возможности.


Attachments:
kernel.7z [68.79 KiB]
Downloaded 77 times
Top
   
PostPosted: Fri Nov 20, 2009 1:32 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Fri Jun 30, 2006 9:01 am
Posts: 1248
tsdima wrote:
Насколько я понял, макросы:
оказались пустыми. Например virt_to_zero должен быть что-то вроде sub reg,OS_BASE и т.д.
Вопрос только, должен ли быть пустым dma_to_zero/zero_to_dma?


Indeed, I have just checked the SVN history of the driver, and it has never been updated to work with the newer kernel memory management system.

It is possible you can fix the driver by adding the code as you mentioned, in some places.

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Top
   
PostPosted: Sun Nov 22, 2009 12:20 am 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
Ну хорошо, с драйвером я разобрался, сделал такие изменения:
Code:
macro virt_to_dma reg
{
if defined E3C59X_LINUX
        sub     reg, [virt_addr]
        add     reg, [dma_addr]
else
   sub   reg, OS_BASE
end if
}

macro dma_to_virt reg
{
if defined E3C59X_LINUX
        sub     reg, [dma_addr]
        add     reg, [virt_addr]
else
   add   reg, OS_BASE
end if
}

macro zero_to_virt reg
{
if defined E3C59X_LINUX
        add     reg, [virt_addr]
end if
}

macro virt_to_zero reg
{
if defined E3C59X_LINUX
        sub     reg, [virt_addr]
end if
}

macro zero_to_dma reg
{
if defined E3C59X_LINUX
        add     reg, [dma_addr]
else
   sub   reg, OS_BASE
end if
}

macro dma_to_zero reg
{
if defined E3C59X_LINUX
        sub     reg, [dma_addr]
else
   add   reg, OS_BASE
end if
}


и

второе изменение ниже

Теперь не виснет, система пингуется, в таблице ARP правильный MAC-адрес другого хоста, с которого я пинговал.

Однако сетевые программы не работают, telnet не коннектится, серверные проги тоже молчат. Куда теперь копать?


Last edited by tsdima on Sun Nov 22, 2009 2:45 pm, edited 2 times in total.

Top
   
PostPosted: Sun Nov 22, 2009 1:06 am 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
Сразу после перезагрузки, если вызвать конфигурацию сети и поставить галочку напротив "Фикс.", где уже стоит статический адрес (изначально галочка почему-то напротив "Назначенный"), то телнет коннектится, и даже несколько символов успешно туда-сюда пересылаются, но потом начинаются какие-то задержки, а потом и вовсе ничего не передаётся. Хотя пингуется по прежнему нормально. Это глюки реализации TCP/IP?


Top
   
PostPosted: Sun Nov 22, 2009 2:43 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
По поводу второй части изменений, лучше исправить ошибку, а не инициализировать переменные:
Code:
; wait for TxReset to complete
        mov     ecx, 200000
.tx_reset_loop:
        in      ax, dx
        test    ah, 10000b ; check CmdInProgress
        jz      .tx_set_prev
        dec     ecx
        jns     .tx_reset_loop
.tx_set_prev:

Если команда выполнилась без таймаута, то без этого исправления переменные не инициализировались.


Top
   
PostPosted: Sun Nov 22, 2009 2:50 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
Такой вопрос: теоретически, драйвер сетевухи может и не отправить пакет (занят, нет свободных буферов или ошибочное состояние, требующее сброса), но это никак не анализируется вызывающей процедурой eth_tx. То есть пакет просто пропадёт. Не является ли это причиной нестабильной работы TCP?


Top
   
PostPosted: Sun Nov 22, 2009 5:20 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Fri Jun 30, 2006 9:01 am
Posts: 1248
There seems to be a problem with the driver receive function
(I used a sniffer on another computer, and all packets are sent correctly)

Also, i managed to connect to irc, and a couple of packets arrived, 2 minutes too late!
Others did not arrive at all.

Is your 3com card also a 'boomerang' type, or is it a 'vortex' ?

EDIT: the TCP checksum of some sent packets is incorrect!
EDIT2: solution: comment out the line
Code:
or      ebx, (1 shl 26) ; set AddTcpChecksum

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Last edited by hidnplayr on Sun Nov 22, 2009 5:31 pm, edited 1 time in total.

Top
   
PostPosted: Sun Nov 22, 2009 5:26 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
I think, my card is a 'boomerang' type, 'vortex' procedures don't uses descriptor lists.


Top
   
PostPosted: Sun Nov 22, 2009 5:31 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
hidnplayr wrote:
the TCP checksum of some sent packets is incorrect!

May be it is the problem, while ARP and ICMP-echo works properly.


Top
   
PostPosted: Sun Nov 22, 2009 5:58 pm 
Offline

Joined: Wed Mar 26, 2008 12:44 pm
Posts: 225
Yes, now it works.
But disconnect in telnet does nothing, another host remain "connected".


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 331 posts ]  Go to page Previous 115 16 17 18 1923 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited