On Wed, Jan 15, 2014 at 03:32:21PM +0100, Hans de Goede wrote: > With systemd-logind support, the xserver, rather then the drivers will be
typo, "than" > responsible for opening/closing the fd for drm nodes. > > The initial open will happen on probe from config/udev.c, this commit adds > a fd member to OdevAttributes to store the fd to pass it along to the driver. > > The server_fd and paused flags are added to indicate wether server- > managed fds are in use for this device, and if they are if the device is > paused (no drm master rights) or not. > > This commit also bumps the video ABI major, as this constitutes an ABI change. > > systemd-logind tracks devices by their chardev major + minor numbers, since > we are breaking ABI anyways also add major and minor fields for easy storage / > retreival of these, as well as a utility function for getting a platform typo, retrieval Reviewed-by: Peter Hutterer <[email protected]> Cheers, Peter > device by devnum. > > Signed-off-by: Hans de Goede <[email protected]> > --- > config/config.c | 6 +++++- > hw/xfree86/common/xf86Module.h | 2 +- > hw/xfree86/common/xf86platformBus.c | 13 +++++++++++++ > include/hotplug.h | 9 +++++++++ > 4 files changed, 28 insertions(+), 2 deletions(-) > > diff --git a/config/config.c b/config/config.c > index 760cf19..07c90eb 100644 > --- a/config/config.c > +++ b/config/config.c > @@ -26,6 +26,7 @@ > #ifdef HAVE_DIX_CONFIG_H > #include <dix-config.h> > #endif > +#include <unistd.h> > > #include "os.h" > #include "inputstr.h" > @@ -130,17 +131,20 @@ config_odev_allocate_attribute_list(void) > { > struct OdevAttributes *attriblist; > > - attriblist = malloc(sizeof(struct OdevAttributes)); > + attriblist = calloc(sizeof(struct OdevAttributes), 1); > if (!attriblist) > return NULL; > > xorg_list_init(&attriblist->list); > + attriblist->fd = -1; > return attriblist; > } > > void > config_odev_free_attribute_list(struct OdevAttributes *attribs) > { > + if (attribs->server_fd) > + close(attribs->fd); > config_odev_free_attributes(attribs); > free(attribs); > } > diff --git a/hw/xfree86/common/xf86Module.h b/hw/xfree86/common/xf86Module.h > index 96ac3b0..e8c24f2 100644 > --- a/hw/xfree86/common/xf86Module.h > +++ b/hw/xfree86/common/xf86Module.h > @@ -80,7 +80,7 @@ typedef enum { > * mask is 0xFFFF0000. > */ > #define ABI_ANSIC_VERSION SET_ABI_VERSION(0, 4) > -#define ABI_VIDEODRV_VERSION SET_ABI_VERSION(15, 0) > +#define ABI_VIDEODRV_VERSION SET_ABI_VERSION(16, 0) > #define ABI_XINPUT_VERSION SET_ABI_VERSION(21, 0) > #define ABI_EXTENSION_VERSION SET_ABI_VERSION(8, 0) > #define ABI_FONT_VERSION SET_ABI_VERSION(0, 6) > diff --git a/hw/xfree86/common/xf86platformBus.c > b/hw/xfree86/common/xf86platformBus.c > index 5875a91..993d6a4 100644 > --- a/hw/xfree86/common/xf86platformBus.c > +++ b/hw/xfree86/common/xf86platformBus.c > @@ -120,6 +120,19 @@ xf86_get_platform_device_unowned(int index) > return xf86_platform_devices[index].attribs->unowned; > } > > +struct xf86_platform_device * > +xf86_find_platform_device_by_devnum(int major, int minor) > +{ > + int i; > + > + for (i = 0; i < xf86_num_platform_devices; i++) { > + struct OdevAttributes *attr = xf86_platform_devices[i].attribs; > + if (attr->major == major && attr->minor == minor && attr->server_fd) > + return &xf86_platform_devices[i]; > + } > + return NULL; > +} > + > /* > * xf86IsPrimaryPlatform() -- return TRUE if primary device > * is a platform device and it matches this one. > diff --git a/include/hotplug.h b/include/hotplug.h > index 29a22c4..567edfc 100644 > --- a/include/hotplug.h > +++ b/include/hotplug.h > @@ -40,7 +40,12 @@ struct OdevAttribute { > > struct OdevAttributes { > struct xorg_list list; > + int fd; > + int major; > + int minor; > Bool unowned; > + Bool paused; > + Bool server_fd; > }; > > struct OdevAttributes * > @@ -72,4 +77,8 @@ void DeleteGPUDeviceRequest(struct OdevAttributes *attribs); > #endif > > #define ServerIsNotSeat0() (SeatId && strcmp(SeatId, "seat0")) > + > +struct xf86_platform_device * > +xf86_find_platform_device_by_devnum(int major, int minor); > + > #endif /* HOTPLUG_H */ > -- > 1.8.4.2 > > _______________________________________________ > [email protected]: X.Org development > Archives: http://lists.x.org/archives/xorg-devel > Info: http://lists.x.org/mailman/listinfo/xorg-devel > _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
