I''d like code reviewers for a fix for: 6633784 checksum offload with Linux dom0 produces invalid checksum A webrev is at http://dme.org/solaris/webrev/n3. It would be useful if people are able to test this on their Linux dom0 of choice. There''s no need to build anything to test the proposed fix - we can patch it in using mdb (you will need to reboot the domU). Contact me directly if you are willing to give it a try. dme. -- David Edmondson, Solaris Engineering, http://dme.org
I''ve a gentoo dom0 running opensolaris domU''s (nv66 and nv77) I''ve got time to try this out for you. Regards, Dan dan at thebsdbox co uk This message posted from opensolaris.org
> I''d like code reviewers for a fix for: > 6633784 checksum offload with Linux dom0 produces invalid checksum > A webrev is at http://dme.org/solaris/webrev/n3.Looks OK for me.> It would be useful if people are able to test this on their Linux > dom0 of choice.I just tried it on an Intel DG33TL mainboard with Intel C2Q Q6600 cpu, running Ubuntu 7.10. Before I bfu''ed to a current opensolaris build that included the above patch, I had to use "set xnf:xnf_cksum_offload = 0" in OpenSolaris domUs. Now that the domU is running with bits including the above patch, networking is OK and I don''t have to set xnf:xnf_cksum_offload = 0 any more... This message posted from opensolaris.org
It''s not clear for me how to apply patch to Xen 3.1 SNV76 DomU at CentOS 5.0 Dom0. This message posted from opensolaris.org
Thanks to the people who offered to review and test (and Jurgen for having already done so). To patch the existing driver during boot, try the following: - Boot with the debugger loaded, and break in early (-kd). - When the debugger loads, set a breakpoint to fire when the xnf driver is attached: [0]> ::bp xnf`xnf_attach [0]> :c - When the breakpoint fires, we need to patch xnf_getcapab(): [0]> xnf_getcapab::dis xnf`xnf_getcapab: pushq %rbp xnf`xnf_getcapab+1: movq %rsp,%rbp xnf`xnf_getcapab+4: subq $0x20,%rsp xnf`xnf_getcapab+8: movq %rdi,-0x8(%rbp) xnf`xnf_getcapab+0xc: movq %rsi,-0x10(%rbp) xnf`xnf_getcapab+0x10: movq %rdx,-0x18(%rbp) xnf`xnf_getcapab+0x14: cmpl $0x1,%esi xnf`xnf_getcapab+0x17: jne +0x14 <xnf`xnf_getcapab+0x2d> xnf`xnf_getcapab+0x19: cmpl $0x0,0x48(%rdi) xnf`xnf_getcapab+0x1d: jne +0x6 <xnf`xnf_getcapab+0x25> xnf`xnf_getcapab+0x1f: xorl %eax,%eax xnf`xnf_getcapab+0x21: movl %eax,(%rdx) xnf`xnf_getcapab+0x23: jmp +0xd <xnf`xnf_getcapab+0x32> xnf`xnf_getcapab+0x25: movl $0x4,(%rdx) ^ this needs to be a 2 xnf`xnf_getcapab+0x2b: jmp +0x5 <xnf`xnf_getcapab+0x32> xnf`xnf_getcapab+0x2d: cmpl $0x2,%esi xnf`xnf_getcapab+0x30: jne +0x7 <xnf`xnf_getcapab+0x39> xnf`xnf_getcapab+0x32: movl $0x1,%eax xnf`xnf_getcapab+0x37: jmp +0x2 <xnf`xnf_getcapab+0x3b> xnf`xnf_getcapab+0x39: xorl %eax,%eax xnf`xnf_getcapab+0x3b: leave xnf`xnf_getcapab+0x3c: ret - do the patching: [0]> xnf_getcapab+0x25/3 B xnf`xnf_getcapab+0x25: c7 2 4 [0]> xnf_getcapab+0x27/B xnf`xnf_getcapab+0x27: 4 [0]> xnf_getcapab+0x27/v 2 xnf`xnf_getcapab+0x27: 0x4 = 0x2 - check that it worked: [0]> xnf_getcapab+0x25::dis -n 1 xnf`xnf_getcapab+0x23: jmp +0xd <xnf`xnf_getcapab+0x32> xnf`xnf_getcapab+0x25: movl $0x2,(%rdx) xnf`xnf_getcapab+0x2b: jmp +0x5 <xnf`xnf_getcapab+0x32> [0]> :c - Everything should come up normally, with the exception that checksum offload should work properly. Don''t forget to get rid of the /etc/system tunable for xnf_checksum_offload before you do this! dme.
I will attempt to try this today. Since I know for a fact that my setup has this issue, I should try it :) Thank you for the instructions as to how to patch the system to try this out. That will be invaluable. Ciao Gavin
It''s working, as far as I can tell. :) Well done. The line I patched (in the nv66 build still) was: xnf`xnf_getcapab+0x23: movl $0x4,(%eax) which I patched to: xnf`xnf_getcapab+0x23: movl $0x2,(%eax) After that (and yes, I did remember to change /etc/system before shutting down) I could contact elsewhere via TCP no problem. I tested sshing to the dom0, to another host on my network, and to a remote host. All work fine. I will now re-enable the /etc/system line while awaiting a more permanent fix. Thanks for the bug-fix. On Dec 14, 2007 9:00 AM, Gavin Hurlbut <gjhurlbu@gmail.com> wrote:> I will attempt to try this today. Since I know for a fact that my > setup has this issue, I should try it :) > > Thank you for the instructions as to how to patch the system to try > this out. That will be invaluable. > > Ciao > Gavin
Gavin Hurlbut wrote:> It''s working, as far as I can tell. :) Well done.Thanks for testing.
It works for Xen 3.1 SNV76 DomU at CentOS 5.0 (64 bit). Patch has been applied when system rebooted after fresh install. /etc/system has never been touched. This message posted from opensolaris.org
It works for Xen 3.1 SNV 76 DomU at CentOS 5.0 Dom0 (64 bit) Patch has been applied during guest reboot after fresh install. /etc/system has never been touched. This message posted from opensolaris.org
Snapshots:- http://bderzhavets.blogspot.com/2007/12/testing-patch-for-6633784-checksum.html This message posted from opensolaris.org
Thanks to all of the reviewers and testers - the fix has been putback into Nevada. dme.
Sorry for unprofessional question, How to “bfu” to a current opensolaris build that included the above patch ? Actually, “bfu” 76 to 81 is required Is any manual available on the Net ? It’s not production box. This message posted from opensolaris.org _______________________________________________ xen-discuss mailing list xen-discuss@opensolaris.org
Boris Derzhavets wrote:> Sorry for unprofessional question, > How to “bfu” to a current opensolaris > build that included the above patch ? > Actually, “bfu” 76 to 81 is required > Is any manual available on the Net ? > It’s not production box.BFU is documented at http://opensolaris.org/os/community/on/devref_toc/devref_5/. dme. _______________________________________________ xen-discuss mailing list xen-discuss@opensolaris.org