diff mbox

[1/9] drm/xen-front: Introduce Xen para-virtualized frontend driver

Message ID 1519200222-20623-2-git-send-email-andr2000@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Oleksandr Andrushchenko Feb. 21, 2018, 8:03 a.m. UTC
From: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>

Introduce skeleton of the para-virtualized Xen display
frontend driver. This patch only adds required
essential stubs.

Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
---
 drivers/gpu/drm/Kconfig             |  2 +
 drivers/gpu/drm/Makefile            |  1 +
 drivers/gpu/drm/xen/Kconfig         | 17 ++++++++
 drivers/gpu/drm/xen/Makefile        |  5 +++
 drivers/gpu/drm/xen/xen_drm_front.c | 83 +++++++++++++++++++++++++++++++++++++
 5 files changed, 108 insertions(+)
 create mode 100644 drivers/gpu/drm/xen/Kconfig
 create mode 100644 drivers/gpu/drm/xen/Makefile
 create mode 100644 drivers/gpu/drm/xen/xen_drm_front.c

Comments

Jürgen Groß Feb. 21, 2018, 8:19 a.m. UTC | #1
On 21/02/18 09:03, Oleksandr Andrushchenko wrote:
> From: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
> 
> Introduce skeleton of the para-virtualized Xen display
> frontend driver. This patch only adds required
> essential stubs.
> 
> Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
> ---
>  drivers/gpu/drm/Kconfig             |  2 +
>  drivers/gpu/drm/Makefile            |  1 +
>  drivers/gpu/drm/xen/Kconfig         | 17 ++++++++
>  drivers/gpu/drm/xen/Makefile        |  5 +++
>  drivers/gpu/drm/xen/xen_drm_front.c | 83 +++++++++++++++++++++++++++++++++++++
>  5 files changed, 108 insertions(+)
>  create mode 100644 drivers/gpu/drm/xen/Kconfig
>  create mode 100644 drivers/gpu/drm/xen/Makefile
>  create mode 100644 drivers/gpu/drm/xen/xen_drm_front.c
> 
> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
> index deeefa7a1773..757825ac60df 100644
> --- a/drivers/gpu/drm/Kconfig
> +++ b/drivers/gpu/drm/Kconfig
> @@ -289,6 +289,8 @@ source "drivers/gpu/drm/pl111/Kconfig"
>  
>  source "drivers/gpu/drm/tve200/Kconfig"
>  
> +source "drivers/gpu/drm/xen/Kconfig"
> +
>  # Keep legacy drivers last
>  
>  menuconfig DRM_LEGACY
> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
> index 50093ff4479b..9d66657ea117 100644
> --- a/drivers/gpu/drm/Makefile
> +++ b/drivers/gpu/drm/Makefile
> @@ -103,3 +103,4 @@ obj-$(CONFIG_DRM_MXSFB)	+= mxsfb/
>  obj-$(CONFIG_DRM_TINYDRM) += tinydrm/
>  obj-$(CONFIG_DRM_PL111) += pl111/
>  obj-$(CONFIG_DRM_TVE200) += tve200/
> +obj-$(CONFIG_DRM_XEN) += xen/
> diff --git a/drivers/gpu/drm/xen/Kconfig b/drivers/gpu/drm/xen/Kconfig
> new file mode 100644
> index 000000000000..4cca160782ab
> --- /dev/null
> +++ b/drivers/gpu/drm/xen/Kconfig
> @@ -0,0 +1,17 @@
> +config DRM_XEN
> +	bool "DRM Support for Xen guest OS"
> +	depends on XEN
> +	help
> +	  Choose this option if you want to enable DRM support
> +	  for Xen.
> +
> +config DRM_XEN_FRONTEND
> +	tristate "Para-virtualized frontend driver for Xen guest OS"
> +	depends on DRM_XEN
> +	depends on DRM
> +	select DRM_KMS_HELPER
> +	select VIDEOMODE_HELPERS
> +	select XEN_XENBUS_FRONTEND
> +	help
> +	  Choose this option if you want to enable a para-virtualized
> +	  frontend DRM/KMS driver for Xen guest OSes.
> diff --git a/drivers/gpu/drm/xen/Makefile b/drivers/gpu/drm/xen/Makefile
> new file mode 100644
> index 000000000000..967074d348f6
> --- /dev/null
> +++ b/drivers/gpu/drm/xen/Makefile
> @@ -0,0 +1,5 @@
> +# SPDX-License-Identifier: GPL-2.0
> +
> +drm_xen_front-objs := xen_drm_front.o
> +
> +obj-$(CONFIG_DRM_XEN_FRONTEND) += drm_xen_front.o
> diff --git a/drivers/gpu/drm/xen/xen_drm_front.c b/drivers/gpu/drm/xen/xen_drm_front.c
> new file mode 100644
> index 000000000000..fd372fb464a1
> --- /dev/null
> +++ b/drivers/gpu/drm/xen/xen_drm_front.c
> @@ -0,0 +1,83 @@
> +/*
> + *  Xen para-virtual DRM device
> + *
> + *   This program is free software; you can redistribute it and/or modify
> + *   it under the terms of the GNU General Public License as published by
> + *   the Free Software Foundation; either version 2 of the License, or
> + *   (at your option) any later version.
> + *
> + *   This program is distributed in the hope that it will be useful,
> + *   but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *   GNU General Public License for more details.

Use SPDX identifier instead (same applies for all other new
sources):

// SPDX-License-Identifier: GPL-2.0

> + *
> + * Copyright (C) 2016-2018 EPAM Systems Inc.
> + *
> + * Author: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
> + */
> +
> +#include <drm/drmP.h>
> +
> +#include <xen/platform_pci.h>
> +#include <xen/xen.h>
> +#include <xen/xenbus.h>
> +
> +#include <xen/interface/io/displif.h>
> +
> +static void backend_on_changed(struct xenbus_device *xb_dev,
> +		enum xenbus_state backend_state)
> +{
> +}
> +
> +static int xen_drv_probe(struct xenbus_device *xb_dev,
> +		const struct xenbus_device_id *id)
> +{
> +	return 0;
> +}
> +
> +static int xen_drv_remove(struct xenbus_device *dev)
> +{
> +	return 0;
> +}
> +
> +static const struct xenbus_device_id xen_drv_ids[] = {
> +	{ XENDISPL_DRIVER_NAME },
> +	{ "" }
> +};
> +
> +static struct xenbus_driver xen_driver = {
> +	.ids = xen_drv_ids,
> +	.probe = xen_drv_probe,
> +	.remove = xen_drv_remove,
> +	.otherend_changed = backend_on_changed,
> +};
> +
> +static int __init xen_drv_init(void)
> +{
> +	if (!xen_domain())
> +		return -ENODEV;
> +
> +	if (xen_initial_domain()) {
> +		DRM_ERROR(XENDISPL_DRIVER_NAME " cannot run in initial domain\n");
> +		return -ENODEV;
> +	}

Why not? Wouldn't that be possible in case of the backend living in a
driver domain?


Juergen
Oleksandr Andrushchenko Feb. 21, 2018, 8:47 a.m. UTC | #2
On 02/21/2018 10:19 AM, Juergen Gross wrote:
> On 21/02/18 09:03, Oleksandr Andrushchenko wrote:
>> From: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
>>
>> Introduce skeleton of the para-virtualized Xen display
>> frontend driver. This patch only adds required
>> essential stubs.
>>
>> Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
>> ---
>>   drivers/gpu/drm/Kconfig             |  2 +
>>   drivers/gpu/drm/Makefile            |  1 +
>>   drivers/gpu/drm/xen/Kconfig         | 17 ++++++++
>>   drivers/gpu/drm/xen/Makefile        |  5 +++
>>   drivers/gpu/drm/xen/xen_drm_front.c | 83 +++++++++++++++++++++++++++++++++++++
>>   5 files changed, 108 insertions(+)
>>   create mode 100644 drivers/gpu/drm/xen/Kconfig
>>   create mode 100644 drivers/gpu/drm/xen/Makefile
>>   create mode 100644 drivers/gpu/drm/xen/xen_drm_front.c
>>
>> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
>> index deeefa7a1773..757825ac60df 100644
>> --- a/drivers/gpu/drm/Kconfig
>> +++ b/drivers/gpu/drm/Kconfig
>> @@ -289,6 +289,8 @@ source "drivers/gpu/drm/pl111/Kconfig"
>>   
>>   source "drivers/gpu/drm/tve200/Kconfig"
>>   
>> +source "drivers/gpu/drm/xen/Kconfig"
>> +
>>   # Keep legacy drivers last
>>   
>>   menuconfig DRM_LEGACY
>> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
>> index 50093ff4479b..9d66657ea117 100644
>> --- a/drivers/gpu/drm/Makefile
>> +++ b/drivers/gpu/drm/Makefile
>> @@ -103,3 +103,4 @@ obj-$(CONFIG_DRM_MXSFB)	+= mxsfb/
>>   obj-$(CONFIG_DRM_TINYDRM) += tinydrm/
>>   obj-$(CONFIG_DRM_PL111) += pl111/
>>   obj-$(CONFIG_DRM_TVE200) += tve200/
>> +obj-$(CONFIG_DRM_XEN) += xen/
>> diff --git a/drivers/gpu/drm/xen/Kconfig b/drivers/gpu/drm/xen/Kconfig
>> new file mode 100644
>> index 000000000000..4cca160782ab
>> --- /dev/null
>> +++ b/drivers/gpu/drm/xen/Kconfig
>> @@ -0,0 +1,17 @@
>> +config DRM_XEN
>> +	bool "DRM Support for Xen guest OS"
>> +	depends on XEN
>> +	help
>> +	  Choose this option if you want to enable DRM support
>> +	  for Xen.
>> +
>> +config DRM_XEN_FRONTEND
>> +	tristate "Para-virtualized frontend driver for Xen guest OS"
>> +	depends on DRM_XEN
>> +	depends on DRM
>> +	select DRM_KMS_HELPER
>> +	select VIDEOMODE_HELPERS
>> +	select XEN_XENBUS_FRONTEND
>> +	help
>> +	  Choose this option if you want to enable a para-virtualized
>> +	  frontend DRM/KMS driver for Xen guest OSes.
>> diff --git a/drivers/gpu/drm/xen/Makefile b/drivers/gpu/drm/xen/Makefile
>> new file mode 100644
>> index 000000000000..967074d348f6
>> --- /dev/null
>> +++ b/drivers/gpu/drm/xen/Makefile
>> @@ -0,0 +1,5 @@
>> +# SPDX-License-Identifier: GPL-2.0
>> +
>> +drm_xen_front-objs := xen_drm_front.o
>> +
>> +obj-$(CONFIG_DRM_XEN_FRONTEND) += drm_xen_front.o
>> diff --git a/drivers/gpu/drm/xen/xen_drm_front.c b/drivers/gpu/drm/xen/xen_drm_front.c
>> new file mode 100644
>> index 000000000000..fd372fb464a1
>> --- /dev/null
>> +++ b/drivers/gpu/drm/xen/xen_drm_front.c
>> @@ -0,0 +1,83 @@
>> +/*
>> + *  Xen para-virtual DRM device
>> + *
>> + *   This program is free software; you can redistribute it and/or modify
>> + *   it under the terms of the GNU General Public License as published by
>> + *   the Free Software Foundation; either version 2 of the License, or
>> + *   (at your option) any later version.
>> + *
>> + *   This program is distributed in the hope that it will be useful,
>> + *   but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> + *   GNU General Public License for more details.
> Use SPDX identifier instead (same applies for all other new
> sources):
>
> // SPDX-License-Identifier: GPL-2.0
Will update, thank you
>> + *
>> + * Copyright (C) 2016-2018 EPAM Systems Inc.
>> + *
>> + * Author: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
>> + */
>> +
>> +#include <drm/drmP.h>
>> +
>> +#include <xen/platform_pci.h>
>> +#include <xen/xen.h>
>> +#include <xen/xenbus.h>
>> +
>> +#include <xen/interface/io/displif.h>
>> +
>> +static void backend_on_changed(struct xenbus_device *xb_dev,
>> +		enum xenbus_state backend_state)
>> +{
>> +}
>> +
>> +static int xen_drv_probe(struct xenbus_device *xb_dev,
>> +		const struct xenbus_device_id *id)
>> +{
>> +	return 0;
>> +}
>> +
>> +static int xen_drv_remove(struct xenbus_device *dev)
>> +{
>> +	return 0;
>> +}
>> +
>> +static const struct xenbus_device_id xen_drv_ids[] = {
>> +	{ XENDISPL_DRIVER_NAME },
>> +	{ "" }
>> +};
>> +
>> +static struct xenbus_driver xen_driver = {
>> +	.ids = xen_drv_ids,
>> +	.probe = xen_drv_probe,
>> +	.remove = xen_drv_remove,
>> +	.otherend_changed = backend_on_changed,
>> +};
>> +
>> +static int __init xen_drv_init(void)
>> +{
>> +	if (!xen_domain())
>> +		return -ENODEV;
>> +
>> +	if (xen_initial_domain()) {
>> +		DRM_ERROR(XENDISPL_DRIVER_NAME " cannot run in initial domain\n");
>> +		return -ENODEV;
>> +	}
> Why not? Wouldn't that be possible in case of the backend living in a
> driver domain?
It is possible (and in my use-case backend indeed runs in
a driver domain). I was just not sure if it is really a
good idea to allow that. If you think this is ok, then
I'll remove this check
>
> Juergen
Thank you,
Oleksandr
Jürgen Groß Feb. 21, 2018, 9:09 a.m. UTC | #3
On 21/02/18 09:47, Oleksandr Andrushchenko wrote:
> On 02/21/2018 10:19 AM, Juergen Gross wrote:
>> On 21/02/18 09:03, Oleksandr Andrushchenko wrote:
>>> From: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
>>>
>>> Introduce skeleton of the para-virtualized Xen display
>>> frontend driver. This patch only adds required
>>> essential stubs.
>>>
>>> Signed-off-by: Oleksandr Andrushchenko
>>> <oleksandr_andrushchenko@epam.com>
>>> ---
>>>   drivers/gpu/drm/Kconfig             |  2 +
>>>   drivers/gpu/drm/Makefile            |  1 +
>>>   drivers/gpu/drm/xen/Kconfig         | 17 ++++++++
>>>   drivers/gpu/drm/xen/Makefile        |  5 +++
>>>   drivers/gpu/drm/xen/xen_drm_front.c | 83
>>> +++++++++++++++++++++++++++++++++++++
>>>   5 files changed, 108 insertions(+)
>>>   create mode 100644 drivers/gpu/drm/xen/Kconfig
>>>   create mode 100644 drivers/gpu/drm/xen/Makefile
>>>   create mode 100644 drivers/gpu/drm/xen/xen_drm_front.c
>>>
>>> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
>>> index deeefa7a1773..757825ac60df 100644
>>> --- a/drivers/gpu/drm/Kconfig
>>> +++ b/drivers/gpu/drm/Kconfig
>>> @@ -289,6 +289,8 @@ source "drivers/gpu/drm/pl111/Kconfig"
>>>     source "drivers/gpu/drm/tve200/Kconfig"
>>>   +source "drivers/gpu/drm/xen/Kconfig"
>>> +
>>>   # Keep legacy drivers last
>>>     menuconfig DRM_LEGACY
>>> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
>>> index 50093ff4479b..9d66657ea117 100644
>>> --- a/drivers/gpu/drm/Makefile
>>> +++ b/drivers/gpu/drm/Makefile
>>> @@ -103,3 +103,4 @@ obj-$(CONFIG_DRM_MXSFB)    += mxsfb/
>>>   obj-$(CONFIG_DRM_TINYDRM) += tinydrm/
>>>   obj-$(CONFIG_DRM_PL111) += pl111/
>>>   obj-$(CONFIG_DRM_TVE200) += tve200/
>>> +obj-$(CONFIG_DRM_XEN) += xen/
>>> diff --git a/drivers/gpu/drm/xen/Kconfig b/drivers/gpu/drm/xen/Kconfig
>>> new file mode 100644
>>> index 000000000000..4cca160782ab
>>> --- /dev/null
>>> +++ b/drivers/gpu/drm/xen/Kconfig
>>> @@ -0,0 +1,17 @@
>>> +config DRM_XEN
>>> +    bool "DRM Support for Xen guest OS"
>>> +    depends on XEN
>>> +    help
>>> +      Choose this option if you want to enable DRM support
>>> +      for Xen.
>>> +
>>> +config DRM_XEN_FRONTEND
>>> +    tristate "Para-virtualized frontend driver for Xen guest OS"
>>> +    depends on DRM_XEN
>>> +    depends on DRM
>>> +    select DRM_KMS_HELPER
>>> +    select VIDEOMODE_HELPERS
>>> +    select XEN_XENBUS_FRONTEND
>>> +    help
>>> +      Choose this option if you want to enable a para-virtualized
>>> +      frontend DRM/KMS driver for Xen guest OSes.
>>> diff --git a/drivers/gpu/drm/xen/Makefile b/drivers/gpu/drm/xen/Makefile
>>> new file mode 100644
>>> index 000000000000..967074d348f6
>>> --- /dev/null
>>> +++ b/drivers/gpu/drm/xen/Makefile
>>> @@ -0,0 +1,5 @@
>>> +# SPDX-License-Identifier: GPL-2.0
>>> +
>>> +drm_xen_front-objs := xen_drm_front.o
>>> +
>>> +obj-$(CONFIG_DRM_XEN_FRONTEND) += drm_xen_front.o
>>> diff --git a/drivers/gpu/drm/xen/xen_drm_front.c
>>> b/drivers/gpu/drm/xen/xen_drm_front.c
>>> new file mode 100644
>>> index 000000000000..fd372fb464a1
>>> --- /dev/null
>>> +++ b/drivers/gpu/drm/xen/xen_drm_front.c
>>> @@ -0,0 +1,83 @@
>>> +/*
>>> + *  Xen para-virtual DRM device
>>> + *
>>> + *   This program is free software; you can redistribute it and/or
>>> modify
>>> + *   it under the terms of the GNU General Public License as
>>> published by
>>> + *   the Free Software Foundation; either version 2 of the License, or
>>> + *   (at your option) any later version.
>>> + *
>>> + *   This program is distributed in the hope that it will be useful,
>>> + *   but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> + *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>> + *   GNU General Public License for more details.
>> Use SPDX identifier instead (same applies for all other new
>> sources):
>>
>> // SPDX-License-Identifier: GPL-2.0
> Will update, thank you
>>> + *
>>> + * Copyright (C) 2016-2018 EPAM Systems Inc.
>>> + *
>>> + * Author: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
>>> + */
>>> +
>>> +#include <drm/drmP.h>
>>> +
>>> +#include <xen/platform_pci.h>
>>> +#include <xen/xen.h>
>>> +#include <xen/xenbus.h>
>>> +
>>> +#include <xen/interface/io/displif.h>
>>> +
>>> +static void backend_on_changed(struct xenbus_device *xb_dev,
>>> +        enum xenbus_state backend_state)
>>> +{
>>> +}
>>> +
>>> +static int xen_drv_probe(struct xenbus_device *xb_dev,
>>> +        const struct xenbus_device_id *id)
>>> +{
>>> +    return 0;
>>> +}
>>> +
>>> +static int xen_drv_remove(struct xenbus_device *dev)
>>> +{
>>> +    return 0;
>>> +}
>>> +
>>> +static const struct xenbus_device_id xen_drv_ids[] = {
>>> +    { XENDISPL_DRIVER_NAME },
>>> +    { "" }
>>> +};
>>> +
>>> +static struct xenbus_driver xen_driver = {
>>> +    .ids = xen_drv_ids,
>>> +    .probe = xen_drv_probe,
>>> +    .remove = xen_drv_remove,
>>> +    .otherend_changed = backend_on_changed,
>>> +};
>>> +
>>> +static int __init xen_drv_init(void)
>>> +{
>>> +    if (!xen_domain())
>>> +        return -ENODEV;
>>> +
>>> +    if (xen_initial_domain()) {
>>> +        DRM_ERROR(XENDISPL_DRIVER_NAME " cannot run in initial
>>> domain\n");
>>> +        return -ENODEV;
>>> +    }
>> Why not? Wouldn't that be possible in case of the backend living in a
>> driver domain?
> It is possible (and in my use-case backend indeed runs in
> a driver domain). I was just not sure if it is really a
> good idea to allow that. If you think this is ok, then
> I'll remove this check

I don't think the driver should decide that. This would be the job of
Xen tools IMO.


Juergen
Oleksandr Andrushchenko Feb. 21, 2018, 9:11 a.m. UTC | #4
On 02/21/2018 11:09 AM, Juergen Gross wrote:
> On 21/02/18 09:47, Oleksandr Andrushchenko wrote:
>> On 02/21/2018 10:19 AM, Juergen Gross wrote:
>>> On 21/02/18 09:03, Oleksandr Andrushchenko wrote:
>>>> From: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
>>>>
>>>> Introduce skeleton of the para-virtualized Xen display
>>>> frontend driver. This patch only adds required
>>>> essential stubs.
>>>>
>>>> Signed-off-by: Oleksandr Andrushchenko
>>>> <oleksandr_andrushchenko@epam.com>
>>>> ---
>>>>    drivers/gpu/drm/Kconfig             |  2 +
>>>>    drivers/gpu/drm/Makefile            |  1 +
>>>>    drivers/gpu/drm/xen/Kconfig         | 17 ++++++++
>>>>    drivers/gpu/drm/xen/Makefile        |  5 +++
>>>>    drivers/gpu/drm/xen/xen_drm_front.c | 83
>>>> +++++++++++++++++++++++++++++++++++++
>>>>    5 files changed, 108 insertions(+)
>>>>    create mode 100644 drivers/gpu/drm/xen/Kconfig
>>>>    create mode 100644 drivers/gpu/drm/xen/Makefile
>>>>    create mode 100644 drivers/gpu/drm/xen/xen_drm_front.c
>>>>
>>>> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
>>>> index deeefa7a1773..757825ac60df 100644
>>>> --- a/drivers/gpu/drm/Kconfig
>>>> +++ b/drivers/gpu/drm/Kconfig
>>>> @@ -289,6 +289,8 @@ source "drivers/gpu/drm/pl111/Kconfig"
>>>>      source "drivers/gpu/drm/tve200/Kconfig"
>>>>    +source "drivers/gpu/drm/xen/Kconfig"
>>>> +
>>>>    # Keep legacy drivers last
>>>>      menuconfig DRM_LEGACY
>>>> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
>>>> index 50093ff4479b..9d66657ea117 100644
>>>> --- a/drivers/gpu/drm/Makefile
>>>> +++ b/drivers/gpu/drm/Makefile
>>>> @@ -103,3 +103,4 @@ obj-$(CONFIG_DRM_MXSFB)    += mxsfb/
>>>>    obj-$(CONFIG_DRM_TINYDRM) += tinydrm/
>>>>    obj-$(CONFIG_DRM_PL111) += pl111/
>>>>    obj-$(CONFIG_DRM_TVE200) += tve200/
>>>> +obj-$(CONFIG_DRM_XEN) += xen/
>>>> diff --git a/drivers/gpu/drm/xen/Kconfig b/drivers/gpu/drm/xen/Kconfig
>>>> new file mode 100644
>>>> index 000000000000..4cca160782ab
>>>> --- /dev/null
>>>> +++ b/drivers/gpu/drm/xen/Kconfig
>>>> @@ -0,0 +1,17 @@
>>>> +config DRM_XEN
>>>> +    bool "DRM Support for Xen guest OS"
>>>> +    depends on XEN
>>>> +    help
>>>> +      Choose this option if you want to enable DRM support
>>>> +      for Xen.
>>>> +
>>>> +config DRM_XEN_FRONTEND
>>>> +    tristate "Para-virtualized frontend driver for Xen guest OS"
>>>> +    depends on DRM_XEN
>>>> +    depends on DRM
>>>> +    select DRM_KMS_HELPER
>>>> +    select VIDEOMODE_HELPERS
>>>> +    select XEN_XENBUS_FRONTEND
>>>> +    help
>>>> +      Choose this option if you want to enable a para-virtualized
>>>> +      frontend DRM/KMS driver for Xen guest OSes.
>>>> diff --git a/drivers/gpu/drm/xen/Makefile b/drivers/gpu/drm/xen/Makefile
>>>> new file mode 100644
>>>> index 000000000000..967074d348f6
>>>> --- /dev/null
>>>> +++ b/drivers/gpu/drm/xen/Makefile
>>>> @@ -0,0 +1,5 @@
>>>> +# SPDX-License-Identifier: GPL-2.0
>>>> +
>>>> +drm_xen_front-objs := xen_drm_front.o
>>>> +
>>>> +obj-$(CONFIG_DRM_XEN_FRONTEND) += drm_xen_front.o
>>>> diff --git a/drivers/gpu/drm/xen/xen_drm_front.c
>>>> b/drivers/gpu/drm/xen/xen_drm_front.c
>>>> new file mode 100644
>>>> index 000000000000..fd372fb464a1
>>>> --- /dev/null
>>>> +++ b/drivers/gpu/drm/xen/xen_drm_front.c
>>>> @@ -0,0 +1,83 @@
>>>> +/*
>>>> + *  Xen para-virtual DRM device
>>>> + *
>>>> + *   This program is free software; you can redistribute it and/or
>>>> modify
>>>> + *   it under the terms of the GNU General Public License as
>>>> published by
>>>> + *   the Free Software Foundation; either version 2 of the License, or
>>>> + *   (at your option) any later version.
>>>> + *
>>>> + *   This program is distributed in the hope that it will be useful,
>>>> + *   but WITHOUT ANY WARRANTY; without even the implied warranty of
>>>> + *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>>> + *   GNU General Public License for more details.
>>> Use SPDX identifier instead (same applies for all other new
>>> sources):
>>>
>>> // SPDX-License-Identifier: GPL-2.0
>> Will update, thank you
>>>> + *
>>>> + * Copyright (C) 2016-2018 EPAM Systems Inc.
>>>> + *
>>>> + * Author: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
>>>> + */
>>>> +
>>>> +#include <drm/drmP.h>
>>>> +
>>>> +#include <xen/platform_pci.h>
>>>> +#include <xen/xen.h>
>>>> +#include <xen/xenbus.h>
>>>> +
>>>> +#include <xen/interface/io/displif.h>
>>>> +
>>>> +static void backend_on_changed(struct xenbus_device *xb_dev,
>>>> +        enum xenbus_state backend_state)
>>>> +{
>>>> +}
>>>> +
>>>> +static int xen_drv_probe(struct xenbus_device *xb_dev,
>>>> +        const struct xenbus_device_id *id)
>>>> +{
>>>> +    return 0;
>>>> +}
>>>> +
>>>> +static int xen_drv_remove(struct xenbus_device *dev)
>>>> +{
>>>> +    return 0;
>>>> +}
>>>> +
>>>> +static const struct xenbus_device_id xen_drv_ids[] = {
>>>> +    { XENDISPL_DRIVER_NAME },
>>>> +    { "" }
>>>> +};
>>>> +
>>>> +static struct xenbus_driver xen_driver = {
>>>> +    .ids = xen_drv_ids,
>>>> +    .probe = xen_drv_probe,
>>>> +    .remove = xen_drv_remove,
>>>> +    .otherend_changed = backend_on_changed,
>>>> +};
>>>> +
>>>> +static int __init xen_drv_init(void)
>>>> +{
>>>> +    if (!xen_domain())
>>>> +        return -ENODEV;
>>>> +
>>>> +    if (xen_initial_domain()) {
>>>> +        DRM_ERROR(XENDISPL_DRIVER_NAME " cannot run in initial
>>>> domain\n");
>>>> +        return -ENODEV;
>>>> +    }
>>> Why not? Wouldn't that be possible in case of the backend living in a
>>> driver domain?
>> It is possible (and in my use-case backend indeed runs in
>> a driver domain). I was just not sure if it is really a
>> good idea to allow that. If you think this is ok, then
>> I'll remove this check
> I don't think the driver should decide that. This would be the job of
> Xen tools IMO.
Agree, will remove
>
> Juergen
Roger Pau Monné Feb. 21, 2018, 9:17 a.m. UTC | #5
On Wed, Feb 21, 2018 at 10:03:34AM +0200, Oleksandr Andrushchenko wrote:
> From: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
> 
> Introduce skeleton of the para-virtualized Xen display
> frontend driver. This patch only adds required
> essential stubs.
> 
> Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
> ---
>  drivers/gpu/drm/Kconfig             |  2 +
>  drivers/gpu/drm/Makefile            |  1 +
>  drivers/gpu/drm/xen/Kconfig         | 17 ++++++++
>  drivers/gpu/drm/xen/Makefile        |  5 +++
>  drivers/gpu/drm/xen/xen_drm_front.c | 83 +++++++++++++++++++++++++++++++++++++
>  5 files changed, 108 insertions(+)
>  create mode 100644 drivers/gpu/drm/xen/Kconfig
>  create mode 100644 drivers/gpu/drm/xen/Makefile
>  create mode 100644 drivers/gpu/drm/xen/xen_drm_front.c
> 
> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
> index deeefa7a1773..757825ac60df 100644
> --- a/drivers/gpu/drm/Kconfig
> +++ b/drivers/gpu/drm/Kconfig
> @@ -289,6 +289,8 @@ source "drivers/gpu/drm/pl111/Kconfig"
>  
>  source "drivers/gpu/drm/tve200/Kconfig"
>  
> +source "drivers/gpu/drm/xen/Kconfig"
> +
>  # Keep legacy drivers last
>  
>  menuconfig DRM_LEGACY
> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
> index 50093ff4479b..9d66657ea117 100644
> --- a/drivers/gpu/drm/Makefile
> +++ b/drivers/gpu/drm/Makefile
> @@ -103,3 +103,4 @@ obj-$(CONFIG_DRM_MXSFB)	+= mxsfb/
>  obj-$(CONFIG_DRM_TINYDRM) += tinydrm/
>  obj-$(CONFIG_DRM_PL111) += pl111/
>  obj-$(CONFIG_DRM_TVE200) += tve200/
> +obj-$(CONFIG_DRM_XEN) += xen/
> diff --git a/drivers/gpu/drm/xen/Kconfig b/drivers/gpu/drm/xen/Kconfig
> new file mode 100644
> index 000000000000..4cca160782ab
> --- /dev/null
> +++ b/drivers/gpu/drm/xen/Kconfig
> @@ -0,0 +1,17 @@
> +config DRM_XEN
> +	bool "DRM Support for Xen guest OS"
> +	depends on XEN
> +	help
> +	  Choose this option if you want to enable DRM support
> +	  for Xen.
> +
> +config DRM_XEN_FRONTEND
> +	tristate "Para-virtualized frontend driver for Xen guest OS"
> +	depends on DRM_XEN
> +	depends on DRM
> +	select DRM_KMS_HELPER
> +	select VIDEOMODE_HELPERS
> +	select XEN_XENBUS_FRONTEND
> +	help
> +	  Choose this option if you want to enable a para-virtualized
> +	  frontend DRM/KMS driver for Xen guest OSes.
> diff --git a/drivers/gpu/drm/xen/Makefile b/drivers/gpu/drm/xen/Makefile
> new file mode 100644
> index 000000000000..967074d348f6
> --- /dev/null
> +++ b/drivers/gpu/drm/xen/Makefile
> @@ -0,0 +1,5 @@
> +# SPDX-License-Identifier: GPL-2.0
> +
> +drm_xen_front-objs := xen_drm_front.o
> +
> +obj-$(CONFIG_DRM_XEN_FRONTEND) += drm_xen_front.o
> diff --git a/drivers/gpu/drm/xen/xen_drm_front.c b/drivers/gpu/drm/xen/xen_drm_front.c
> new file mode 100644
> index 000000000000..fd372fb464a1
> --- /dev/null
> +++ b/drivers/gpu/drm/xen/xen_drm_front.c
> @@ -0,0 +1,83 @@
> +/*
> + *  Xen para-virtual DRM device
> + *
> + *   This program is free software; you can redistribute it and/or modify
> + *   it under the terms of the GNU General Public License as published by
> + *   the Free Software Foundation; either version 2 of the License, or
> + *   (at your option) any later version.
> + *
> + *   This program is distributed in the hope that it will be useful,
> + *   but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *   GNU General Public License for more details.

Most Xen drivers in Linux use a dual GPL/BSD license, so that they can
be imported into other non GPL OSes:

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License version 2
as published by the Free Software Foundation; or, when distributed
separately from the Linux kernel or incorporated into other
software packages, subject to the following license:

Permission is hereby granted, free of charge, to any person obtaining a copy
of this source file (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use, copy, modify,
merge, publish, distribute, sublicense, and/or sell copies of the Software,
and to permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.

IMO it would be good to release this driver under the same license, so
it can be incorporated into other OSes.

Thanks, Roger.
Oleksandr Andrushchenko Feb. 21, 2018, 9:42 a.m. UTC | #6
On 02/21/2018 11:17 AM, Roger Pau Monné wrote:
> On Wed, Feb 21, 2018 at 10:03:34AM +0200, Oleksandr Andrushchenko wrote:
>> From: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
>>
>> Introduce skeleton of the para-virtualized Xen display
>> frontend driver. This patch only adds required
>> essential stubs.
>>
>> Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
>> ---
>>   drivers/gpu/drm/Kconfig             |  2 +
>>   drivers/gpu/drm/Makefile            |  1 +
>>   drivers/gpu/drm/xen/Kconfig         | 17 ++++++++
>>   drivers/gpu/drm/xen/Makefile        |  5 +++
>>   drivers/gpu/drm/xen/xen_drm_front.c | 83 +++++++++++++++++++++++++++++++++++++
>>   5 files changed, 108 insertions(+)
>>   create mode 100644 drivers/gpu/drm/xen/Kconfig
>>   create mode 100644 drivers/gpu/drm/xen/Makefile
>>   create mode 100644 drivers/gpu/drm/xen/xen_drm_front.c
>>
>> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
>> index deeefa7a1773..757825ac60df 100644
>> --- a/drivers/gpu/drm/Kconfig
>> +++ b/drivers/gpu/drm/Kconfig
>> @@ -289,6 +289,8 @@ source "drivers/gpu/drm/pl111/Kconfig"
>>   
>>   source "drivers/gpu/drm/tve200/Kconfig"
>>   
>> +source "drivers/gpu/drm/xen/Kconfig"
>> +
>>   # Keep legacy drivers last
>>   
>>   menuconfig DRM_LEGACY
>> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
>> index 50093ff4479b..9d66657ea117 100644
>> --- a/drivers/gpu/drm/Makefile
>> +++ b/drivers/gpu/drm/Makefile
>> @@ -103,3 +103,4 @@ obj-$(CONFIG_DRM_MXSFB)	+= mxsfb/
>>   obj-$(CONFIG_DRM_TINYDRM) += tinydrm/
>>   obj-$(CONFIG_DRM_PL111) += pl111/
>>   obj-$(CONFIG_DRM_TVE200) += tve200/
>> +obj-$(CONFIG_DRM_XEN) += xen/
>> diff --git a/drivers/gpu/drm/xen/Kconfig b/drivers/gpu/drm/xen/Kconfig
>> new file mode 100644
>> index 000000000000..4cca160782ab
>> --- /dev/null
>> +++ b/drivers/gpu/drm/xen/Kconfig
>> @@ -0,0 +1,17 @@
>> +config DRM_XEN
>> +	bool "DRM Support for Xen guest OS"
>> +	depends on XEN
>> +	help
>> +	  Choose this option if you want to enable DRM support
>> +	  for Xen.
>> +
>> +config DRM_XEN_FRONTEND
>> +	tristate "Para-virtualized frontend driver for Xen guest OS"
>> +	depends on DRM_XEN
>> +	depends on DRM
>> +	select DRM_KMS_HELPER
>> +	select VIDEOMODE_HELPERS
>> +	select XEN_XENBUS_FRONTEND
>> +	help
>> +	  Choose this option if you want to enable a para-virtualized
>> +	  frontend DRM/KMS driver for Xen guest OSes.
>> diff --git a/drivers/gpu/drm/xen/Makefile b/drivers/gpu/drm/xen/Makefile
>> new file mode 100644
>> index 000000000000..967074d348f6
>> --- /dev/null
>> +++ b/drivers/gpu/drm/xen/Makefile
>> @@ -0,0 +1,5 @@
>> +# SPDX-License-Identifier: GPL-2.0
>> +
>> +drm_xen_front-objs := xen_drm_front.o
>> +
>> +obj-$(CONFIG_DRM_XEN_FRONTEND) += drm_xen_front.o
>> diff --git a/drivers/gpu/drm/xen/xen_drm_front.c b/drivers/gpu/drm/xen/xen_drm_front.c
>> new file mode 100644
>> index 000000000000..fd372fb464a1
>> --- /dev/null
>> +++ b/drivers/gpu/drm/xen/xen_drm_front.c
>> @@ -0,0 +1,83 @@
>> +/*
>> + *  Xen para-virtual DRM device
>> + *
>> + *   This program is free software; you can redistribute it and/or modify
>> + *   it under the terms of the GNU General Public License as published by
>> + *   the Free Software Foundation; either version 2 of the License, or
>> + *   (at your option) any later version.
>> + *
>> + *   This program is distributed in the hope that it will be useful,
>> + *   but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> + *   GNU General Public License for more details.
> Most Xen drivers in Linux use a dual GPL/BSD license, so that they can
> be imported into other non GPL OSes:
>
> This program is free software; you can redistribute it and/or
> modify it under the terms of the GNU General Public License version 2
> as published by the Free Software Foundation; or, when distributed
> separately from the Linux kernel or incorporated into other
> software packages, subject to the following license:
>
> Permission is hereby granted, free of charge, to any person obtaining a copy
> of this source file (the "Software"), to deal in the Software without
> restriction, including without limitation the rights to use, copy, modify,
> merge, publish, distribute, sublicense, and/or sell copies of the Software,
> and to permit persons to whom the Software is furnished to do so, subject to
> the following conditions:
>
> The above copyright notice and this permission notice shall be included in
> all copies or substantial portions of the Software.
>
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> IN THE SOFTWARE.
>
> IMO it would be good to release this driver under the same license, so
> it can be incorporated into other OSes.
I am in any way expert in licensing, but the above seems to be
/* SPDX-License-Identifier: (GPL-2.0 OR MIT) */
At least this is what I see at [1] for MIT.
Could you please tell which license(s) as listed at [1]
would be appropriate for Xen drivers in terms of how it is
expected to appear in the kernel code, e.g. expected
SPDX-License-Identifier?
> Thanks, Roger.
Thank you,
Oleksandr

[1] https://spdx.org/licenses/
Roger Pau Monné Feb. 21, 2018, 10:19 a.m. UTC | #7
On Wed, Feb 21, 2018 at 11:42:23AM +0200, Oleksandr Andrushchenko wrote:
> On 02/21/2018 11:17 AM, Roger Pau Monné wrote:
> > On Wed, Feb 21, 2018 at 10:03:34AM +0200, Oleksandr Andrushchenko wrote:
> > > --- /dev/null
> > > +++ b/drivers/gpu/drm/xen/xen_drm_front.c
> > > @@ -0,0 +1,83 @@
> > > +/*
> > > + *  Xen para-virtual DRM device
> > > + *
> > > + *   This program is free software; you can redistribute it and/or modify
> > > + *   it under the terms of the GNU General Public License as published by
> > > + *   the Free Software Foundation; either version 2 of the License, or
> > > + *   (at your option) any later version.
> > > + *
> > > + *   This program is distributed in the hope that it will be useful,
> > > + *   but WITHOUT ANY WARRANTY; without even the implied warranty of
> > > + *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > > + *   GNU General Public License for more details.
> > Most Xen drivers in Linux use a dual GPL/BSD license, so that they can
> > be imported into other non GPL OSes:
> > 
> > This program is free software; you can redistribute it and/or
> > modify it under the terms of the GNU General Public License version 2
> > as published by the Free Software Foundation; or, when distributed
> > separately from the Linux kernel or incorporated into other
> > software packages, subject to the following license:
> > 
> > Permission is hereby granted, free of charge, to any person obtaining a copy
> > of this source file (the "Software"), to deal in the Software without
> > restriction, including without limitation the rights to use, copy, modify,
> > merge, publish, distribute, sublicense, and/or sell copies of the Software,
> > and to permit persons to whom the Software is furnished to do so, subject to
> > the following conditions:
> > 
> > The above copyright notice and this permission notice shall be included in
> > all copies or substantial portions of the Software.
> > 
> > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
> > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> > FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> > IN THE SOFTWARE.
> > 
> > IMO it would be good to release this driver under the same license, so
> > it can be incorporated into other OSes.
> I am in any way expert in licensing, but the above seems to be
> /* SPDX-License-Identifier: (GPL-2.0 OR MIT) */
> At least this is what I see at [1] for MIT.
> Could you please tell which license(s) as listed at [1]
> would be appropriate for Xen drivers in terms of how it is
> expected to appear in the kernel code, e.g. expected
> SPDX-License-Identifier?

I would be fine with anything MIT/BSD-*/Apache-* like. In the Xen
community we have generally done dual GPL-2.0 MIT, so your proposed
tag looks fine IMO (I would also personally be fine with
MIT/BSD-*/Apache-* only).

The point is that it would be good to have the code under a more
permissive license so it can be integrated into non GPL OSes in the
future if needed, and that your code could be used as a reference for
that.

Thanks, Roger.
Oleksandr Andrushchenko Feb. 21, 2018, 10:25 a.m. UTC | #8
On 02/21/2018 12:19 PM, Roger Pau Monné wrote:
> On Wed, Feb 21, 2018 at 11:42:23AM +0200, Oleksandr Andrushchenko wrote:
>> On 02/21/2018 11:17 AM, Roger Pau Monné wrote:
>>> On Wed, Feb 21, 2018 at 10:03:34AM +0200, Oleksandr Andrushchenko wrote:
>>>> --- /dev/null
>>>> +++ b/drivers/gpu/drm/xen/xen_drm_front.c
>>>> @@ -0,0 +1,83 @@
>>>> +/*
>>>> + *  Xen para-virtual DRM device
>>>> + *
>>>> + *   This program is free software; you can redistribute it and/or modify
>>>> + *   it under the terms of the GNU General Public License as published by
>>>> + *   the Free Software Foundation; either version 2 of the License, or
>>>> + *   (at your option) any later version.
>>>> + *
>>>> + *   This program is distributed in the hope that it will be useful,
>>>> + *   but WITHOUT ANY WARRANTY; without even the implied warranty of
>>>> + *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>>> + *   GNU General Public License for more details.
>>> Most Xen drivers in Linux use a dual GPL/BSD license, so that they can
>>> be imported into other non GPL OSes:
>>>
>>> This program is free software; you can redistribute it and/or
>>> modify it under the terms of the GNU General Public License version 2
>>> as published by the Free Software Foundation; or, when distributed
>>> separately from the Linux kernel or incorporated into other
>>> software packages, subject to the following license:
>>>
>>> Permission is hereby granted, free of charge, to any person obtaining a copy
>>> of this source file (the "Software"), to deal in the Software without
>>> restriction, including without limitation the rights to use, copy, modify,
>>> merge, publish, distribute, sublicense, and/or sell copies of the Software,
>>> and to permit persons to whom the Software is furnished to do so, subject to
>>> the following conditions:
>>>
>>> The above copyright notice and this permission notice shall be included in
>>> all copies or substantial portions of the Software.
>>>
>>> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
>>> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
>>> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
>>> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
>>> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
>>> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
>>> IN THE SOFTWARE.
>>>
>>> IMO it would be good to release this driver under the same license, so
>>> it can be incorporated into other OSes.
>> I am in any way expert in licensing, but the above seems to be
>> /* SPDX-License-Identifier: (GPL-2.0 OR MIT) */
>> At least this is what I see at [1] for MIT.
>> Could you please tell which license(s) as listed at [1]
>> would be appropriate for Xen drivers in terms of how it is
>> expected to appear in the kernel code, e.g. expected
>> SPDX-License-Identifier?
> I would be fine with anything MIT/BSD-*/Apache-* like. In the Xen
> community we have generally done dual GPL-2.0 MIT, so your proposed
> tag looks fine IMO (I would also personally be fine with
> MIT/BSD-*/Apache-* only).
Ok, then I am about to use /* SPDX-License-Identifier: (GPL-2.0 OR MIT) */
>
> The point is that it would be good to have the code under a more
> permissive license so it can be integrated into non GPL OSes in the
> future if needed, and that your code could be used as a reference for
> that.
That is clear, no objections
> Thanks, Roger.
Thank you,
Oleksandr
Boris Ostrovsky Feb. 22, 2018, 10:23 p.m. UTC | #9
On 02/21/2018 03:03 AM, Oleksandr Andrushchenko wrote:
> +static struct xenbus_driver xen_driver = {
> +	.ids = xen_drv_ids,
> +	.probe = xen_drv_probe,
> +	.remove = xen_drv_remove,
> +	.otherend_changed = backend_on_changed,

What does "_on_" stand for?

-boris
Oleksandr Andrushchenko Feb. 23, 2018, 6:37 a.m. UTC | #10
On 02/23/2018 12:23 AM, Boris Ostrovsky wrote:
> On 02/21/2018 03:03 AM, Oleksandr Andrushchenko wrote:
>> +static struct xenbus_driver xen_driver = {
>> +	.ids = xen_drv_ids,
>> +	.probe = xen_drv_probe,
>> +	.remove = xen_drv_remove,
>> +	.otherend_changed = backend_on_changed,
> What does "_on_" stand for?
Well, it is somewhat like a hint that this is called "on" event,
e.g. event when the other end state has changed, backend in this
case. It could be something like "backend_on_state_changed"
> -boris
Boris Ostrovsky Feb. 23, 2018, 2:39 p.m. UTC | #11
On 02/23/2018 01:37 AM, Oleksandr Andrushchenko wrote:
> On 02/23/2018 12:23 AM, Boris Ostrovsky wrote:
>> On 02/21/2018 03:03 AM, Oleksandr Andrushchenko wrote:
>>> +static struct xenbus_driver xen_driver = {
>>> +    .ids = xen_drv_ids,
>>> +    .probe = xen_drv_probe,
>>> +    .remove = xen_drv_remove,
>>> +    .otherend_changed = backend_on_changed,
>> What does "_on_" stand for?
> Well, it is somewhat like a hint that this is called "on" event,
> e.g. event when the other end state has changed, backend in this
> case. It could be something like "backend_on_state_changed"

If you look at other xenbus_drivers none of the uses this so I think we
should stick to conventional naming. (and the same applies to other
backend_on_* routines).

-boris
Oleksandr Andrushchenko Feb. 23, 2018, 2:51 p.m. UTC | #12
On 02/23/2018 04:39 PM, Boris Ostrovsky wrote:
> On 02/23/2018 01:37 AM, Oleksandr Andrushchenko wrote:
>> On 02/23/2018 12:23 AM, Boris Ostrovsky wrote:
>>> On 02/21/2018 03:03 AM, Oleksandr Andrushchenko wrote:
>>>> +static struct xenbus_driver xen_driver = {
>>>> +    .ids = xen_drv_ids,
>>>> +    .probe = xen_drv_probe,
>>>> +    .remove = xen_drv_remove,
>>>> +    .otherend_changed = backend_on_changed,
>>> What does "_on_" stand for?
>> Well, it is somewhat like a hint that this is called "on" event,
>> e.g. event when the other end state has changed, backend in this
>> case. It could be something like "backend_on_state_changed"
> If you look at other xenbus_drivers none of the uses this so I think we
> should stick to conventional naming. (and the same applies to other
> backend_on_* routines).
ok, no problem. will rename to be aligned with other frontends
>
> -boris
diff mbox

Patch

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index deeefa7a1773..757825ac60df 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -289,6 +289,8 @@  source "drivers/gpu/drm/pl111/Kconfig"
 
 source "drivers/gpu/drm/tve200/Kconfig"
 
+source "drivers/gpu/drm/xen/Kconfig"
+
 # Keep legacy drivers last
 
 menuconfig DRM_LEGACY
diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
index 50093ff4479b..9d66657ea117 100644
--- a/drivers/gpu/drm/Makefile
+++ b/drivers/gpu/drm/Makefile
@@ -103,3 +103,4 @@  obj-$(CONFIG_DRM_MXSFB)	+= mxsfb/
 obj-$(CONFIG_DRM_TINYDRM) += tinydrm/
 obj-$(CONFIG_DRM_PL111) += pl111/
 obj-$(CONFIG_DRM_TVE200) += tve200/
+obj-$(CONFIG_DRM_XEN) += xen/
diff --git a/drivers/gpu/drm/xen/Kconfig b/drivers/gpu/drm/xen/Kconfig
new file mode 100644
index 000000000000..4cca160782ab
--- /dev/null
+++ b/drivers/gpu/drm/xen/Kconfig
@@ -0,0 +1,17 @@ 
+config DRM_XEN
+	bool "DRM Support for Xen guest OS"
+	depends on XEN
+	help
+	  Choose this option if you want to enable DRM support
+	  for Xen.
+
+config DRM_XEN_FRONTEND
+	tristate "Para-virtualized frontend driver for Xen guest OS"
+	depends on DRM_XEN
+	depends on DRM
+	select DRM_KMS_HELPER
+	select VIDEOMODE_HELPERS
+	select XEN_XENBUS_FRONTEND
+	help
+	  Choose this option if you want to enable a para-virtualized
+	  frontend DRM/KMS driver for Xen guest OSes.
diff --git a/drivers/gpu/drm/xen/Makefile b/drivers/gpu/drm/xen/Makefile
new file mode 100644
index 000000000000..967074d348f6
--- /dev/null
+++ b/drivers/gpu/drm/xen/Makefile
@@ -0,0 +1,5 @@ 
+# SPDX-License-Identifier: GPL-2.0
+
+drm_xen_front-objs := xen_drm_front.o
+
+obj-$(CONFIG_DRM_XEN_FRONTEND) += drm_xen_front.o
diff --git a/drivers/gpu/drm/xen/xen_drm_front.c b/drivers/gpu/drm/xen/xen_drm_front.c
new file mode 100644
index 000000000000..fd372fb464a1
--- /dev/null
+++ b/drivers/gpu/drm/xen/xen_drm_front.c
@@ -0,0 +1,83 @@ 
+/*
+ *  Xen para-virtual DRM device
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ * Copyright (C) 2016-2018 EPAM Systems Inc.
+ *
+ * Author: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
+ */
+
+#include <drm/drmP.h>
+
+#include <xen/platform_pci.h>
+#include <xen/xen.h>
+#include <xen/xenbus.h>
+
+#include <xen/interface/io/displif.h>
+
+static void backend_on_changed(struct xenbus_device *xb_dev,
+		enum xenbus_state backend_state)
+{
+}
+
+static int xen_drv_probe(struct xenbus_device *xb_dev,
+		const struct xenbus_device_id *id)
+{
+	return 0;
+}
+
+static int xen_drv_remove(struct xenbus_device *dev)
+{
+	return 0;
+}
+
+static const struct xenbus_device_id xen_drv_ids[] = {
+	{ XENDISPL_DRIVER_NAME },
+	{ "" }
+};
+
+static struct xenbus_driver xen_driver = {
+	.ids = xen_drv_ids,
+	.probe = xen_drv_probe,
+	.remove = xen_drv_remove,
+	.otherend_changed = backend_on_changed,
+};
+
+static int __init xen_drv_init(void)
+{
+	if (!xen_domain())
+		return -ENODEV;
+
+	if (xen_initial_domain()) {
+		DRM_ERROR(XENDISPL_DRIVER_NAME " cannot run in initial domain\n");
+		return -ENODEV;
+	}
+
+	if (!xen_has_pv_devices())
+		return -ENODEV;
+
+	DRM_INFO("Registering XEN PV " XENDISPL_DRIVER_NAME "\n");
+	return xenbus_register_frontend(&xen_driver);
+}
+
+static void __exit xen_drv_cleanup(void)
+{
+	DRM_INFO("Unregistering XEN PV " XENDISPL_DRIVER_NAME "\n");
+	xenbus_unregister_driver(&xen_driver);
+}
+
+module_init(xen_drv_init);
+module_exit(xen_drv_cleanup);
+
+MODULE_DESCRIPTION("Xen para-virtualized display device frontend");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("xen:"XENDISPL_DRIVER_NAME);