[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
[PATCH V2 4/4] ofnet: implement the receive buffer, Stanislav Kholmanskikh, 2016/12/02