H. Peter Anvin
2014-Jul-14 02:26 UTC
[syslinux] [syslinux:master] PXE ISR: Force polling on select hardware WORKAROUND
On 07/13/2014 10:54 AM, syslinux-bot for Gene Cumm wrote:> Commit-ID: 3741886cb700e1017d70f1753f013fa10f4d9272 > Gitweb: http://www.syslinux.org/commit/3741886cb700e1017d70f1753f013fa10f4d9272 > Author: Gene Cumm <gene.cumm at gmail.com> > AuthorDate: Sun, 13 Jul 2014 11:18:50 -0400 > Committer: Gene Cumm <gene.cumm at gmail.com> > CommitDate: Sun, 13 Jul 2014 11:18:50 -0400 > > PXE ISR: Force polling on select hardware WORKAROUND > > Like 2fe3a7bd, certain Dell machines (OptiPlex 990) state interrupts > should work but effectively don't. Force polling. > > Reported-by: Alexander Perlis <aperlis at math.lsu.edu> > Signed-off-by: Gene Cumm <gene.cumm at gmail.com> > > --- > core/fs/pxe/isr.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/core/fs/pxe/isr.c b/core/fs/pxe/isr.c > index d0a0bf9..ddaadf9 100644 > --- a/core/fs/pxe/isr.c > +++ b/core/fs/pxe/isr.c > @@ -266,11 +266,10 @@ void pxe_start_isr(void) > dprintf("pxe_start_isr: trying poll by model\n"); > int hwad = ((int)MAC[0] << 16) + ((int)MAC[1] << 8) + MAC[2]; > dprintf("pxe_start_isr: got %06x %04x\n", hwad, pxe_undi_iface.ServiceFlags); > - if (hwad == 0x000023ae) { > - if (pxe_undi_iface.ServiceFlags == 0xdc1b) { > + if ((hwad == 0x000023ae) && (pxe_undi_iface.ServiceFlags == 0xdc1b) || > + (hwad == 0x00180373) && (pxe_undi_iface.ServiceFlags == 0xdc1b)) { > asm volatile("orb $1,%0" : "+m" (pxe_need_poll)); > dprintf("pxe_start_isr: forcing pxe_need_poll by model\n"); > - } > } > }Thank you. I'm wondering if we also should force polling on if we have gotten no interrupts after a number of transmit attempts. -hpa
Gene Cumm
2014-Jul-14 03:15 UTC
[syslinux] [syslinux:master] PXE ISR: Force polling on select hardware WORKAROUND
On Sun, Jul 13, 2014 at 10:26 PM, H. Peter Anvin <hpa at zytor.com> wrote:> On 07/13/2014 10:54 AM, syslinux-bot for Gene Cumm wrote: >> Commit-ID: 3741886cb700e1017d70f1753f013fa10f4d9272 >> Gitweb: http://www.syslinux.org/commit/3741886cb700e1017d70f1753f013fa10f4d9272 >> Author: Gene Cumm <gene.cumm at gmail.com> >> AuthorDate: Sun, 13 Jul 2014 11:18:50 -0400 >> Committer: Gene Cumm <gene.cumm at gmail.com> >> CommitDate: Sun, 13 Jul 2014 11:18:50 -0400 >> >> PXE ISR: Force polling on select hardware WORKAROUND >> >> Like 2fe3a7bd, certain Dell machines (OptiPlex 990) state interrupts >> should work but effectively don't. Force polling. >> >> Reported-by: Alexander Perlis <aperlis at math.lsu.edu> >> Signed-off-by: Gene Cumm <gene.cumm at gmail.com> >> >> --- >> core/fs/pxe/isr.c | 5 ++--- >> 1 file changed, 2 insertions(+), 3 deletions(-) >> >> diff --git a/core/fs/pxe/isr.c b/core/fs/pxe/isr.c >> index d0a0bf9..ddaadf9 100644 >> --- a/core/fs/pxe/isr.c >> +++ b/core/fs/pxe/isr.c >> @@ -266,11 +266,10 @@ void pxe_start_isr(void) >> dprintf("pxe_start_isr: trying poll by model\n"); >> int hwad = ((int)MAC[0] << 16) + ((int)MAC[1] << 8) + MAC[2]; >> dprintf("pxe_start_isr: got %06x %04x\n", hwad, pxe_undi_iface.ServiceFlags); >> - if (hwad == 0x000023ae) { >> - if (pxe_undi_iface.ServiceFlags == 0xdc1b) { >> + if ((hwad == 0x000023ae) && (pxe_undi_iface.ServiceFlags == 0xdc1b) || >> + (hwad == 0x00180373) && (pxe_undi_iface.ServiceFlags == 0xdc1b)) { >> asm volatile("orb $1,%0" : "+m" (pxe_need_poll)); >> dprintf("pxe_start_isr: forcing pxe_need_poll by model\n"); >> - } >> } >> } > > Thank you. I'm wondering if we also should force polling on if we have > gotten no interrupts after a number of transmit attempts. > > -hpa >core/lwip/src/netif/undiif.c:513 is supposed to address this at least in part but in at least this instance did not. I wonder if it's even doing its job. Basing the timer on last interrupt is probably a better idea. -- -Gene
Shantanu Gadgil
2014-Jul-14 08:35 UTC
[syslinux] [syslinux:master] PXE ISR: Force polling on select hardware WORKAROUND
Hi all, Based on the commitdiff comments, this looks like what I (and many many others) have been plagued with. Machines typically affected: DELL PowerEdge 2950, R720, R810, etc. (server class) DELL PowerEdge 960 (desktop class) Eagerly awaiting the next pre-release to test this out! : thumbs up : : thumbs up : Regards, Shantanu