grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH V2 2/4] ofnet: move the allocation of the transmit buffer int


From: Daniel Kiper
Subject: Re: [PATCH V2 2/4] ofnet: move the allocation of the transmit buffer into a function
Date: Mon, 5 Dec 2016 16:52:04 +0100
User-agent: Mutt/1.3.28i

On Fri, Dec 02, 2016 at 06:10:03PM +0300, Stanislav Kholmanskikh wrote:
> In the current code search_net_devices() uses the "alloc-mem" command
> from the IEEE1275 User Interface for allocation of the transmit buffer
> for the case when GRUB_IEEE1275_FLAG_VIRT_TO_REAL_BROKEN is set.
>
> I don't have hardware where this flag is set to verify if this
> workaround is still needed. However, further changes to ofnet will
> require to execute this workaround one more time. Therefore, to
> avoid possible duplication of code I'm moving this piece of
> code into a function.
>
> Signed-off-by: Stanislav Kholmanskikh <address@hidden>
> ---
>  grub-core/net/drivers/ieee1275/ofnet.c |   71 
> ++++++++++++++++++++------------
>  1 files changed, 44 insertions(+), 27 deletions(-)
>
> diff --git a/grub-core/net/drivers/ieee1275/ofnet.c 
> b/grub-core/net/drivers/ieee1275/ofnet.c
> index 8332d34..25559c8 100644
> --- a/grub-core/net/drivers/ieee1275/ofnet.c
> +++ b/grub-core/net/drivers/ieee1275/ofnet.c
> @@ -298,6 +298,48 @@ grub_ieee1275_net_config_real (const char *devpath, char 
> **device, char **path,
>    }
>  }
>
> +/* Allocate memory with alloc-mem */
> +static void *
> +grub_ieee1275_alloc_mem (grub_size_t len)
> +{
> +  struct alloc_args
> +  {
> +    struct grub_ieee1275_common_hdr common;
> +    grub_ieee1275_cell_t method;
> +    grub_ieee1275_cell_t len;
> +    grub_ieee1275_cell_t catch;
> +    grub_ieee1275_cell_t result;
> +  }
> +  args;
> +
> +  if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_CANNOT_INTERPRET))
> +    {
> +      grub_error (GRUB_ERR_UNKNOWN_COMMAND, N_("interpret is not 
> supported"));
> +      return NULL;
> +    }
> +
> +  INIT_IEEE1275_COMMON (&args.common, "interpret", 2, 2);
> +  args.len = len;
> +  args.method = (grub_ieee1275_cell_t) "alloc-mem";
> +
> +  if (IEEE1275_CALL_ENTRY_FN (&args) == -1 || args.catch)
> +    {
> +      grub_error (GRUB_ERR_INVALID_COMMAND, N_("alloc-mem failed"));
> +      return NULL;
> +    }
> +  else
> +    return (void *)args.result;
> +}
> +
> +static void *
> +ofnet_alloc_netbuf (grub_size_t len)
> +{
> +  if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_VIRT_TO_REAL_BROKEN))
> +    return grub_ieee1275_alloc_mem (len);
> +  else
> +    return grub_zalloc (len);
> +}
> +
>  static int
>  search_net_devices (struct grub_ieee1275_devalias *alias)
>  {
> @@ -414,39 +456,14 @@ search_net_devices (struct grub_ieee1275_devalias 
> *alias)
>
>    card->txbufsize = ALIGN_UP (card->mtu, 64) + 256;
>
> -  if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_VIRT_TO_REAL_BROKEN))
> -    {
> -      struct alloc_args
> -      {
> -     struct grub_ieee1275_common_hdr common;
> -     grub_ieee1275_cell_t method;
> -     grub_ieee1275_cell_t len;
> -     grub_ieee1275_cell_t catch;
> -     grub_ieee1275_cell_t result;
> -      }
> -      args;
> -      INIT_IEEE1275_COMMON (&args.common, "interpret", 2, 2);
> -      args.len = card->txbufsize;
> -      args.method = (grub_ieee1275_cell_t) "alloc-mem";
> -
> -      if (IEEE1275_CALL_ENTRY_FN (&args) == -1
> -       || args.catch)
> -     {
> -       card->txbuf = 0;
> -       grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("out of memory"));
> -     }
> -      else
> -     card->txbuf = (void *) args.result;
> -    }
> -  else
> -    card->txbuf = grub_zalloc (card->txbufsize);
> +  card->txbuf = ofnet_alloc_netbuf (card->txbufsize);
>    if (!card->txbuf)
>      {
>        grub_free (ofdata->path);
>        grub_free (ofdata);
>        grub_free (card);
>        grub_print_error ();
> -      return 0;
> +      return 1;

Hmmm... This looks like an error...

Daniel



reply via email to

[Prev in Thread] Current Thread [Next in Thread]