All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrei Borzenkov <arvidjaar@gmail.com>
To: "Vladimir 'phcoder' Serbinenko" <phcoder@gmail.com>
Cc: The development of GRUB 2 <grub-devel@gnu.org>, mchang@suse.com
Subject: Re: [PATCH 1/3] efinet: handle get_status() properly
Date: Thu, 6 Aug 2015 06:42:00 +0300	[thread overview]
Message-ID: <20150806064200.49ef8397@opensuse.site> (raw)
In-Reply-To: <CAEaD8JNnLe-FQbbpbEyYgEyHrkrWLmFkfXZDcyfSZat2SytM9Q@mail.gmail.com>

В Wed, 5 Aug 2015 22:32:13 +0200
"Vladimir 'phcoder' Serbinenko" <phcoder@gmail.com> пишет:

> This patch improperly assumes that GRUB is the only thing in EFI that
> transmits.

Actually since recently we try to ensure that grub *is* the only user
of network interface. 

>           Your patch surely fixed your machine but likely breaks some
> other machines. Could you instead make an explicit check for (void *)1 and
> add a comment on which machine it's necessary?

Yes, this patch should add verbose comment to code explaining a) what
problem it tries to fix and b) why ignoring EFI specification is
justified here. Also mention actual hardware/firmware implementation
where this bug happens for future reference.

Looking at other implementations gPXE opens SNP non-exclusively and
explicitly checks returned address. That corresponds to what grub
did in the past. iPXE opens SNP exclusively and assumes anything !=
NULL means transmit completed (it seems to start off with gPXE model).

> Le 5 août 2015 10:28 PM, "Josef Bacik" <jbacik@fb.com> a écrit :
> 
> > On 08/05/2015 04:04 PM, Andrei Borzenkov wrote:
> >
> >> В Wed, 5 Aug 2015 14:36:37 -0400
> >> Josef Bacik <jbacik@fb.com> пишет:
> >>
> >> The EFI SNP documentation isn't super clear on the value that is returned
> >>> in
> >>> txbuf when calling into GetStatus.  The documentation says its the
> >>> pointer to
> >>> the recycle buffer, but the documentation for Transmit() says that it
> >>> should be
> >>> the pointer to the buffer that we transmitted.
> >>>
> >>
> >> Actually it says "Recycled transmit buffer address" and further
> >> "GetStatus() until the transmitted buffer shows up in the recycled
> >> transmit buffer" so it looks reasonably clear to me.
> >>
> >>                                                On the boxes I'm using
> >>> it's just
> >>> a random pointer (usually 0x1).  It is definitely transmitting stuff,
> >>> but the
> >>> get_status call is not returning the pointer to the txbuf we passed in.
> >>>
> >>
> >> Which sounds like firmware bug. To be sure - you observe it also using
> >> current GIT master?
> >>
> >>
> > This is on git master as of last week, so I have your latest patch
> >
> > efinet: enable hardware filters when opening interface
> >
> > and it was still happening.  I know what Transmit() says, but GetStatus()
> > says it'll just be a pointer to the recycled transmit buffer address, which
> > to me could mean the pointer to whatever the internal queue was being used
> > by UEFI.  Anyway that's not important, what is important is that the
> > current code doesn't work with hardware that exists in the wild.  If it's a
> > firmware bug then fine, what do users do if they have buggy firmware that
> > isn't being updated anymore?  I think making grub more tolerant to crappy
> > firmware is a good thing.  Thanks,
> >
> > Josef
> >
> > _______________________________________________
> > Grub-devel mailing list
> > Grub-devel@gnu.org
> > https://lists.gnu.org/mailman/listinfo/grub-devel
> >



  parent reply	other threads:[~2015-08-06  3:42 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-05 18:36 [PATCH 1/3] efinet: handle get_status() properly Josef Bacik
2015-08-05 18:36 ` [PATCH 2/3] net: add local route when creating link local ipv6 interface Josef Bacik
2015-08-07  8:38   ` Andrei Borzenkov
2015-08-05 18:36 ` [PATCH 3/3] net: fix ipv6 routing Josef Bacik
2015-08-09 14:58   ` Andrei Borzenkov
2015-08-10 14:00     ` Josef Bacik
2015-08-10 14:07       ` Andrei Borzenkov
2015-08-05 20:04 ` [PATCH 1/3] efinet: handle get_status() properly Andrei Borzenkov
2015-08-05 20:26   ` Josef Bacik
2015-08-05 20:32     ` Vladimir 'phcoder' Serbinenko
2015-08-05 20:39       ` Josef Bacik
2015-08-05 20:50         ` Josef Bacik
2015-08-05 20:52           ` Vladimir 'phcoder' Serbinenko
2015-08-06  3:42       ` Andrei Borzenkov [this message]
2015-08-06 14:26         ` Josef Bacik
2015-08-05 20:57     ` Seth Goldberg
2015-08-06 17:49 ` [PATCH V2] efinet: handle get_status() on buggy firmware properly Josef Bacik
2015-08-09 13:48   ` Andrei Borzenkov
  -- strict thread matches above, loose matches on Subject: below --
2015-08-05 17:50 [PATCH 0/3] fix ipv6 support Josef Bacik
2015-08-05 17:50 ` [PATCH 1/3] efinet: handle get_status() properly Josef Bacik

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150806064200.49ef8397@opensuse.site \
    --to=arvidjaar@gmail.com \
    --cc=grub-devel@gnu.org \
    --cc=mchang@suse.com \
    --cc=phcoder@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.