From: Michael Neuling <michael.neuling@au1.ibm.com>
To: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>,
Michael Ellerman <mpe@ellerman.id.au>
Cc: stewart@linux.vnet.ibm.com, linuxppc-dev@ozlabs.org,
apopple@au1.ibm.com, oohall@gmail.com
Subject: Re: [PATCH v3 06/10] VAS: Define helpers to alloc/free windows
Date: Fri, 24 Mar 2017 19:59:19 +1100 [thread overview]
Message-ID: <1490345959.28113.67.camel@au1.ibm.com> (raw)
In-Reply-To: <1489721642-5657-7-git-send-email-sukadev@linux.vnet.ibm.com>
On Thu, 2017-03-16 at 20:33 -0700, Sukadev Bhattiprolu wrote:
> Define helpers to allocate/free VAS window objects. These will
> be used in follow-on patches when opening/closing windows.
>=20
> Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
> ---
> =C2=A0drivers/misc/vas/vas-window.c | 74 ++++++++++++++++++++++++++++++++=
+++++++++-
> -
> =C2=A01 file changed, 72 insertions(+), 2 deletions(-)
>=20
> diff --git a/drivers/misc/vas/vas-window.c b/drivers/misc/vas/vas-window.=
c
> index edf5c9f..9233bf5 100644
> --- a/drivers/misc/vas/vas-window.c
> +++ b/drivers/misc/vas/vas-window.c
> @@ -119,7 +119,7 @@ static void unmap_wc_mmio_bars(struct vas_window *win=
dow)
> =C2=A0 * OS/User Window Context (UWC) MMIO Base Address Region for the gi=
ven
> window.
> =C2=A0 * Map these bus addresses and save the mapped kernel addresses in =
@window.
> =C2=A0 */
> -int map_wc_mmio_bars(struct vas_window *window)
> +static int map_wc_mmio_bars(struct vas_window *window)
> =C2=A0{
> =C2=A0 int len;
> =C2=A0 uint64_t start;
> @@ -472,8 +472,78 @@ int init_winctx_regs(struct vas_window *window, stru=
ct
> vas_winctx *winctx)
> =C2=A0 return 0;
> =C2=A0}
> =C2=A0
> -/* stub for now */
> +DEFINE_SPINLOCK(vas_ida_lock);
> +
> +void vas_release_window_id(struct ida *ida, int winid)
> +{
> + spin_lock(&vas_ida_lock);
> + ida_remove(ida, winid);
> + spin_unlock(&vas_ida_lock);
> +}
> +
> +int vas_assign_window_id(struct ida *ida)
> +{
> + int rc, winid;
> +
> + rc =3D ida_pre_get(ida, GFP_KERNEL);
> + if (!rc)
> + return -EAGAIN;
> +
> + spin_lock(&vas_ida_lock);
> + rc =3D ida_get_new_above(ida, 0, &winid);
> + spin_unlock(&vas_ida_lock);
> +
> + if (rc)
> + return rc;
> +
> + if (winid > VAS_MAX_WINDOWS_PER_CHIP) {
> + pr_err("VAS: Too many (%d) open windows\n", winid);
> + vas_release_window_id(ida, winid);
> + return -EAGAIN;
> + }
> +
> + return winid;
> +}
> +
> +static void vas_window_free(struct vas_window *window)
> +{
> + unmap_wc_mmio_bars(window);
> + kfree(window->paste_addr_name);
> + kfree(window);
> +}
> +
> +static struct vas_window *vas_window_alloc(struct vas_instance *vinst, i=
nt
> id)
> +{
> + struct vas_window *window;
> +
> + window =3D kzalloc(sizeof(*window), GFP_KERNEL);
> + if (!window)
> + return NULL;
> +
> + window->vinst =3D vinst;
> + window->winid =3D id;
> +
> + if (map_wc_mmio_bars(window))
> + goto out_free;
> +
> + return window;
> +
> +out_free:
> + kfree(window);
> + return NULL;
> +}
> +
> =C2=A0int vas_window_reset(struct vas_instance *vinst, int winid)
>=20
This interface seems a little weird to me. Needing an alloc in a hardware r=
eset
path seems a bit strange.
Maybe the data structures are the issue. A window is a hardware construct.=
=20
Something that uses it should probably be called something else like a cont=
ext.=20
Something that references a window should just be the vas_instance + winid.=
=20
You should be able to reset this hardware window by referencing structures
already allocated. Something associated with the struct vas_instance.
Mikey
> =C2=A0{
> + struct vas_window *window;
> +
> + window =3D vas_window_alloc(vinst, winid);
> + if (!window)
> + return -ENOMEM;
> +
> + reset_window_regs(window);
> +
> + vas_window_free(window);
> +
> =C2=A0 return 0;
> =C2=A0}
next prev parent reply other threads:[~2017-03-24 8:59 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-17 3:33 [PATCH v3 00/10] Enable VAS Sukadev Bhattiprolu
2017-03-17 3:33 ` [PATCH v3 01/10] VAS: Define macros, register fields and structures Sukadev Bhattiprolu
2017-03-24 4:22 ` Michael Neuling
2017-03-24 21:30 ` Sukadev Bhattiprolu
2017-03-30 21:35 ` Sukadev Bhattiprolu
2017-03-17 3:33 ` [PATCH v3 02/10] Move GET_FIELD/SET_FIELD to vas.h Sukadev Bhattiprolu
2017-03-17 16:21 ` Dan Streetman
2017-03-17 3:33 ` [PATCH v3 03/10] VAS: Define vas_init() and vas_exit() Sukadev Bhattiprolu
2017-03-24 4:08 ` Michael Neuling
2017-03-24 4:26 ` Sukadev Bhattiprolu
2017-03-24 4:45 ` Michael Neuling
2017-03-24 21:21 ` Sukadev Bhattiprolu
2017-03-17 3:33 ` [PATCH v3 04/10] VAS: Define helpers for access MMIO regions Sukadev Bhattiprolu
2017-03-24 4:53 ` Michael Neuling
2017-03-24 21:18 ` Sukadev Bhattiprolu
2017-03-17 3:33 ` [PATCH v3 05/10] VAS: Define helpers to init window context Sukadev Bhattiprolu
2017-03-24 5:15 ` Michael Neuling
2017-03-24 21:47 ` Sukadev Bhattiprolu
2017-03-25 3:34 ` Michael Neuling
2017-03-17 3:33 ` [PATCH v3 06/10] VAS: Define helpers to alloc/free windows Sukadev Bhattiprolu
2017-03-24 8:59 ` Michael Neuling [this message]
2017-03-24 22:01 ` Sukadev Bhattiprolu
2017-03-17 3:33 ` [PATCH v3 07/10] VAS: Define vas_rx_win_open() interface Sukadev Bhattiprolu
2017-03-17 3:34 ` [PATCH v3 08/10] VAS: Define vas_win_close() interface Sukadev Bhattiprolu
2017-03-17 3:34 ` [PATCH v3 09/10] VAS: Define vas_tx_win_open() Sukadev Bhattiprolu
2017-03-17 3:34 ` [PATCH v3 10/10] VAS: Define copy/paste interfaces Sukadev Bhattiprolu
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=1490345959.28113.67.camel@au1.ibm.com \
--to=michael.neuling@au1.ibm.com \
--cc=apopple@au1.ibm.com \
--cc=linuxppc-dev@ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=oohall@gmail.com \
--cc=stewart@linux.vnet.ibm.com \
--cc=sukadev@linux.vnet.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).