[syslinux] [PATCH][git-pull] lwIP PXE fixes

Matt Fleming matt at console-pimps.org
Fri Sep 20 02:15:22 PDT 2013


On Tue, 17 Sep, at 04:23:08PM, Gene Cumm wrote:
> On Tue, Sep 17, 2013 at 9:36 AM, Matt Fleming <matt at console-pimps.org> wrote:
> > On Tue, 03 Sep, at 07:31:52PM, Gene Cumm wrote:
> >> The following changes since commit 6438fbcb6cb7e0cd40e4bb3681ada047fe77ffdd:
> >>   Gene Cumm (1):
> >>         Allow for UNDIIF_ID_DEBUG in 1 mk line
> >>
> >> are available in the git repository at:
> >>
> >>   git://github.com/geneC/syslinux.git elflink-pxe-fixes-for-mfleming
> >>   https://github.com/geneC/syslinux/tree/elflink-pxe-fixes-for-mfleming
> >>
> >> Gene Cumm (12):
> >>       core/lwip/undi: Improve UNDIIF_ID_DEBUG messages
> >>       core: mbox/semaphore NULL checks
> >>       core: make mbox_post()/__sem_down_slow() check if valid
> >>       PXELINUX: Use sendto() instead of connect()/send()/disconnect()
> >>       PXELINUX: allow forcing poll by macro
> >>       core: dprintf() the banner.
> >>       undiif: show thread of execution on UNDIIF_ID_DEBUG
> >>       PXELINUX: specify PXE/lwIP
> >>       com32: Define ddprintf() macro
> >>       PXE: use ddprintf macro
> >>       core/lwip: Fix NULL pointer check
> >>       PXE ISR: Force polling on select hardware WORKAROUND
> >>
> >
> > Thanks Gene. I've pulled this into the elflink branch.
> >
> > Could you summarise what scenario these changes improve and on which
> > hardware?
> 
> The primary things are "Use sendto() instead of
> connect()/send()/disconnect()" prevents a race-condition on systems
> that have functional interrupts (iPXE and the below Dell systems).
> Without this, the reply packet could be received by the core prior to
> the disconnect() call, see that it doesn't have a matching PCB
> (protocol control block, iirc) since the reply has a different far-end
> UDP port than the original request, and lwIP will discard the packet
> before PXELINUX can see it.
> 
> On select platforms (Dell OptiPlex 760, Dell OptiPlex 960; perhaps
> more), the interrupt appears to go "deaf" after a few seconds.  By
> matching MAC OUI and flags value, force polling on these select
> platforms.  I'm not sure if there's any better data available that
> shallow in the core.  I believe PCI IDs can be fetched with functions
> from other libraries and the UUID and DMI data (the most likely to be
> useful is SYSPRODUCT) is available in ldlinux.c32.

OK, these two paragraphs are super useful. Do the following modified
commit messges look OK?

commit 2bc2fb9d8d2df18ea4ac9b6394b550b9ea199ee7
Author: Gene Cumm <gene.cumm at gmail.com>
Date:   Thu Aug 15 22:20:46 2013 -0400

    PXELINUX: Use sendto() instead of connect()/send()/disconnect()
    
    This commit prevents a race-condition on systems that have functional
    interrupts (iPXE and the below Dell systems).  Without this, the reply
    packet could be received by the core prior to the disconnect() call, see
    that it doesn't have a matching PCB (protocol control block, iirc) since
    the reply has a different far-end UDP port than the original request,
    and lwIP will discard the packet before PXELINUX can see it.
    
    [ Expanded commit message - Matt]
    
    Signed-off-by: Gene Cumm <gene.cumm at gmail.com>
    Signed-off-by: Matt Fleming <matt.fleming at intel.com>


commit 734e2d57f3ad7882aedbd3a039fb0950468f2fbd
Author: Gene Cumm <gene.cumm at gmail.com>
Date:   Tue Sep 3 19:19:38 2013 -0400

    PXE ISR: Force polling on select hardware WORKAROUND
    
    By OUI == 00:23:ae and flags == 0xdc1b
    
    On select platforms (Dell OptiPlex 760, Dell OptiPlex 960; perhaps
    more), the interrupt appears to go "deaf" after a few seconds.  By
    matching MAC OUI and flags value, force polling on these select
    platforms.  I'm not sure if there's any better data available that
    shallow in the core.  I believe PCI IDs can be fetched with functions
    from other libraries and the UUID and DMI data (the most likely to be
    useful is SYSPRODUCT) is available in ldlinux.c32.
    
    [ Expanded commit message - Matt ]
    
    Signed-off-by: Gene Cumm <gene.cumm at gmail.com>
    Signed-off-by: Matt Fleming <matt.fleming at intel.com>



-- 
Matt Fleming, Intel Open Source Technology Center


More information about the Syslinux mailing list