bge(4) one packet wedge
Pyun YongHyeon
pyunyh at gmail.com
Thu Aug 24 01:47:49 UTC 2006
On Wed, Aug 23, 2006 at 12:53:49PM -0700, David Christensen wrote:
> This "lost interrupt" type of problem is addressed by the use of the
> status_tag
> field in the status block. (Listed as bge_rsvd0 in the bge_status_block
> structure).
> Everytime the status block is updated a new tag value is written to the
> status block.
> When the ISR starts the driver should record the status_tag value. At
> the end
> of the ISR, the driver should compare the current status_tag value is
> the status
> block with the value recorded on entry to the ISR. If the values are
> the same
> then no additional status block updates have occurred so there shouldn't
> be
> any packets hanging around. If the values are different then additional
> packets
> or completions are waiting around so the ISR should loop around again.
> At the
> end of the ISR the driver will write the status_tag value it last
> handled to a
> mailbox register, letting the hardware know the last status block update
> handled.
> If necessary the hardware will generate a new interrupt and start the
> process over
> again.
>
> This entire process should be included in the Linux driver, I don't see
> it being
> used in the bge driver (bge_intr()).
>
Hi,
I have a question too.
How we know generated interrupt is ours?
It seems that status block could be updated before/after generation
of an interrupt. If the interrupt is shared with other devices
what is correct way to know the origion of the interrupt?
--
Regards,
Pyun YongHyeon
More information about the freebsd-net
mailing list