All of lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [Patch][i-g-t 0/2] Add support to detect HDCP events
@ 2020-06-16 10:58 Ankit Nautiyal
  2020-06-16 10:58 ` [igt-dev] [Patch][i-g-t 1/2] lib/igt_kms: Add support for detecting connector events Ankit Nautiyal
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Ankit Nautiyal @ 2020-06-16 10:58 UTC (permalink / raw)
  To: igt-dev

This patch-series modifies the igt_kms to add support to detect
connector events. This support is then used for detecting
HDCP events in kms_content_protection. 

Ankit Nautiyal (2):
  lib/igt_kms: Add support for detecting connector events
  tests/kms_content_protection: Use library functions for handling
    uevents

 lib/igt_kms.c                  |  61 ++++++++++----
 lib/igt_kms.h                  |   2 +
 tests/kms_content_protection.c | 145 ++-------------------------------
 3 files changed, 54 insertions(+), 154 deletions(-)

-- 
2.17.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [igt-dev] [Patch][i-g-t 1/2] lib/igt_kms: Add support for detecting connector events
  2020-06-16 10:58 [igt-dev] [Patch][i-g-t 0/2] Add support to detect HDCP events Ankit Nautiyal
@ 2020-06-16 10:58 ` Ankit Nautiyal
  2020-06-16 14:12   ` Ramalingam C
  2020-06-16 10:58 ` [igt-dev] [Patch][i-g-t 2/2] tests/kms_content_protection: Use library functions for handling uevents Ankit Nautiyal
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 12+ messages in thread
From: Ankit Nautiyal @ 2020-06-16 10:58 UTC (permalink / raw)
  To: igt-dev

Currently, the event_detect function checks the property val for
"HOTPLUG" and "LEASE" both of which are set to '1' when these events
are sent.

This cannot be used for detecting connector events such as HDCP event
as connector events are sent along with property to signify which
property of which connector has changed. Connector ID and property id
are provided along with "CONNECTOR" and "PROPERTY" as udev
property-value pairs. Eg. for HDCP, the connector id of the connector
whose hdcp status changed, and the property id of the
‘CONTENT_PROTECTION’ property are sent with uevent.

This patch modifies the event_detect function to check multiple
properties with different expected values. It also adds support to
detect connector event for a given pair of connector and property ids.

Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
 lib/igt_kms.c | 61 ++++++++++++++++++++++++++++++++++++++-------------
 lib/igt_kms.h |  2 ++
 2 files changed, 48 insertions(+), 15 deletions(-)

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 54de45e5..7177231e 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -4164,32 +4164,57 @@ struct udev_monitor *igt_watch_hotplug(void)
 }
 
 static bool event_detected(struct udev_monitor *mon, int timeout_secs,
-			   const char *property)
+			   const char **property, int *expected_val, int num_props)
 {
 	struct udev_device *dev;
-	const char *hotplug_val;
+	const char *prop_val_str;
 	struct pollfd fd = {
 		.fd = udev_monitor_get_fd(mon),
 		.events = POLLIN
 	};
-	bool hotplug_received = false;
+	bool event_received = false;
+	int i;
 
-	/* Go through all of the events pending on the udev monitor. Once we
-	 * receive a hotplug, we continue going through the rest of the events
-	 * so that redundant hotplug events don't change the results of future
-	 * checks
+	/* Go through all of the events pending on the udev monitor.
+	 * Match the given set of properties and their values to
+	 * the expected values.
 	 */
-	while (!hotplug_received && poll(&fd, 1, timeout_secs * 1000)) {
+	while (!event_received && poll(&fd, 1, timeout_secs * 1000)) {
 		dev = udev_monitor_receive_device(mon);
-
-		hotplug_val = udev_device_get_property_value(dev, property);
-		if (hotplug_val && atoi(hotplug_val) == 1)
-			hotplug_received = true;
+		for (i = 0; i < num_props; i++) {
+			event_received = true;
+			prop_val_str = udev_device_get_property_value(dev, property[i]);
+			if (!prop_val_str || atoi(prop_val_str) != expected_val[i]) {
+				event_received = false;
+				break;
+			}
+		}
 
 		udev_device_unref(dev);
 	}
 
-	return hotplug_received;
+	return event_received;
+}
+
+/**
+ * igt_conn_event_detected:
+ * @mon: A udev monitor initialized with #igt_watch_hotplug
+ * @conn_id: Connector id of the Connector for which the property change is
+ * expected.
+ * @prop_id: Property id for which the change is expected.
+ * @timeout_secs: How long to wait for a connector event to occur.
+ *
+ * Assert that a connector event is received for a given connector and property.
+ *
+ * Returns: true if the connector event was received, false if we timed out
+ */
+bool igt_conn_event_detected(struct udev_monitor *mon, uint32_t conn_id,
+			     uint32_t prop_id, int timeout_secs)
+{
+	const char *props[2] = {"CONNECTOR", "PROPERTY"};
+	int expected_val[2] = {conn_id, prop_id};
+
+	return event_detected(mon, timeout_secs, props, expected_val, 2);
 }
 
 /**
@@ -4203,7 +4228,10 @@ static bool event_detected(struct udev_monitor *mon, int timeout_secs,
  */
 bool igt_hotplug_detected(struct udev_monitor *mon, int timeout_secs)
 {
-	return event_detected(mon, timeout_secs, "HOTPLUG");
+	const char *props[1] = {"HOTPLUG"};
+	int expected_val = 1;
+
+	return event_detected(mon, timeout_secs, props, &expected_val, 1);
 }
 
 /**
@@ -4217,7 +4245,10 @@ bool igt_hotplug_detected(struct udev_monitor *mon, int timeout_secs)
  */
 bool igt_lease_change_detected(struct udev_monitor *mon, int timeout_secs)
 {
-	return event_detected(mon, timeout_secs, "LEASE");
+	const char *props[1] = {"LEASE"};
+	int expected_val = 1;
+
+	return event_detected(mon, timeout_secs, props, &expected_val, 1);
 }
 
 /**
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index cd3fdbc0..27f1f729 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -777,6 +777,8 @@ bool igt_hotplug_detected(struct udev_monitor *mon,
 			  int timeout_secs);
 bool igt_lease_change_detected(struct udev_monitor *mon,
 			       int timeout_secs);
+bool igt_conn_event_detected(struct udev_monitor *mon, uint32_t conn_id,
+			     uint32_t prop_id, int timeout_msecs);
 void igt_flush_hotplugs(struct udev_monitor *mon);
 void igt_cleanup_hotplug(struct udev_monitor *mon);
 
-- 
2.17.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [igt-dev] [Patch][i-g-t 2/2] tests/kms_content_protection: Use library functions for handling uevents
  2020-06-16 10:58 [igt-dev] [Patch][i-g-t 0/2] Add support to detect HDCP events Ankit Nautiyal
  2020-06-16 10:58 ` [igt-dev] [Patch][i-g-t 1/2] lib/igt_kms: Add support for detecting connector events Ankit Nautiyal
@ 2020-06-16 10:58 ` Ankit Nautiyal
  2020-06-16 14:03   ` Ramalingam C
  2020-06-16 16:45 ` [igt-dev] ✓ Fi.CI.BAT: success for Add support to detect HDCP events Patchwork
  2020-06-16 17:44 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
  3 siblings, 1 reply; 12+ messages in thread
From: Ankit Nautiyal @ 2020-06-16 10:58 UTC (permalink / raw)
  To: igt-dev

Currently, the test has its own version of uevent handling used
for detecting hdcp events. This patch modifies the test to use
the igt_kms lib support for handling the uevent monitor and detect
hdcp events.

Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
 tests/kms_content_protection.c | 145 ++-------------------------------
 1 file changed, 6 insertions(+), 139 deletions(-)

diff --git a/tests/kms_content_protection.c b/tests/kms_content_protection.c
index 3b9cedcb..475a5089 100644
--- a/tests/kms_content_protection.c
+++ b/tests/kms_content_protection.c
@@ -39,6 +39,7 @@ struct data {
 	igt_display_t display;
 	struct igt_fb red, green;
 	unsigned int cp_tests;
+	struct udev_monitor *uevent_monitor;
 } data;
 
 /* Test flags */
@@ -112,143 +113,6 @@ static int wait_flip_event(void)
 	return rc;
 }
 
-static bool hdcp_event(struct udev_monitor *uevent_monitor,
-		       struct udev *udev, uint32_t conn_id, uint32_t prop_id)
-{
-	struct udev_device *dev;
-	dev_t udev_devnum;
-	struct stat s;
-	const char *hotplug, *connector, *property;
-	bool ret = false;
-
-	dev = udev_monitor_receive_device(uevent_monitor);
-	if (!dev)
-		goto out;
-
-	udev_devnum = udev_device_get_devnum(dev);
-	fstat(data.display.drm_fd, &s);
-
-	hotplug = udev_device_get_property_value(dev, "HOTPLUG");
-	if (!(memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
-	    hotplug && atoi(hotplug) == 1)) {
-		igt_debug("Not a Hotplug event\n");
-		goto out_dev;
-	}
-
-	connector = udev_device_get_property_value(dev, "CONNECTOR");
-	if (!(memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
-	    connector && atoi(connector) == conn_id)) {
-		igt_debug("Not for connector id: %u\n", conn_id);
-		goto out_dev;
-	}
-
-	property = udev_device_get_property_value(dev, "PROPERTY");
-	if (!(memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
-	    property && atoi(property) == prop_id)) {
-		igt_debug("Not for property id: %u\n", prop_id);
-		goto out_dev;
-	}
-	ret = true;
-
-out_dev:
-	udev_device_unref(dev);
-out:
-	return ret;
-}
-
-static void hdcp_udev_fini(struct udev_monitor *uevent_monitor,
-			   struct udev *udev)
-{
-	if (uevent_monitor)
-		udev_monitor_unref(uevent_monitor);
-	if (udev)
-		udev_unref(udev);
-}
-
-static int hdcp_udev_init(struct udev_monitor **uevent_monitor,
-			  struct udev **udev, int *udev_fd)
-{
-	int ret = -EINVAL;
-
-	*udev = udev_new();
-	if (!*udev) {
-		igt_info("failed to create udev object\n");
-		goto out;
-	}
-
-	*uevent_monitor = udev_monitor_new_from_netlink(*udev, "udev");
-	if (!*uevent_monitor) {
-		igt_info("failed to create udev event monitor\n");
-		goto out;
-	}
-
-	ret = udev_monitor_filter_add_match_subsystem_devtype(*uevent_monitor,
-							      "drm",
-							      "drm_minor");
-	if (ret < 0) {
-		igt_info("failed to filter for drm events\n");
-		goto out;
-	}
-
-	ret = udev_monitor_enable_receiving(*uevent_monitor);
-	if (ret < 0) {
-		igt_info("failed to enable udev event reception\n");
-		goto out;
-	}
-
-	*udev_fd = udev_monitor_get_fd(*uevent_monitor);
-	if (*udev_fd < 0) {
-		igt_info("failed to get udev_fd on uevent monitor\n");
-		ret = *udev_fd;
-		goto out;
-	}
-
-	return ret;
-
-out:
-	hdcp_udev_fini(*uevent_monitor, *udev);
-	return ret;
-}
-
-#define MAX_EVENTS	10
-static bool wait_for_hdcp_event(uint32_t conn_id, uint32_t prop_id,
-				uint32_t timeout_mSec)
-{
-
-	struct udev_monitor *uevent_monitor = NULL;
-	struct udev *udev = NULL;
-	int udev_fd, epoll_fd;
-	struct epoll_event event, events[MAX_EVENTS];
-	bool ret = false;
-
-	if (hdcp_udev_init(&uevent_monitor, &udev, &udev_fd) < 0)
-		return false;
-
-	epoll_fd = epoll_create1(0);
-	if (epoll_fd == -1) {
-		igt_info("Failed to create epoll fd. %d\n", epoll_fd);
-		goto out_ep_create;
-	}
-
-	event.events = EPOLLIN | EPOLLERR;
-	event.data.fd = 0;
-
-	if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, udev_fd, &event)) {
-		igt_info("failed to fd into epoll\n");
-		goto out_ep_ctl;
-	}
-
-	if (epoll_wait(epoll_fd, events, MAX_EVENTS, timeout_mSec))
-		ret = hdcp_event(uevent_monitor, udev, conn_id, prop_id);
-
-out_ep_ctl:
-	if (close(epoll_fd))
-		igt_info("failed to close the epoll fd\n");
-out_ep_create:
-	hdcp_udev_fini(uevent_monitor, udev);
-	return ret;
-}
-
 static bool
 wait_for_prop_value(igt_output_t *output, uint64_t expected,
 		    uint32_t timeout_mSec)
@@ -257,9 +121,9 @@ wait_for_prop_value(igt_output_t *output, uint64_t expected,
 	int i;
 
 	if (data.cp_tests & CP_UEVENT && expected != CP_UNDESIRED) {
-		igt_assert_f(wait_for_hdcp_event(output->id,
+		igt_assert_f(igt_conn_event_detected(data.uevent_monitor, output->id,
 			     output->props[IGT_CONNECTOR_CONTENT_PROTECTION],
-			     timeout_mSec), "uevent is not received");
+			     timeout_mSec / 1000), "uevent is not received");
 
 		val = igt_output_get_prop(output,
 					  IGT_CONNECTOR_CONTENT_PROTECTION);
@@ -702,7 +566,10 @@ igt_main
 	igt_subtest("uevent") {
 		igt_require(data.display.is_atomic);
 		data.cp_tests = CP_UEVENT;
+		data.uevent_monitor = igt_watch_hotplug();
+		igt_flush_hotplugs(data.uevent_monitor);
 		test_content_protection(COMMIT_ATOMIC, HDCP_CONTENT_TYPE_0);
+		igt_cleanup_hotplug(data.uevent_monitor);
 	}
 
 	/*
-- 
2.17.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [igt-dev] [Patch][i-g-t 2/2] tests/kms_content_protection: Use library functions for handling uevents
  2020-06-16 10:58 ` [igt-dev] [Patch][i-g-t 2/2] tests/kms_content_protection: Use library functions for handling uevents Ankit Nautiyal
@ 2020-06-16 14:03   ` Ramalingam C
  2020-06-16 14:10     ` Arkadiusz Hiler
  2020-06-17  4:18     ` Anshuman Gupta
  0 siblings, 2 replies; 12+ messages in thread
From: Ramalingam C @ 2020-06-16 14:03 UTC (permalink / raw)
  To: Ankit Nautiyal; +Cc: igt-dev

On 2020-06-16 at 16:28:12 +0530, Ankit Nautiyal wrote:
> Currently, the test has its own version of uevent handling used
> for detecting hdcp events. This patch modifies the test to use
> the igt_kms lib support for handling the uevent monitor and detect
> hdcp events.
> 
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
>  tests/kms_content_protection.c | 145 ++-------------------------------
>  1 file changed, 6 insertions(+), 139 deletions(-)
> 
> diff --git a/tests/kms_content_protection.c b/tests/kms_content_protection.c
> index 3b9cedcb..475a5089 100644
> --- a/tests/kms_content_protection.c
> +++ b/tests/kms_content_protection.c
> @@ -39,6 +39,7 @@ struct data {
>  	igt_display_t display;
>  	struct igt_fb red, green;
>  	unsigned int cp_tests;
> +	struct udev_monitor *uevent_monitor;
>  } data;
>  
>  /* Test flags */
> @@ -112,143 +113,6 @@ static int wait_flip_event(void)
>  	return rc;
>  }
>  
> -static bool hdcp_event(struct udev_monitor *uevent_monitor,
> -		       struct udev *udev, uint32_t conn_id, uint32_t prop_id)
> -{
> -	struct udev_device *dev;
> -	dev_t udev_devnum;
> -	struct stat s;
> -	const char *hotplug, *connector, *property;
> -	bool ret = false;
> -
> -	dev = udev_monitor_receive_device(uevent_monitor);
> -	if (!dev)
> -		goto out;
> -
> -	udev_devnum = udev_device_get_devnum(dev);
> -	fstat(data.display.drm_fd, &s);
> -
> -	hotplug = udev_device_get_property_value(dev, "HOTPLUG");
> -	if (!(memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
> -	    hotplug && atoi(hotplug) == 1)) {
> -		igt_debug("Not a Hotplug event\n");
> -		goto out_dev;
> -	}
> -
> -	connector = udev_device_get_property_value(dev, "CONNECTOR");
> -	if (!(memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
> -	    connector && atoi(connector) == conn_id)) {
> -		igt_debug("Not for connector id: %u\n", conn_id);
> -		goto out_dev;
> -	}
> -
> -	property = udev_device_get_property_value(dev, "PROPERTY");
> -	if (!(memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
> -	    property && atoi(property) == prop_id)) {
> -		igt_debug("Not for property id: %u\n", prop_id);
> -		goto out_dev;
> -	}
> -	ret = true;
> -
> -out_dev:
> -	udev_device_unref(dev);
> -out:
> -	return ret;
> -}
> -
> -static void hdcp_udev_fini(struct udev_monitor *uevent_monitor,
> -			   struct udev *udev)
> -{
> -	if (uevent_monitor)
> -		udev_monitor_unref(uevent_monitor);
> -	if (udev)
> -		udev_unref(udev);
> -}
> -
> -static int hdcp_udev_init(struct udev_monitor **uevent_monitor,
> -			  struct udev **udev, int *udev_fd)
> -{
> -	int ret = -EINVAL;
> -
> -	*udev = udev_new();
> -	if (!*udev) {
> -		igt_info("failed to create udev object\n");
> -		goto out;
> -	}
> -
> -	*uevent_monitor = udev_monitor_new_from_netlink(*udev, "udev");
> -	if (!*uevent_monitor) {
> -		igt_info("failed to create udev event monitor\n");
> -		goto out;
> -	}
> -
> -	ret = udev_monitor_filter_add_match_subsystem_devtype(*uevent_monitor,
> -							      "drm",
> -							      "drm_minor");
> -	if (ret < 0) {
> -		igt_info("failed to filter for drm events\n");
> -		goto out;
> -	}
> -
> -	ret = udev_monitor_enable_receiving(*uevent_monitor);
> -	if (ret < 0) {
> -		igt_info("failed to enable udev event reception\n");
> -		goto out;
> -	}
> -
> -	*udev_fd = udev_monitor_get_fd(*uevent_monitor);
> -	if (*udev_fd < 0) {
> -		igt_info("failed to get udev_fd on uevent monitor\n");
> -		ret = *udev_fd;
> -		goto out;
> -	}
> -
> -	return ret;
> -
> -out:
> -	hdcp_udev_fini(*uevent_monitor, *udev);
> -	return ret;
> -}
> -
> -#define MAX_EVENTS	10
> -static bool wait_for_hdcp_event(uint32_t conn_id, uint32_t prop_id,
> -				uint32_t timeout_mSec)
> -{
> -
> -	struct udev_monitor *uevent_monitor = NULL;
> -	struct udev *udev = NULL;
> -	int udev_fd, epoll_fd;
> -	struct epoll_event event, events[MAX_EVENTS];
> -	bool ret = false;
> -
> -	if (hdcp_udev_init(&uevent_monitor, &udev, &udev_fd) < 0)
> -		return false;
> -
> -	epoll_fd = epoll_create1(0);
> -	if (epoll_fd == -1) {
> -		igt_info("Failed to create epoll fd. %d\n", epoll_fd);
> -		goto out_ep_create;
> -	}
> -
> -	event.events = EPOLLIN | EPOLLERR;
> -	event.data.fd = 0;
> -
> -	if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, udev_fd, &event)) {
> -		igt_info("failed to fd into epoll\n");
> -		goto out_ep_ctl;
> -	}
> -
> -	if (epoll_wait(epoll_fd, events, MAX_EVENTS, timeout_mSec))
> -		ret = hdcp_event(uevent_monitor, udev, conn_id, prop_id);
> -
> -out_ep_ctl:
> -	if (close(epoll_fd))
> -		igt_info("failed to close the epoll fd\n");
> -out_ep_create:
> -	hdcp_udev_fini(uevent_monitor, udev);
> -	return ret;
> -}
> -
>  static bool
>  wait_for_prop_value(igt_output_t *output, uint64_t expected,
>  		    uint32_t timeout_mSec)
> @@ -257,9 +121,9 @@ wait_for_prop_value(igt_output_t *output, uint64_t expected,
>  	int i;
>  
>  	if (data.cp_tests & CP_UEVENT && expected != CP_UNDESIRED) {
> -		igt_assert_f(wait_for_hdcp_event(output->id,
> +		igt_assert_f(igt_conn_event_detected(data.uevent_monitor, output->id,
>  			     output->props[IGT_CONNECTOR_CONTENT_PROTECTION],
> -			     timeout_mSec), "uevent is not received");
> +			     timeout_mSec / 1000), "uevent is not received");
>  
>  		val = igt_output_get_prop(output,
>  					  IGT_CONNECTOR_CONTENT_PROTECTION);
> @@ -702,7 +566,10 @@ igt_main
>  	igt_subtest("uevent") {
>  		igt_require(data.display.is_atomic);
>  		data.cp_tests = CP_UEVENT;
> +		data.uevent_monitor = igt_watch_hotplug();
Ankit, this is really good.

Any benefit with sporadic hdcp event missing issue?

I would prefer to create generic implementations like igt_watch_udev.
Similarly for igt_flush_hotplugs and igt_cleanup_hotplug.

-Ram.
> +		igt_flush_hotplugs(data.uevent_monitor);
>  		test_content_protection(COMMIT_ATOMIC, HDCP_CONTENT_TYPE_0);
> +		igt_cleanup_hotplug(data.uevent_monitor);
>  	}
>  
>  	/*
> -- 
> 2.17.1
> 
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [igt-dev] [Patch][i-g-t 2/2] tests/kms_content_protection: Use library functions for handling uevents
  2020-06-16 14:03   ` Ramalingam C
@ 2020-06-16 14:10     ` Arkadiusz Hiler
  2020-06-16 14:17       ` Ramalingam C
  2020-06-17  4:18     ` Anshuman Gupta
  1 sibling, 1 reply; 12+ messages in thread
From: Arkadiusz Hiler @ 2020-06-16 14:10 UTC (permalink / raw)
  To: Ramalingam C; +Cc: igt-dev

On Tue, Jun 16, 2020 at 07:33:04PM +0530, Ramalingam C wrote:
> On 2020-06-16 at 16:28:12 +0530, Ankit Nautiyal wrote:
> > Currently, the test has its own version of uevent handling used
> > for detecting hdcp events. This patch modifies the test to use
> > the igt_kms lib support for handling the uevent monitor and detect
> > hdcp events.
> > 
> > Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> > ---
> >  tests/kms_content_protection.c | 145 ++-------------------------------
> >  1 file changed, 6 insertions(+), 139 deletions(-)
> > 
> > diff --git a/tests/kms_content_protection.c b/tests/kms_content_protection.c
> > index 3b9cedcb..475a5089 100644
> > --- a/tests/kms_content_protection.c
> > +++ b/tests/kms_content_protection.c
> > @@ -39,6 +39,7 @@ struct data {
> >  	igt_display_t display;
> >  	struct igt_fb red, green;
> >  	unsigned int cp_tests;
> > +	struct udev_monitor *uevent_monitor;
> >  } data;
> >  
> >  /* Test flags */
> > @@ -112,143 +113,6 @@ static int wait_flip_event(void)
> >  	return rc;
> >  }
> >  
> > -static bool hdcp_event(struct udev_monitor *uevent_monitor,
> > -		       struct udev *udev, uint32_t conn_id, uint32_t prop_id)
> > -{
> > -	struct udev_device *dev;
> > -	dev_t udev_devnum;
> > -	struct stat s;
> > -	const char *hotplug, *connector, *property;
> > -	bool ret = false;
> > -
> > -	dev = udev_monitor_receive_device(uevent_monitor);
> > -	if (!dev)
> > -		goto out;
> > -
> > -	udev_devnum = udev_device_get_devnum(dev);
> > -	fstat(data.display.drm_fd, &s);
> > -
> > -	hotplug = udev_device_get_property_value(dev, "HOTPLUG");
> > -	if (!(memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
> > -	    hotplug && atoi(hotplug) == 1)) {
> > -		igt_debug("Not a Hotplug event\n");
> > -		goto out_dev;
> > -	}
> > -
> > -	connector = udev_device_get_property_value(dev, "CONNECTOR");
> > -	if (!(memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
> > -	    connector && atoi(connector) == conn_id)) {
> > -		igt_debug("Not for connector id: %u\n", conn_id);
> > -		goto out_dev;
> > -	}
> > -
> > -	property = udev_device_get_property_value(dev, "PROPERTY");
> > -	if (!(memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
> > -	    property && atoi(property) == prop_id)) {
> > -		igt_debug("Not for property id: %u\n", prop_id);
> > -		goto out_dev;
> > -	}
> > -	ret = true;
> > -
> > -out_dev:
> > -	udev_device_unref(dev);
> > -out:
> > -	return ret;
> > -}
> > -
> > -static void hdcp_udev_fini(struct udev_monitor *uevent_monitor,
> > -			   struct udev *udev)
> > -{
> > -	if (uevent_monitor)
> > -		udev_monitor_unref(uevent_monitor);
> > -	if (udev)
> > -		udev_unref(udev);
> > -}
> > -
> > -static int hdcp_udev_init(struct udev_monitor **uevent_monitor,
> > -			  struct udev **udev, int *udev_fd)
> > -{
> > -	int ret = -EINVAL;
> > -
> > -	*udev = udev_new();
> > -	if (!*udev) {
> > -		igt_info("failed to create udev object\n");
> > -		goto out;
> > -	}
> > -
> > -	*uevent_monitor = udev_monitor_new_from_netlink(*udev, "udev");
> > -	if (!*uevent_monitor) {
> > -		igt_info("failed to create udev event monitor\n");
> > -		goto out;
> > -	}
> > -
> > -	ret = udev_monitor_filter_add_match_subsystem_devtype(*uevent_monitor,
> > -							      "drm",
> > -							      "drm_minor");
> > -	if (ret < 0) {
> > -		igt_info("failed to filter for drm events\n");
> > -		goto out;
> > -	}
> > -
> > -	ret = udev_monitor_enable_receiving(*uevent_monitor);
> > -	if (ret < 0) {
> > -		igt_info("failed to enable udev event reception\n");
> > -		goto out;
> > -	}
> > -
> > -	*udev_fd = udev_monitor_get_fd(*uevent_monitor);
> > -	if (*udev_fd < 0) {
> > -		igt_info("failed to get udev_fd on uevent monitor\n");
> > -		ret = *udev_fd;
> > -		goto out;
> > -	}
> > -
> > -	return ret;
> > -
> > -out:
> > -	hdcp_udev_fini(*uevent_monitor, *udev);
> > -	return ret;
> > -}
> > -
> > -#define MAX_EVENTS	10
> > -static bool wait_for_hdcp_event(uint32_t conn_id, uint32_t prop_id,
> > -				uint32_t timeout_mSec)
> > -{
> > -
> > -	struct udev_monitor *uevent_monitor = NULL;
> > -	struct udev *udev = NULL;
> > -	int udev_fd, epoll_fd;
> > -	struct epoll_event event, events[MAX_EVENTS];
> > -	bool ret = false;
> > -
> > -	if (hdcp_udev_init(&uevent_monitor, &udev, &udev_fd) < 0)
> > -		return false;
> > -
> > -	epoll_fd = epoll_create1(0);
> > -	if (epoll_fd == -1) {
> > -		igt_info("Failed to create epoll fd. %d\n", epoll_fd);
> > -		goto out_ep_create;
> > -	}
> > -
> > -	event.events = EPOLLIN | EPOLLERR;
> > -	event.data.fd = 0;
> > -
> > -	if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, udev_fd, &event)) {
> > -		igt_info("failed to fd into epoll\n");
> > -		goto out_ep_ctl;
> > -	}
> > -
> > -	if (epoll_wait(epoll_fd, events, MAX_EVENTS, timeout_mSec))
> > -		ret = hdcp_event(uevent_monitor, udev, conn_id, prop_id);
> > -
> > -out_ep_ctl:
> > -	if (close(epoll_fd))
> > -		igt_info("failed to close the epoll fd\n");
> > -out_ep_create:
> > -	hdcp_udev_fini(uevent_monitor, udev);
> > -	return ret;
> > -}
> > -
> >  static bool
> >  wait_for_prop_value(igt_output_t *output, uint64_t expected,
> >  		    uint32_t timeout_mSec)
> > @@ -257,9 +121,9 @@ wait_for_prop_value(igt_output_t *output, uint64_t expected,
> >  	int i;
> >  
> >  	if (data.cp_tests & CP_UEVENT && expected != CP_UNDESIRED) {
> > -		igt_assert_f(wait_for_hdcp_event(output->id,
> > +		igt_assert_f(igt_conn_event_detected(data.uevent_monitor, output->id,
> >  			     output->props[IGT_CONNECTOR_CONTENT_PROTECTION],
> > -			     timeout_mSec), "uevent is not received");
> > +			     timeout_mSec / 1000), "uevent is not received");
> >  
> >  		val = igt_output_get_prop(output,
> >  					  IGT_CONNECTOR_CONTENT_PROTECTION);
> > @@ -702,7 +566,10 @@ igt_main
> >  	igt_subtest("uevent") {
> >  		igt_require(data.display.is_atomic);
> >  		data.cp_tests = CP_UEVENT;
> > +		data.uevent_monitor = igt_watch_hotplug();
> Ankit, this is really good.
> 
> Any benefit with sporadic hdcp event missing issue?
> 
> I would prefer to create generic implementations like igt_watch_udev.
> Similarly for igt_flush_hotplugs and igt_cleanup_hotplug.
> 
> -Ram.

Agreed, the change is definatetly in the right direction! :-)

I am not sure wheter there is a need to create something "new", but at
least having a bit more generic names for the existing fuctions would be
nice.

-- 
Cheers,
Arek
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [igt-dev] [Patch][i-g-t 1/2] lib/igt_kms: Add support for detecting connector events
  2020-06-16 10:58 ` [igt-dev] [Patch][i-g-t 1/2] lib/igt_kms: Add support for detecting connector events Ankit Nautiyal
@ 2020-06-16 14:12   ` Ramalingam C
  2020-06-17  6:23     ` Nautiyal, Ankit K
  0 siblings, 1 reply; 12+ messages in thread
From: Ramalingam C @ 2020-06-16 14:12 UTC (permalink / raw)
  To: Ankit Nautiyal; +Cc: igt-dev

On 2020-06-16 at 16:28:11 +0530, Ankit Nautiyal wrote:
> Currently, the event_detect function checks the property val for
> "HOTPLUG" and "LEASE" both of which are set to '1' when these events
> are sent.
> 
> This cannot be used for detecting connector events such as HDCP event
> as connector events are sent along with property to signify which
> property of which connector has changed. Connector ID and property id
> are provided along with "CONNECTOR" and "PROPERTY" as udev
> property-value pairs. Eg. for HDCP, the connector id of the connector
> whose hdcp status changed, and the property id of the
> ‘CONTENT_PROTECTION’ property are sent with uevent.
> 
> This patch modifies the event_detect function to check multiple
> properties with different expected values. It also adds support to
> detect connector event for a given pair of connector and property ids.
> 
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
>  lib/igt_kms.c | 61 ++++++++++++++++++++++++++++++++++++++-------------
>  lib/igt_kms.h |  2 ++
>  2 files changed, 48 insertions(+), 15 deletions(-)
> 
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index 54de45e5..7177231e 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -4164,32 +4164,57 @@ struct udev_monitor *igt_watch_hotplug(void)
>  }
>  
>  static bool event_detected(struct udev_monitor *mon, int timeout_secs,
> -			   const char *property)
> +			   const char **property, int *expected_val, int num_props)
>  {
>  	struct udev_device *dev;
> -	const char *hotplug_val;
> +	const char *prop_val_str;
>  	struct pollfd fd = {
>  		.fd = udev_monitor_get_fd(mon),
>  		.events = POLLIN
>  	};
> -	bool hotplug_received = false;
> +	bool event_received = false;
> +	int i;
>  
> -	/* Go through all of the events pending on the udev monitor. Once we
> -	 * receive a hotplug, we continue going through the rest of the events
> -	 * so that redundant hotplug events don't change the results of future
> -	 * checks
> +	/* Go through all of the events pending on the udev monitor.
> +	 * Match the given set of properties and their values to
> +	 * the expected values.
>  	 */
> -	while (!hotplug_received && poll(&fd, 1, timeout_secs * 1000)) {
> +	while (!event_received && poll(&fd, 1, timeout_secs * 1000)) {
>  		dev = udev_monitor_receive_device(mon);
> -
> -		hotplug_val = udev_device_get_property_value(dev, property);
> -		if (hotplug_val && atoi(hotplug_val) == 1)
> -			hotplug_received = true;
> +		for (i = 0; i < num_props; i++) {
> +			event_received = true;
Not needed.
> +			prop_val_str = udev_device_get_property_value(dev, property[i]);
> +			if (!prop_val_str || atoi(prop_val_str) != expected_val[i]) {
> +				event_received = false;
Not needed.
> +				break;
> +			}
> +		}
		if (i == num_props)
			event_received = true;
>  
>  		udev_device_unref(dev);
>  	}
>  
> -	return hotplug_received;
> +	return event_received;
> +}
> +
> +/**
> + * igt_conn_event_detected:
> + * @mon: A udev monitor initialized with #igt_watch_hotplug
> + * @conn_id: Connector id of the Connector for which the property change is
> + * expected.
> + * @prop_id: Property id for which the change is expected.
> + * @timeout_secs: How long to wait for a connector event to occur.
> + *
> + * Assert that a connector event is received for a given connector and property.
> + *
> + * Returns: true if the connector event was received, false if we timed out
> + */
> +bool igt_conn_event_detected(struct udev_monitor *mon, uint32_t conn_id,
> +			     uint32_t prop_id, int timeout_secs)
> +{
> +	const char *props[2] = {"CONNECTOR", "PROPERTY"};
> +	int expected_val[2] = {conn_id, prop_id};
> +
> +	return event_detected(mon, timeout_secs, props, expected_val, 2);
>  }
>  
>  /**
> @@ -4203,7 +4228,10 @@ static bool event_detected(struct udev_monitor *mon, int timeout_secs,
>   */
>  bool igt_hotplug_detected(struct udev_monitor *mon, int timeout_secs)
>  {
> -	return event_detected(mon, timeout_secs, "HOTPLUG");
> +	const char *props[1] = {"HOTPLUG"};
> +	int expected_val = 1;
> +
> +	return event_detected(mon, timeout_secs, props, &expected_val, 1);
>  }
>  
>  /**
> @@ -4217,7 +4245,10 @@ bool igt_hotplug_detected(struct udev_monitor *mon, int timeout_secs)
>   */
>  bool igt_lease_change_detected(struct udev_monitor *mon, int timeout_secs)
>  {
> -	return event_detected(mon, timeout_secs, "LEASE");
> +	const char *props[1] = {"LEASE"};
> +	int expected_val = 1;
> +
> +	return event_detected(mon, timeout_secs, props, &expected_val, 1);
>  }
>  
>  /**
> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> index cd3fdbc0..27f1f729 100644
> --- a/lib/igt_kms.h
> +++ b/lib/igt_kms.h
> @@ -777,6 +777,8 @@ bool igt_hotplug_detected(struct udev_monitor *mon,
>  			  int timeout_secs);
>  bool igt_lease_change_detected(struct udev_monitor *mon,
>  			       int timeout_secs);
> +bool igt_conn_event_detected(struct udev_monitor *mon, uint32_t conn_id,
> +			     uint32_t prop_id, int timeout_msecs);
>  void igt_flush_hotplugs(struct udev_monitor *mon);
We need to have generich flush too like igt_(watch/flush/cleanup)_udev_event()

-Ram
>  void igt_cleanup_hotplug(struct udev_monitor *mon);
>  
> -- 
> 2.17.1
> 
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [igt-dev] [Patch][i-g-t 2/2] tests/kms_content_protection: Use library functions for handling uevents
  2020-06-16 14:10     ` Arkadiusz Hiler
@ 2020-06-16 14:17       ` Ramalingam C
  0 siblings, 0 replies; 12+ messages in thread
From: Ramalingam C @ 2020-06-16 14:17 UTC (permalink / raw)
  To: Arkadiusz Hiler; +Cc: igt-dev

On 2020-06-16 at 17:10:15 +0300, Arkadiusz Hiler wrote:
> On Tue, Jun 16, 2020 at 07:33:04PM +0530, Ramalingam C wrote:
> > On 2020-06-16 at 16:28:12 +0530, Ankit Nautiyal wrote:
> > > Currently, the test has its own version of uevent handling used
> > > for detecting hdcp events. This patch modifies the test to use
> > > the igt_kms lib support for handling the uevent monitor and detect
> > > hdcp events.
> > > 
> > > Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> > > ---
> > >  tests/kms_content_protection.c | 145 ++-------------------------------
> > >  1 file changed, 6 insertions(+), 139 deletions(-)
> > > 
> > > diff --git a/tests/kms_content_protection.c b/tests/kms_content_protection.c
> > > index 3b9cedcb..475a5089 100644
> > > --- a/tests/kms_content_protection.c
> > > +++ b/tests/kms_content_protection.c
> > > @@ -39,6 +39,7 @@ struct data {
> > >  	igt_display_t display;
> > >  	struct igt_fb red, green;
> > >  	unsigned int cp_tests;
> > > +	struct udev_monitor *uevent_monitor;
> > >  } data;
> > >  
> > >  /* Test flags */
> > > @@ -112,143 +113,6 @@ static int wait_flip_event(void)
> > >  	return rc;
> > >  }
> > >  
> > > -static bool hdcp_event(struct udev_monitor *uevent_monitor,
> > > -		       struct udev *udev, uint32_t conn_id, uint32_t prop_id)
> > > -{
> > > -	struct udev_device *dev;
> > > -	dev_t udev_devnum;
> > > -	struct stat s;
> > > -	const char *hotplug, *connector, *property;
> > > -	bool ret = false;
> > > -
> > > -	dev = udev_monitor_receive_device(uevent_monitor);
> > > -	if (!dev)
> > > -		goto out;
> > > -
> > > -	udev_devnum = udev_device_get_devnum(dev);
> > > -	fstat(data.display.drm_fd, &s);
> > > -
> > > -	hotplug = udev_device_get_property_value(dev, "HOTPLUG");
> > > -	if (!(memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
> > > -	    hotplug && atoi(hotplug) == 1)) {
> > > -		igt_debug("Not a Hotplug event\n");
> > > -		goto out_dev;
> > > -	}
> > > -
> > > -	connector = udev_device_get_property_value(dev, "CONNECTOR");
> > > -	if (!(memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
> > > -	    connector && atoi(connector) == conn_id)) {
> > > -		igt_debug("Not for connector id: %u\n", conn_id);
> > > -		goto out_dev;
> > > -	}
> > > -
> > > -	property = udev_device_get_property_value(dev, "PROPERTY");
> > > -	if (!(memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
> > > -	    property && atoi(property) == prop_id)) {
> > > -		igt_debug("Not for property id: %u\n", prop_id);
> > > -		goto out_dev;
> > > -	}
> > > -	ret = true;
> > > -
> > > -out_dev:
> > > -	udev_device_unref(dev);
> > > -out:
> > > -	return ret;
> > > -}
> > > -
> > > -static void hdcp_udev_fini(struct udev_monitor *uevent_monitor,
> > > -			   struct udev *udev)
> > > -{
> > > -	if (uevent_monitor)
> > > -		udev_monitor_unref(uevent_monitor);
> > > -	if (udev)
> > > -		udev_unref(udev);
> > > -}
> > > -
> > > -static int hdcp_udev_init(struct udev_monitor **uevent_monitor,
> > > -			  struct udev **udev, int *udev_fd)
> > > -{
> > > -	int ret = -EINVAL;
> > > -
> > > -	*udev = udev_new();
> > > -	if (!*udev) {
> > > -		igt_info("failed to create udev object\n");
> > > -		goto out;
> > > -	}
> > > -
> > > -	*uevent_monitor = udev_monitor_new_from_netlink(*udev, "udev");
> > > -	if (!*uevent_monitor) {
> > > -		igt_info("failed to create udev event monitor\n");
> > > -		goto out;
> > > -	}
> > > -
> > > -	ret = udev_monitor_filter_add_match_subsystem_devtype(*uevent_monitor,
> > > -							      "drm",
> > > -							      "drm_minor");
> > > -	if (ret < 0) {
> > > -		igt_info("failed to filter for drm events\n");
> > > -		goto out;
> > > -	}
> > > -
> > > -	ret = udev_monitor_enable_receiving(*uevent_monitor);
> > > -	if (ret < 0) {
> > > -		igt_info("failed to enable udev event reception\n");
> > > -		goto out;
> > > -	}
> > > -
> > > -	*udev_fd = udev_monitor_get_fd(*uevent_monitor);
> > > -	if (*udev_fd < 0) {
> > > -		igt_info("failed to get udev_fd on uevent monitor\n");
> > > -		ret = *udev_fd;
> > > -		goto out;
> > > -	}
> > > -
> > > -	return ret;
> > > -
> > > -out:
> > > -	hdcp_udev_fini(*uevent_monitor, *udev);
> > > -	return ret;
> > > -}
> > > -
> > > -#define MAX_EVENTS	10
> > > -static bool wait_for_hdcp_event(uint32_t conn_id, uint32_t prop_id,
> > > -				uint32_t timeout_mSec)
> > > -{
> > > -
> > > -	struct udev_monitor *uevent_monitor = NULL;
> > > -	struct udev *udev = NULL;
> > > -	int udev_fd, epoll_fd;
> > > -	struct epoll_event event, events[MAX_EVENTS];
> > > -	bool ret = false;
> > > -
> > > -	if (hdcp_udev_init(&uevent_monitor, &udev, &udev_fd) < 0)
> > > -		return false;
> > > -
> > > -	epoll_fd = epoll_create1(0);
> > > -	if (epoll_fd == -1) {
> > > -		igt_info("Failed to create epoll fd. %d\n", epoll_fd);
> > > -		goto out_ep_create;
> > > -	}
> > > -
> > > -	event.events = EPOLLIN | EPOLLERR;
> > > -	event.data.fd = 0;
> > > -
> > > -	if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, udev_fd, &event)) {
> > > -		igt_info("failed to fd into epoll\n");
> > > -		goto out_ep_ctl;
> > > -	}
> > > -
> > > -	if (epoll_wait(epoll_fd, events, MAX_EVENTS, timeout_mSec))
> > > -		ret = hdcp_event(uevent_monitor, udev, conn_id, prop_id);
> > > -
> > > -out_ep_ctl:
> > > -	if (close(epoll_fd))
> > > -		igt_info("failed to close the epoll fd\n");
> > > -out_ep_create:
> > > -	hdcp_udev_fini(uevent_monitor, udev);
> > > -	return ret;
> > > -}
> > > -
> > >  static bool
> > >  wait_for_prop_value(igt_output_t *output, uint64_t expected,
> > >  		    uint32_t timeout_mSec)
> > > @@ -257,9 +121,9 @@ wait_for_prop_value(igt_output_t *output, uint64_t expected,
> > >  	int i;
> > >  
> > >  	if (data.cp_tests & CP_UEVENT && expected != CP_UNDESIRED) {
> > > -		igt_assert_f(wait_for_hdcp_event(output->id,
> > > +		igt_assert_f(igt_conn_event_detected(data.uevent_monitor, output->id,
> > >  			     output->props[IGT_CONNECTOR_CONTENT_PROTECTION],
> > > -			     timeout_mSec), "uevent is not received");
> > > +			     timeout_mSec / 1000), "uevent is not received");
> > >  
> > >  		val = igt_output_get_prop(output,
> > >  					  IGT_CONNECTOR_CONTENT_PROTECTION);
> > > @@ -702,7 +566,10 @@ igt_main
> > >  	igt_subtest("uevent") {
> > >  		igt_require(data.display.is_atomic);
> > >  		data.cp_tests = CP_UEVENT;
> > > +		data.uevent_monitor = igt_watch_hotplug();
> > Ankit, this is really good.
> > 
> > Any benefit with sporadic hdcp event missing issue?
> > 
> > I would prefer to create generic implementations like igt_watch_udev.
> > Similarly for igt_flush_hotplugs and igt_cleanup_hotplug.
> > 
> > -Ram.
> 
> Agreed, the change is definatetly in the right direction! :-)
> 
> I am not sure wheter there is a need to create something "new", but at
> least having a bit more generic names for the existing fuctions would be
> nice.
Agreed. Considering, only three igt files are using these funcs we could rename
them.

-Ram
> 
> -- 
> Cheers,
> Arek
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for Add support to detect HDCP events
  2020-06-16 10:58 [igt-dev] [Patch][i-g-t 0/2] Add support to detect HDCP events Ankit Nautiyal
  2020-06-16 10:58 ` [igt-dev] [Patch][i-g-t 1/2] lib/igt_kms: Add support for detecting connector events Ankit Nautiyal
  2020-06-16 10:58 ` [igt-dev] [Patch][i-g-t 2/2] tests/kms_content_protection: Use library functions for handling uevents Ankit Nautiyal
@ 2020-06-16 16:45 ` Patchwork
  2020-06-16 17:44 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
  3 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2020-06-16 16:45 UTC (permalink / raw)
  To: Ankit Nautiyal; +Cc: igt-dev

== Series Details ==

Series: Add support to detect HDCP events
URL   : https://patchwork.freedesktop.org/series/78413/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_8634 -> IGTPW_4676
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/index.html

Known issues
------------

  Here are the changes found in IGTPW_4676 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@i915_pm_rpm@module-reload:
    - fi-kbl-guc:         [PASS][1] -> [SKIP][2] ([fdo#109271])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/fi-kbl-guc/igt@i915_pm_rpm@module-reload.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/fi-kbl-guc/igt@i915_pm_rpm@module-reload.html

  * igt@kms_chamelium@dp-crc-fast:
    - fi-kbl-7500u:       [PASS][3] -> [FAIL][4] ([i915#262])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/fi-kbl-7500u/igt@kms_chamelium@dp-crc-fast.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/fi-kbl-7500u/igt@kms_chamelium@dp-crc-fast.html

  * igt@kms_pipe_crc_basic@read-crc-pipe-a-frame-sequence:
    - fi-tgl-u2:          [PASS][5] -> [DMESG-WARN][6] ([i915#402])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/fi-tgl-u2/igt@kms_pipe_crc_basic@read-crc-pipe-a-frame-sequence.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/fi-tgl-u2/igt@kms_pipe_crc_basic@read-crc-pipe-a-frame-sequence.html

  
#### Possible fixes ####

  * igt@i915_module_load@reload:
    - fi-tgl-u2:          [DMESG-WARN][7] ([i915#402]) -> [PASS][8]
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/fi-tgl-u2/igt@i915_module_load@reload.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/fi-tgl-u2/igt@i915_module_load@reload.html

  * igt@i915_pm_rpm@basic-pci-d3-state:
    - fi-byt-j1900:       [DMESG-WARN][9] ([i915#1982]) -> [PASS][10]
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/fi-byt-j1900/igt@i915_pm_rpm@basic-pci-d3-state.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/fi-byt-j1900/igt@i915_pm_rpm@basic-pci-d3-state.html
    - fi-bsw-kefka:       [DMESG-WARN][11] ([i915#1982]) -> [PASS][12]
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/fi-bsw-kefka/igt@i915_pm_rpm@basic-pci-d3-state.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/fi-bsw-kefka/igt@i915_pm_rpm@basic-pci-d3-state.html

  * igt@i915_selftest@live@gt_lrc:
    - fi-tgl-u2:          [DMESG-FAIL][13] ([i915#1233]) -> [PASS][14]
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/fi-tgl-u2/igt@i915_selftest@live@gt_lrc.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/fi-tgl-u2/igt@i915_selftest@live@gt_lrc.html

  
#### Warnings ####

  * igt@gem_exec_suspend@basic-s0:
    - fi-kbl-x1275:       [DMESG-WARN][15] ([i915#62] / [i915#92] / [i915#95]) -> [DMESG-WARN][16] ([i915#1982] / [i915#62] / [i915#92])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/fi-kbl-x1275/igt@gem_exec_suspend@basic-s0.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/fi-kbl-x1275/igt@gem_exec_suspend@basic-s0.html

  * igt@kms_cursor_legacy@basic-flip-after-cursor-legacy:
    - fi-kbl-x1275:       [DMESG-WARN][17] ([i915#62] / [i915#92] / [i915#95]) -> [DMESG-WARN][18] ([i915#62] / [i915#92]) +6 similar issues
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/fi-kbl-x1275/igt@kms_cursor_legacy@basic-flip-after-cursor-legacy.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/fi-kbl-x1275/igt@kms_cursor_legacy@basic-flip-after-cursor-legacy.html

  * igt@prime_vgem@basic-fence-flip:
    - fi-kbl-x1275:       [DMESG-WARN][19] ([i915#62] / [i915#92]) -> [DMESG-WARN][20] ([i915#62] / [i915#92] / [i915#95]) +2 similar issues
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/fi-kbl-x1275/igt@prime_vgem@basic-fence-flip.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/fi-kbl-x1275/igt@prime_vgem@basic-fence-flip.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [i915#1233]: https://gitlab.freedesktop.org/drm/intel/issues/1233
  [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
  [i915#262]: https://gitlab.freedesktop.org/drm/intel/issues/262
  [i915#402]: https://gitlab.freedesktop.org/drm/intel/issues/402
  [i915#62]: https://gitlab.freedesktop.org/drm/intel/issues/62
  [i915#92]: https://gitlab.freedesktop.org/drm/intel/issues/92
  [i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95


Participating hosts (48 -> 42)
------------------------------

  Missing    (6): fi-ilk-m540 fi-byt-squawks fi-bsw-cyan fi-tgl-y fi-byt-clapper fi-bdw-samus 


Build changes
-------------

  * CI: CI-20190529 -> None
  * IGT: IGT_5711 -> IGTPW_4676

  CI-20190529: 20190529
  CI_DRM_8634: 72c556b3627adef8cef3b7a47c32987b96e7f1c2 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_4676: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/index.html
  IGT_5711: 90611a0c90afa4a46496c78a4faf9638a1538ac3 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/index.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [igt-dev] ✓ Fi.CI.IGT: success for Add support to detect HDCP events
  2020-06-16 10:58 [igt-dev] [Patch][i-g-t 0/2] Add support to detect HDCP events Ankit Nautiyal
                   ` (2 preceding siblings ...)
  2020-06-16 16:45 ` [igt-dev] ✓ Fi.CI.BAT: success for Add support to detect HDCP events Patchwork
@ 2020-06-16 17:44 ` Patchwork
  3 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2020-06-16 17:44 UTC (permalink / raw)
  To: Ankit Nautiyal; +Cc: igt-dev

== Series Details ==

Series: Add support to detect HDCP events
URL   : https://patchwork.freedesktop.org/series/78413/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_8634_full -> IGTPW_4676_full
====================================================

Summary
-------

  **WARNING**

  Minor unknown changes coming with IGTPW_4676_full need to be verified
  manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_4676_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/index.html

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in IGTPW_4676_full:

### IGT changes ###

#### Warnings ####

  * igt@kms_content_protection@uevent:
    - shard-kbl:          [FAIL][1] ([i915#357]) -> [FAIL][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-kbl4/igt@kms_content_protection@uevent.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-kbl7/igt@kms_content_protection@uevent.html
    - shard-apl:          [FAIL][3] ([i915#357]) -> [FAIL][4]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-apl6/igt@kms_content_protection@uevent.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-apl1/igt@kms_content_protection@uevent.html

  
Known issues
------------

  Here are the changes found in IGTPW_4676_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_ctx_isolation@preservation-s3@rcs0:
    - shard-kbl:          [PASS][5] -> [DMESG-WARN][6] ([i915#180]) +3 similar issues
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-kbl2/igt@gem_ctx_isolation@preservation-s3@rcs0.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-kbl7/igt@gem_ctx_isolation@preservation-s3@rcs0.html

  * igt@gem_exec_reloc@basic-concurrent0:
    - shard-glk:          [PASS][7] -> [FAIL][8] ([i915#1930])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-glk2/igt@gem_exec_reloc@basic-concurrent0.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-glk9/igt@gem_exec_reloc@basic-concurrent0.html

  * igt@gem_exec_whisper@basic-fds-priority:
    - shard-glk:          [PASS][9] -> [DMESG-WARN][10] ([i915#118] / [i915#95]) +1 similar issue
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-glk8/igt@gem_exec_whisper@basic-fds-priority.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-glk5/igt@gem_exec_whisper@basic-fds-priority.html

  * igt@gem_mmap_gtt@cpuset-medium-copy-xy:
    - shard-apl:          [PASS][11] -> [DMESG-WARN][12] ([i915#95]) +26 similar issues
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-apl1/igt@gem_mmap_gtt@cpuset-medium-copy-xy.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-apl8/igt@gem_mmap_gtt@cpuset-medium-copy-xy.html

  * igt@kms_big_fb@linear-64bpp-rotate-0:
    - shard-glk:          [PASS][13] -> [DMESG-FAIL][14] ([i915#118] / [i915#95])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-glk1/igt@kms_big_fb@linear-64bpp-rotate-0.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-glk8/igt@kms_big_fb@linear-64bpp-rotate-0.html

  * igt@kms_cursor_crc@pipe-a-cursor-64x64-onscreen:
    - shard-kbl:          [PASS][15] -> [DMESG-FAIL][16] ([i915#54] / [i915#95]) +3 similar issues
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-kbl3/igt@kms_cursor_crc@pipe-a-cursor-64x64-onscreen.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-kbl2/igt@kms_cursor_crc@pipe-a-cursor-64x64-onscreen.html

  * igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy:
    - shard-glk:          [PASS][17] -> [FAIL][18] ([i915#72])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-glk2/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-glk7/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy.html

  * igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-untiled:
    - shard-apl:          [PASS][19] -> [DMESG-FAIL][20] ([i915#54] / [i915#95]) +1 similar issue
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-apl4/igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-untiled.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-apl8/igt@kms_draw_crc@draw-method-xrgb8888-mmap-gtt-untiled.html

  * igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-pwrite:
    - shard-kbl:          [PASS][21] -> [DMESG-WARN][22] ([i915#1982])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-kbl2/igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-pwrite.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-kbl4/igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-move:
    - shard-tglb:         [PASS][23] -> [DMESG-WARN][24] ([i915#1982]) +1 similar issue
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-tglb8/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-move.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-tglb5/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-rte:
    - shard-tglb:         [PASS][25] -> [DMESG-WARN][26] ([i915#402]) +2 similar issues
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-tglb5/igt@kms_frontbuffer_tracking@fbcpsr-1p-rte.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-tglb3/igt@kms_frontbuffer_tracking@fbcpsr-1p-rte.html

  * igt@kms_hdmi_inject@inject-audio:
    - shard-tglb:         [PASS][27] -> [SKIP][28] ([i915#433])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-tglb1/igt@kms_hdmi_inject@inject-audio.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-tglb6/igt@kms_hdmi_inject@inject-audio.html

  * igt@kms_pipe_crc_basic@read-crc-pipe-a:
    - shard-apl:          [PASS][29] -> [DMESG-FAIL][30] ([i915#95]) +1 similar issue
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-apl7/igt@kms_pipe_crc_basic@read-crc-pipe-a.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-apl6/igt@kms_pipe_crc_basic@read-crc-pipe-a.html
    - shard-kbl:          [PASS][31] -> [DMESG-FAIL][32] ([i915#95]) +1 similar issue
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-kbl2/igt@kms_pipe_crc_basic@read-crc-pipe-a.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-kbl1/igt@kms_pipe_crc_basic@read-crc-pipe-a.html

  * igt@kms_plane_multiple@atomic-pipe-a-tiling-none:
    - shard-hsw:          [PASS][33] -> [TIMEOUT][34] ([i915#1958]) +1 similar issue
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-hsw1/igt@kms_plane_multiple@atomic-pipe-a-tiling-none.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-hsw8/igt@kms_plane_multiple@atomic-pipe-a-tiling-none.html

  * igt@kms_psr@psr2_sprite_plane_move:
    - shard-iclb:         [PASS][35] -> [SKIP][36] ([fdo#109441])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-iclb2/igt@kms_psr@psr2_sprite_plane_move.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-iclb5/igt@kms_psr@psr2_sprite_plane_move.html

  * igt@kms_setmode@basic:
    - shard-kbl:          [PASS][37] -> [FAIL][38] ([i915#31])
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-kbl3/igt@kms_setmode@basic.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-kbl4/igt@kms_setmode@basic.html

  * igt@perf@rc6-disable:
    - shard-iclb:         [PASS][39] -> [SKIP][40] ([i915#405])
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-iclb2/igt@perf@rc6-disable.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-iclb6/igt@perf@rc6-disable.html
    - shard-hsw:          [PASS][41] -> [SKIP][42] ([fdo#109271])
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-hsw6/igt@perf@rc6-disable.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-hsw6/igt@perf@rc6-disable.html
    - shard-kbl:          [PASS][43] -> [SKIP][44] ([fdo#109271])
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-kbl3/igt@perf@rc6-disable.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-kbl2/igt@perf@rc6-disable.html
    - shard-apl:          [PASS][45] -> [SKIP][46] ([fdo#109271])
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-apl8/igt@perf@rc6-disable.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-apl3/igt@perf@rc6-disable.html
    - shard-tglb:         [PASS][47] -> [SKIP][48] ([fdo#111719] / [i915#405])
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-tglb2/igt@perf@rc6-disable.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-tglb1/igt@perf@rc6-disable.html
    - shard-glk:          [PASS][49] -> [SKIP][50] ([fdo#109271])
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-glk7/igt@perf@rc6-disable.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-glk8/igt@perf@rc6-disable.html

  * igt@perf_pmu@semaphore-busy@rcs0:
    - shard-kbl:          [PASS][51] -> [FAIL][52] ([i915#1820])
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-kbl7/igt@perf_pmu@semaphore-busy@rcs0.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-kbl1/igt@perf_pmu@semaphore-busy@rcs0.html

  * igt@syncobj_wait@invalid-wait-zero-handles:
    - shard-kbl:          [PASS][53] -> [DMESG-WARN][54] ([i915#93] / [i915#95]) +35 similar issues
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-kbl7/igt@syncobj_wait@invalid-wait-zero-handles.html
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-kbl2/igt@syncobj_wait@invalid-wait-zero-handles.html

  
#### Possible fixes ####

  * igt@gem_exec_schedule@implicit-write-read@rcs0:
    - shard-snb:          [INCOMPLETE][55] ([i915#82]) -> [PASS][56] +2 similar issues
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-snb1/igt@gem_exec_schedule@implicit-write-read@rcs0.html
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-snb6/igt@gem_exec_schedule@implicit-write-read@rcs0.html

  * igt@gem_tiled_blits@basic:
    - shard-snb:          [TIMEOUT][57] ([i915#1958]) -> [PASS][58] +1 similar issue
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-snb4/igt@gem_tiled_blits@basic.html
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-snb5/igt@gem_tiled_blits@basic.html

  * igt@gen7_exec_parse@chained-batch:
    - shard-hsw:          [TIMEOUT][59] ([i915#1958]) -> [PASS][60] +2 similar issues
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-hsw7/igt@gen7_exec_parse@chained-batch.html
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-hsw7/igt@gen7_exec_parse@chained-batch.html

  * igt@i915_pm_rpm@system-suspend-modeset:
    - shard-hsw:          [SKIP][61] ([fdo#109271]) -> [PASS][62] +1 similar issue
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-hsw7/igt@i915_pm_rpm@system-suspend-modeset.html
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-hsw6/igt@i915_pm_rpm@system-suspend-modeset.html

  * igt@i915_query@query-topology-kernel-writes:
    - shard-iclb:         [DMESG-WARN][63] ([i915#1982]) -> [PASS][64]
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-iclb7/igt@i915_query@query-topology-kernel-writes.html
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-iclb5/igt@i915_query@query-topology-kernel-writes.html

  * igt@i915_suspend@fence-restore-untiled:
    - shard-kbl:          [INCOMPLETE][65] ([i915#155]) -> [PASS][66]
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-kbl1/igt@i915_suspend@fence-restore-untiled.html
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-kbl6/igt@i915_suspend@fence-restore-untiled.html

  * igt@kms_big_fb@y-tiled-64bpp-rotate-0:
    - shard-glk:          [DMESG-FAIL][67] ([i915#118] / [i915#95]) -> [PASS][68]
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-glk8/igt@kms_big_fb@y-tiled-64bpp-rotate-0.html
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-glk4/igt@kms_big_fb@y-tiled-64bpp-rotate-0.html

  * igt@kms_cursor_crc@pipe-a-cursor-128x128-sliding:
    - shard-apl:          [DMESG-WARN][69] ([i915#95]) -> [PASS][70] +45 similar issues
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-apl7/igt@kms_cursor_crc@pipe-a-cursor-128x128-sliding.html
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-apl6/igt@kms_cursor_crc@pipe-a-cursor-128x128-sliding.html

  * igt@kms_cursor_crc@pipe-a-cursor-64x21-random:
    - shard-kbl:          [DMESG-FAIL][71] ([i915#54] / [i915#95]) -> [PASS][72] +3 similar issues
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-kbl1/igt@kms_cursor_crc@pipe-a-cursor-64x21-random.html
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-kbl2/igt@kms_cursor_crc@pipe-a-cursor-64x21-random.html

  * igt@kms_cursor_crc@pipe-a-cursor-64x21-sliding:
    - shard-apl:          [FAIL][73] ([i915#54]) -> [PASS][74]
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-apl7/igt@kms_cursor_crc@pipe-a-cursor-64x21-sliding.html
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-apl2/igt@kms_cursor_crc@pipe-a-cursor-64x21-sliding.html
    - shard-kbl:          [FAIL][75] ([i915#54]) -> [PASS][76]
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-kbl2/igt@kms_cursor_crc@pipe-a-cursor-64x21-sliding.html
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-kbl1/igt@kms_cursor_crc@pipe-a-cursor-64x21-sliding.html
    - shard-glk:          [FAIL][77] ([i915#54]) -> [PASS][78]
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-glk7/igt@kms_cursor_crc@pipe-a-cursor-64x21-sliding.html
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-glk6/igt@kms_cursor_crc@pipe-a-cursor-64x21-sliding.html

  * igt@kms_draw_crc@draw-method-xrgb2101010-pwrite-ytiled:
    - shard-kbl:          [DMESG-WARN][79] ([i915#93] / [i915#95]) -> [PASS][80] +55 similar issues
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-kbl3/igt@kms_draw_crc@draw-method-xrgb2101010-pwrite-ytiled.html
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-kbl7/igt@kms_draw_crc@draw-method-xrgb2101010-pwrite-ytiled.html

  * igt@kms_draw_crc@fill-fb:
    - shard-apl:          [DMESG-FAIL][81] ([i915#95]) -> [PASS][82] +1 similar issue
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-apl1/igt@kms_draw_crc@fill-fb.html
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-apl2/igt@kms_draw_crc@fill-fb.html

  * igt@kms_fbcon_fbt@fbc-suspend:
    - shard-apl:          [FAIL][83] ([i915#1525]) -> [PASS][84] +1 similar issue
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-apl2/igt@kms_fbcon_fbt@fbc-suspend.html
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-apl7/igt@kms_fbcon_fbt@fbc-suspend.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-blt:
    - shard-tglb:         [DMESG-WARN][85] ([i915#1982]) -> [PASS][86]
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-tglb1/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-blt.html
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-tglb2/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-render:
    - shard-tglb:         [DMESG-WARN][87] ([i915#1982] / [i915#402]) -> [PASS][88]
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-tglb8/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-render.html
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-tglb3/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-render.html

  * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a:
    - shard-kbl:          [DMESG-FAIL][89] ([i915#95]) -> [PASS][90] +3 similar issues
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-kbl4/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-kbl3/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html

  * igt@kms_plane@plane-panning-bottom-right-suspend-pipe-c-planes:
    - shard-kbl:          [DMESG-WARN][91] ([i915#180]) -> [PASS][92] +1 similar issue
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-kbl1/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-c-planes.html
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-kbl3/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-c-planes.html

  * igt@kms_psr@psr2_dpms:
    - shard-iclb:         [SKIP][93] ([fdo#109441]) -> [PASS][94]
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-iclb5/igt@kms_psr@psr2_dpms.html
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-iclb2/igt@kms_psr@psr2_dpms.html

  * igt@kms_vblank@pipe-b-wait-busy-hang:
    - shard-apl:          [DMESG-WARN][95] ([i915#1982]) -> [PASS][96]
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-apl3/igt@kms_vblank@pipe-b-wait-busy-hang.html
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-apl7/igt@kms_vblank@pipe-b-wait-busy-hang.html

  * igt@perf@invalid-open-flags:
    - shard-tglb:         [SKIP][97] ([i915#405]) -> [PASS][98]
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-tglb6/igt@perf@invalid-open-flags.html
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-tglb2/igt@perf@invalid-open-flags.html
    - shard-apl:          [SKIP][99] ([fdo#109271]) -> [PASS][100]
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-apl4/igt@perf@invalid-open-flags.html
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-apl4/igt@perf@invalid-open-flags.html
    - shard-iclb:         [SKIP][101] ([i915#405]) -> [PASS][102]
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-iclb7/igt@perf@invalid-open-flags.html
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-iclb6/igt@perf@invalid-open-flags.html
    - shard-glk:          [SKIP][103] ([fdo#109271]) -> [PASS][104]
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-glk8/igt@perf@invalid-open-flags.html
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-glk9/igt@perf@invalid-open-flags.html
    - shard-kbl:          [SKIP][105] ([fdo#109271]) -> [PASS][106]
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-kbl2/igt@perf@invalid-open-flags.html
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-kbl2/igt@perf@invalid-open-flags.html

  
#### Warnings ####

  * igt@gem_exec_reloc@basic-concurrent16:
    - shard-snb:          [TIMEOUT][107] ([i915#1958]) -> [FAIL][108] ([i915#1930])
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-snb4/igt@gem_exec_reloc@basic-concurrent16.html
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-snb6/igt@gem_exec_reloc@basic-concurrent16.html

  * igt@gen7_exec_parse@chained-batch:
    - shard-snb:          [TIMEOUT][109] ([i915#1958]) -> [SKIP][110] ([fdo#109271]) +2 similar issues
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-snb4/igt@gen7_exec_parse@chained-batch.html
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-snb2/igt@gen7_exec_parse@chained-batch.html

  * igt@i915_pm_dc@dc6-psr:
    - shard-hsw:          [TIMEOUT][111] ([i915#1958]) -> [SKIP][112] ([fdo#109271])
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-hsw7/igt@i915_pm_dc@dc6-psr.html
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-hsw4/igt@i915_pm_dc@dc6-psr.html

  * igt@kms_color_chamelium@pipe-b-ctm-max:
    - shard-snb:          [TIMEOUT][113] ([i915#1958]) -> [SKIP][114] ([fdo#109271] / [fdo#111827])
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-snb4/igt@kms_color_chamelium@pipe-b-ctm-max.html
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-snb2/igt@kms_color_chamelium@pipe-b-ctm-max.html
    - shard-hsw:          [TIMEOUT][115] ([i915#1958]) -> [SKIP][116] ([fdo#109271] / [fdo#111827])
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-hsw7/igt@kms_color_chamelium@pipe-b-ctm-max.html
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-hsw1/igt@kms_color_chamelium@pipe-b-ctm-max.html

  * igt@kms_content_protection@lic:
    - shard-kbl:          [TIMEOUT][117] ([i915#1319]) -> [TIMEOUT][118] ([i915#1319] / [i915#1958])
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-kbl1/igt@kms_content_protection@lic.html
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-kbl2/igt@kms_content_protection@lic.html

  * igt@kms_frontbuffer_tracking@fbc-suspend:
    - shard-kbl:          [DMESG-WARN][119] ([i915#93] / [i915#95]) -> [INCOMPLETE][120] ([i915#155])
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-kbl3/igt@kms_frontbuffer_tracking@fbc-suspend.html
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-kbl2/igt@kms_frontbuffer_tracking@fbc-suspend.html

  * igt@kms_plane_alpha_blend@pipe-a-constant-alpha-max:
    - shard-apl:          [FAIL][121] ([fdo#108145] / [i915#265]) -> [DMESG-FAIL][122] ([fdo#108145] / [i915#95])
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-apl7/igt@kms_plane_alpha_blend@pipe-a-constant-alpha-max.html
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-apl2/igt@kms_plane_alpha_blend@pipe-a-constant-alpha-max.html

  * igt@kms_plane_alpha_blend@pipe-b-alpha-basic:
    - shard-kbl:          [FAIL][123] ([fdo#108145] / [i915#265]) -> [DMESG-FAIL][124] ([fdo#108145] / [i915#95]) +1 similar issue
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-kbl1/igt@kms_plane_alpha_blend@pipe-b-alpha-basic.html
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-kbl2/igt@kms_plane_alpha_blend@pipe-b-alpha-basic.html

  * igt@kms_plane_alpha_blend@pipe-b-alpha-transparent-fb:
    - shard-apl:          [DMESG-FAIL][125] ([i915#95]) -> [FAIL][126] ([i915#265])
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-apl3/igt@kms_plane_alpha_blend@pipe-b-alpha-transparent-fb.html
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-apl6/igt@kms_plane_alpha_blend@pipe-b-alpha-transparent-fb.html

  * igt@kms_plane_scaling@pipe-c-scaler-with-pixel-format:
    - shard-hsw:          [SKIP][127] ([fdo#109271]) -> [TIMEOUT][128] ([i915#1958]) +1 similar issue
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_8634/shard-hsw6/igt@kms_plane_scaling@pipe-c-scaler-with-pixel-format.html
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/shard-hsw8/igt@kms_plane_scaling@pipe-c-scaler-with-pixel-format.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [fdo#111719]: https://bugs.freedesktop.org/show_bug.cgi?id=111719
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [i915#118]: https://gitlab.freedesktop.org/drm/intel/issues/118
  [i915#1319]: https://gitlab.freedesktop.org/drm/intel/issues/1319
  [i915#1525]: https://gitlab.freedesktop.org/drm/intel/issues/1525
  [i915#155]: https://gitlab.freedesktop.org/drm/intel/issues/155
  [i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180
  [i915#1820]: https://gitlab.freedesktop.org/drm/intel/issues/1820
  [i915#1930]: https://gitlab.freedesktop.org/drm/intel/issues/1930
  [i915#1958]: https://gitlab.freedesktop.org/drm/intel/issues/1958
  [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
  [i915#2036]: https://gitlab.freedesktop.org/drm/intel/issues/2036
  [i915#265]: https://gitlab.freedesktop.org/drm/intel/issues/265
  [i915#31]: https://gitlab.freedesktop.org/drm/intel/issues/31
  [i915#357]: https://gitlab.freedesktop.org/drm/intel/issues/357
  [i915#402]: https://gitlab.freedesktop.org/drm/intel/issues/402
  [i915#405]: https://gitlab.freedesktop.org/drm/intel/issues/405
  [i915#433]: https://gitlab.freedesktop.org/drm/intel/issues/433
  [i915#54]: https://gitlab.freedesktop.org/drm/intel/issues/54
  [i915#72]: https://gitlab.freedesktop.org/drm/intel/issues/72
  [i915#82]: https://gitlab.freedesktop.org/drm/intel/issues/82
  [i915#93]: https://gitlab.freedesktop.org/drm/intel/issues/93
  [i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95


Participating hosts (11 -> 8)
------------------------------

  Missing    (3): pig-skl-6260u pig-glk-j5005 pig-icl-1065g7 


Build changes
-------------

  * CI: CI-20190529 -> None
  * IGT: IGT_5711 -> IGTPW_4676
  * Piglit: piglit_4509 -> None

  CI-20190529: 20190529
  CI_DRM_8634: 72c556b3627adef8cef3b7a47c32987b96e7f1c2 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_4676: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/index.html
  IGT_5711: 90611a0c90afa4a46496c78a4faf9638a1538ac3 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4676/index.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [igt-dev] [Patch][i-g-t 2/2] tests/kms_content_protection: Use library functions for handling uevents
  2020-06-16 14:03   ` Ramalingam C
  2020-06-16 14:10     ` Arkadiusz Hiler
@ 2020-06-17  4:18     ` Anshuman Gupta
  2020-06-17  6:24       ` Nautiyal, Ankit K
  1 sibling, 1 reply; 12+ messages in thread
From: Anshuman Gupta @ 2020-06-17  4:18 UTC (permalink / raw)
  To: Ramalingam C; +Cc: igt-dev

On 2020-06-16 at 19:33:04 +0530, Ramalingam C wrote:
> On 2020-06-16 at 16:28:12 +0530, Ankit Nautiyal wrote:
> > Currently, the test has its own version of uevent handling used
> > for detecting hdcp events. This patch modifies the test to use
> > the igt_kms lib support for handling the uevent monitor and detect
> > hdcp events.
> > 
> > Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> > ---
> >  tests/kms_content_protection.c | 145 ++-------------------------------
> >  1 file changed, 6 insertions(+), 139 deletions(-)
> > 
> > diff --git a/tests/kms_content_protection.c b/tests/kms_content_protection.c
> > index 3b9cedcb..475a5089 100644
> > --- a/tests/kms_content_protection.c
> > +++ b/tests/kms_content_protection.c
> > @@ -39,6 +39,7 @@ struct data {
> >  	igt_display_t display;
> >  	struct igt_fb red, green;
> >  	unsigned int cp_tests;
> > +	struct udev_monitor *uevent_monitor;
> >  } data;
> >  
> >  /* Test flags */
> > @@ -112,143 +113,6 @@ static int wait_flip_event(void)
> >  	return rc;
> >  }
> >  
> > -static bool hdcp_event(struct udev_monitor *uevent_monitor,
> > -		       struct udev *udev, uint32_t conn_id, uint32_t prop_id)
> > -{
> > -	struct udev_device *dev;
> > -	dev_t udev_devnum;
> > -	struct stat s;
> > -	const char *hotplug, *connector, *property;
> > -	bool ret = false;
> > -
> > -	dev = udev_monitor_receive_device(uevent_monitor);
> > -	if (!dev)
> > -		goto out;
> > -
> > -	udev_devnum = udev_device_get_devnum(dev);
> > -	fstat(data.display.drm_fd, &s);
> > -
> > -	hotplug = udev_device_get_property_value(dev, "HOTPLUG");
> > -	if (!(memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
> > -	    hotplug && atoi(hotplug) == 1)) {
> > -		igt_debug("Not a Hotplug event\n");
> > -		goto out_dev;
> > -	}
> > -
> > -	connector = udev_device_get_property_value(dev, "CONNECTOR");
> > -	if (!(memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
> > -	    connector && atoi(connector) == conn_id)) {
> > -		igt_debug("Not for connector id: %u\n", conn_id);
> > -		goto out_dev;
> > -	}
> > -
> > -	property = udev_device_get_property_value(dev, "PROPERTY");
> > -	if (!(memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
> > -	    property && atoi(property) == prop_id)) {
> > -		igt_debug("Not for property id: %u\n", prop_id);
> > -		goto out_dev;
> > -	}
> > -	ret = true;
> > -
> > -out_dev:
> > -	udev_device_unref(dev);
> > -out:
> > -	return ret;
> > -}
> > -
> > -static void hdcp_udev_fini(struct udev_monitor *uevent_monitor,
> > -			   struct udev *udev)
> > -{
> > -	if (uevent_monitor)
> > -		udev_monitor_unref(uevent_monitor);
> > -	if (udev)
> > -		udev_unref(udev);
> > -}
> > -
> > -static int hdcp_udev_init(struct udev_monitor **uevent_monitor,
> > -			  struct udev **udev, int *udev_fd)
> > -{
> > -	int ret = -EINVAL;
> > -
> > -	*udev = udev_new();
> > -	if (!*udev) {
> > -		igt_info("failed to create udev object\n");
> > -		goto out;
> > -	}
> > -
> > -	*uevent_monitor = udev_monitor_new_from_netlink(*udev, "udev");
> > -	if (!*uevent_monitor) {
> > -		igt_info("failed to create udev event monitor\n");
> > -		goto out;
> > -	}
> > -
> > -	ret = udev_monitor_filter_add_match_subsystem_devtype(*uevent_monitor,
> > -							      "drm",
> > -							      "drm_minor");
> > -	if (ret < 0) {
> > -		igt_info("failed to filter for drm events\n");
> > -		goto out;
> > -	}
> > -
> > -	ret = udev_monitor_enable_receiving(*uevent_monitor);
> > -	if (ret < 0) {
> > -		igt_info("failed to enable udev event reception\n");
> > -		goto out;
> > -	}
> > -
> > -	*udev_fd = udev_monitor_get_fd(*uevent_monitor);
> > -	if (*udev_fd < 0) {
> > -		igt_info("failed to get udev_fd on uevent monitor\n");
> > -		ret = *udev_fd;
> > -		goto out;
> > -	}
> > -
> > -	return ret;
> > -
> > -out:
> > -	hdcp_udev_fini(*uevent_monitor, *udev);
> > -	return ret;
> > -}
> > -
> > -#define MAX_EVENTS	10
> > -static bool wait_for_hdcp_event(uint32_t conn_id, uint32_t prop_id,
> > -				uint32_t timeout_mSec)
> > -{
> > -
> > -	struct udev_monitor *uevent_monitor = NULL;
> > -	struct udev *udev = NULL;
> > -	int udev_fd, epoll_fd;
> > -	struct epoll_event event, events[MAX_EVENTS];
> > -	bool ret = false;
> > -
> > -	if (hdcp_udev_init(&uevent_monitor, &udev, &udev_fd) < 0)
> > -		return false;
> > -
> > -	epoll_fd = epoll_create1(0);
> > -	if (epoll_fd == -1) {
> > -		igt_info("Failed to create epoll fd. %d\n", epoll_fd);
> > -		goto out_ep_create;
> > -	}
> > -
> > -	event.events = EPOLLIN | EPOLLERR;
> > -	event.data.fd = 0;
> > -
> > -	if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, udev_fd, &event)) {
> > -		igt_info("failed to fd into epoll\n");
> > -		goto out_ep_ctl;
> > -	}
> > -
> > -	if (epoll_wait(epoll_fd, events, MAX_EVENTS, timeout_mSec))
> > -		ret = hdcp_event(uevent_monitor, udev, conn_id, prop_id);
> > -
> > -out_ep_ctl:
> > -	if (close(epoll_fd))
> > -		igt_info("failed to close the epoll fd\n");
> > -out_ep_create:
> > -	hdcp_udev_fini(uevent_monitor, udev);
> > -	return ret;
> > -}
> > -
> >  static bool
> >  wait_for_prop_value(igt_output_t *output, uint64_t expected,
> >  		    uint32_t timeout_mSec)
> > @@ -257,9 +121,9 @@ wait_for_prop_value(igt_output_t *output, uint64_t expected,
> >  	int i;
> >  
> >  	if (data.cp_tests & CP_UEVENT && expected != CP_UNDESIRED) {
> > -		igt_assert_f(wait_for_hdcp_event(output->id,
> > +		igt_assert_f(igt_conn_event_detected(data.uevent_monitor, output->id,
> >  			     output->props[IGT_CONNECTOR_CONTENT_PROTECTION],
> > -			     timeout_mSec), "uevent is not received");
> > +			     timeout_mSec / 1000), "uevent is not received");
> >  
> >  		val = igt_output_get_prop(output,
> >  					  IGT_CONNECTOR_CONTENT_PROTECTION);
> > @@ -702,7 +566,10 @@ igt_main
> >  	igt_subtest("uevent") {
> >  		igt_require(data.display.is_atomic);
> >  		data.cp_tests = CP_UEVENT;
> > +		data.uevent_monitor = igt_watch_hotplug();
> Ankit, this is really good.
> 
> Any benefit with sporadic hdcp event missing issue?
yes there is absolute benifit wait_for_hdcp_event() every times
prepare a necessary infrasture before triggering epoll_wait().
Sometimes due to scheduling delays connector HOTPLUG events get disposed 
even before a call to epoll_wait() here.
Many thanks to Arek here for debugging inputs by "udev monitor".
> 
> I would prefer to create generic implementations like igt_watch_udev.
> Similarly for igt_flush_hotplugs and igt_cleanup_hotplug.
There are two calls from kerenl for HOTPLUG uevent.
drm_sysfs_hotplug_event -> for HOTPLUG events only with HOTPLUG=1 string
drm_sysfs_connector_status_event-> for HOTPLUG events with additional
connector id and prop id string. so i belive in line to that there 
is no need to change existing API name change.
Probably igt_conn_event_detected can be changed to 
igt_connector_hotplug_detected or igt_connector_event_detected for more
readability.
Thanks,
Anshuman Gupta.
> 
> -Ram.
> > +		igt_flush_hotplugs(data.uevent_monitor);
> >  		test_content_protection(COMMIT_ATOMIC, HDCP_CONTENT_TYPE_0);
> > +		igt_cleanup_hotplug(data.uevent_monitor);
> >  	}
> >  
> >  	/*
> > -- 
> > 2.17.1
> > 
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [igt-dev] [Patch][i-g-t 1/2] lib/igt_kms: Add support for detecting connector events
  2020-06-16 14:12   ` Ramalingam C
@ 2020-06-17  6:23     ` Nautiyal, Ankit K
  0 siblings, 0 replies; 12+ messages in thread
From: Nautiyal, Ankit K @ 2020-06-17  6:23 UTC (permalink / raw)
  To: Ramalingam C; +Cc: igt-dev

Hi Ram,

Thanks for the review comments. Please find my response inline:

On 6/16/2020 7:42 PM, Ramalingam C wrote:
> On 2020-06-16 at 16:28:11 +0530, Ankit Nautiyal wrote:
>> Currently, the event_detect function checks the property val for
>> "HOTPLUG" and "LEASE" both of which are set to '1' when these events
>> are sent.
>>
>> This cannot be used for detecting connector events such as HDCP event
>> as connector events are sent along with property to signify which
>> property of which connector has changed. Connector ID and property id
>> are provided along with "CONNECTOR" and "PROPERTY" as udev
>> property-value pairs. Eg. for HDCP, the connector id of the connector
>> whose hdcp status changed, and the property id of the
>> ‘CONTENT_PROTECTION’ property are sent with uevent.
>>
>> This patch modifies the event_detect function to check multiple
>> properties with different expected values. It also adds support to
>> detect connector event for a given pair of connector and property ids.
>>
>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>> ---
>>   lib/igt_kms.c | 61 ++++++++++++++++++++++++++++++++++++++-------------
>>   lib/igt_kms.h |  2 ++
>>   2 files changed, 48 insertions(+), 15 deletions(-)
>>
>> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
>> index 54de45e5..7177231e 100644
>> --- a/lib/igt_kms.c
>> +++ b/lib/igt_kms.c
>> @@ -4164,32 +4164,57 @@ struct udev_monitor *igt_watch_hotplug(void)
>>   }
>>   
>>   static bool event_detected(struct udev_monitor *mon, int timeout_secs,
>> -			   const char *property)
>> +			   const char **property, int *expected_val, int num_props)
>>   {
>>   	struct udev_device *dev;
>> -	const char *hotplug_val;
>> +	const char *prop_val_str;
>>   	struct pollfd fd = {
>>   		.fd = udev_monitor_get_fd(mon),
>>   		.events = POLLIN
>>   	};
>> -	bool hotplug_received = false;
>> +	bool event_received = false;
>> +	int i;
>>   
>> -	/* Go through all of the events pending on the udev monitor. Once we
>> -	 * receive a hotplug, we continue going through the rest of the events
>> -	 * so that redundant hotplug events don't change the results of future
>> -	 * checks
>> +	/* Go through all of the events pending on the udev monitor.
>> +	 * Match the given set of properties and their values to
>> +	 * the expected values.
>>   	 */
>> -	while (!hotplug_received && poll(&fd, 1, timeout_secs * 1000)) {
>> +	while (!event_received && poll(&fd, 1, timeout_secs * 1000)) {
>>   		dev = udev_monitor_receive_device(mon);
>> -
>> -		hotplug_val = udev_device_get_property_value(dev, property);
>> -		if (hotplug_val && atoi(hotplug_val) == 1)
>> -			hotplug_received = true;
>> +		for (i = 0; i < num_props; i++) {
>> +			event_received = true;
> Not needed.
>> +			prop_val_str = udev_device_get_property_value(dev, property[i]);
>> +			if (!prop_val_str || atoi(prop_val_str) != expected_val[i]) {
>> +				event_received = false;
> Not needed.
>> +				break;
>> +			}
>> +		}
> 		if (i == num_props)
> 			event_received = true;

Agreed, this is much elegant. Will use this in the next version.

>>   
>>   		udev_device_unref(dev);
>>   	}
>>   
>> -	return hotplug_received;
>> +	return event_received;
>> +}
>> +
>> +/**
>> + * igt_conn_event_detected:
>> + * @mon: A udev monitor initialized with #igt_watch_hotplug
>> + * @conn_id: Connector id of the Connector for which the property change is
>> + * expected.
>> + * @prop_id: Property id for which the change is expected.
>> + * @timeout_secs: How long to wait for a connector event to occur.
>> + *
>> + * Assert that a connector event is received for a given connector and property.
>> + *
>> + * Returns: true if the connector event was received, false if we timed out
>> + */
>> +bool igt_conn_event_detected(struct udev_monitor *mon, uint32_t conn_id,
>> +			     uint32_t prop_id, int timeout_secs)
>> +{
>> +	const char *props[2] = {"CONNECTOR", "PROPERTY"};
>> +	int expected_val[2] = {conn_id, prop_id};
>> +
>> +	return event_detected(mon, timeout_secs, props, expected_val, 2);
>>   }
>>   
>>   /**
>> @@ -4203,7 +4228,10 @@ static bool event_detected(struct udev_monitor *mon, int timeout_secs,
>>    */
>>   bool igt_hotplug_detected(struct udev_monitor *mon, int timeout_secs)
>>   {
>> -	return event_detected(mon, timeout_secs, "HOTPLUG");
>> +	const char *props[1] = {"HOTPLUG"};
>> +	int expected_val = 1;
>> +
>> +	return event_detected(mon, timeout_secs, props, &expected_val, 1);
>>   }
>>   
>>   /**
>> @@ -4217,7 +4245,10 @@ bool igt_hotplug_detected(struct udev_monitor *mon, int timeout_secs)
>>    */
>>   bool igt_lease_change_detected(struct udev_monitor *mon, int timeout_secs)
>>   {
>> -	return event_detected(mon, timeout_secs, "LEASE");
>> +	const char *props[1] = {"LEASE"};
>> +	int expected_val = 1;
>> +
>> +	return event_detected(mon, timeout_secs, props, &expected_val, 1);
>>   }
>>   
>>   /**
>> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
>> index cd3fdbc0..27f1f729 100644
>> --- a/lib/igt_kms.h
>> +++ b/lib/igt_kms.h
>> @@ -777,6 +777,8 @@ bool igt_hotplug_detected(struct udev_monitor *mon,
>>   			  int timeout_secs);
>>   bool igt_lease_change_detected(struct udev_monitor *mon,
>>   			       int timeout_secs);
>> +bool igt_conn_event_detected(struct udev_monitor *mon, uint32_t conn_id,
>> +			     uint32_t prop_id, int timeout_msecs);
>>   void igt_flush_hotplugs(struct udev_monitor *mon);
> We need to have generich flush too like igt_(watch/flush/cleanup)_udev_event()

I am open to generic names, more about this discussed in the next patch 2/2.

Regards,
Ankit

> -Ram
>>   void igt_cleanup_hotplug(struct udev_monitor *mon);
>>   
>> -- 
>> 2.17.1
>>

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [igt-dev] [Patch][i-g-t 2/2] tests/kms_content_protection: Use library functions for handling uevents
  2020-06-17  4:18     ` Anshuman Gupta
@ 2020-06-17  6:24       ` Nautiyal, Ankit K
  0 siblings, 0 replies; 12+ messages in thread
From: Nautiyal, Ankit K @ 2020-06-17  6:24 UTC (permalink / raw)
  To: Anshuman Gupta, Ramalingam C, arkadiusz.hiler; +Cc: igt-dev

Hi Ram, Arek, and Anshuman,

Thanks for your comments and suggestions.

As we are discussing about the naming of the APIs, I have taken liberty 
to reply in a single mail.

Please find my responses inline:


On 6/17/2020 9:48 AM, Anshuman Gupta wrote:
> On 2020-06-16 at 19:33:04 +0530, Ramalingam C wrote:
>> On 2020-06-16 at 16:28:12 +0530, Ankit Nautiyal wrote:
>>> Currently, the test has its own version of uevent handling used
>>> for detecting hdcp events. This patch modifies the test to use
>>> the igt_kms lib support for handling the uevent monitor and detect
>>> hdcp events.
>>>
>>> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>>> ---
>>>   tests/kms_content_protection.c | 145 ++-------------------------------
>>>   1 file changed, 6 insertions(+), 139 deletions(-)
>>>
>>> diff --git a/tests/kms_content_protection.c b/tests/kms_content_protection.c
>>> index 3b9cedcb..475a5089 100644
>>> --- a/tests/kms_content_protection.c
>>> +++ b/tests/kms_content_protection.c
>>> @@ -39,6 +39,7 @@ struct data {
>>>   	igt_display_t display;
>>>   	struct igt_fb red, green;
>>>   	unsigned int cp_tests;
>>> +	struct udev_monitor *uevent_monitor;
>>>   } data;
>>>   
>>>   /* Test flags */
>>> @@ -112,143 +113,6 @@ static int wait_flip_event(void)
>>>   	return rc;
>>>   }
>>>   
>>> -static bool hdcp_event(struct udev_monitor *uevent_monitor,
>>> -		       struct udev *udev, uint32_t conn_id, uint32_t prop_id)
>>> -{
>>> -	struct udev_device *dev;
>>> -	dev_t udev_devnum;
>>> -	struct stat s;
>>> -	const char *hotplug, *connector, *property;
>>> -	bool ret = false;
>>> -
>>> -	dev = udev_monitor_receive_device(uevent_monitor);
>>> -	if (!dev)
>>> -		goto out;
>>> -
>>> -	udev_devnum = udev_device_get_devnum(dev);
>>> -	fstat(data.display.drm_fd, &s);
>>> -
>>> -	hotplug = udev_device_get_property_value(dev, "HOTPLUG");
>>> -	if (!(memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
>>> -	    hotplug && atoi(hotplug) == 1)) {
>>> -		igt_debug("Not a Hotplug event\n");
>>> -		goto out_dev;
>>> -	}
>>> -
>>> -	connector = udev_device_get_property_value(dev, "CONNECTOR");
>>> -	if (!(memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
>>> -	    connector && atoi(connector) == conn_id)) {
>>> -		igt_debug("Not for connector id: %u\n", conn_id);
>>> -		goto out_dev;
>>> -	}
>>> -
>>> -	property = udev_device_get_property_value(dev, "PROPERTY");
>>> -	if (!(memcmp(&s.st_rdev, &udev_devnum, sizeof(dev_t)) == 0 &&
>>> -	    property && atoi(property) == prop_id)) {
>>> -		igt_debug("Not for property id: %u\n", prop_id);
>>> -		goto out_dev;
>>> -	}
>>> -	ret = true;
>>> -
>>> -out_dev:
>>> -	udev_device_unref(dev);
>>> -out:
>>> -	return ret;
>>> -}
>>> -
>>> -static void hdcp_udev_fini(struct udev_monitor *uevent_monitor,
>>> -			   struct udev *udev)
>>> -{
>>> -	if (uevent_monitor)
>>> -		udev_monitor_unref(uevent_monitor);
>>> -	if (udev)
>>> -		udev_unref(udev);
>>> -}
>>> -
>>> -static int hdcp_udev_init(struct udev_monitor **uevent_monitor,
>>> -			  struct udev **udev, int *udev_fd)
>>> -{
>>> -	int ret = -EINVAL;
>>> -
>>> -	*udev = udev_new();
>>> -	if (!*udev) {
>>> -		igt_info("failed to create udev object\n");
>>> -		goto out;
>>> -	}
>>> -
>>> -	*uevent_monitor = udev_monitor_new_from_netlink(*udev, "udev");
>>> -	if (!*uevent_monitor) {
>>> -		igt_info("failed to create udev event monitor\n");
>>> -		goto out;
>>> -	}
>>> -
>>> -	ret = udev_monitor_filter_add_match_subsystem_devtype(*uevent_monitor,
>>> -							      "drm",
>>> -							      "drm_minor");
>>> -	if (ret < 0) {
>>> -		igt_info("failed to filter for drm events\n");
>>> -		goto out;
>>> -	}
>>> -
>>> -	ret = udev_monitor_enable_receiving(*uevent_monitor);
>>> -	if (ret < 0) {
>>> -		igt_info("failed to enable udev event reception\n");
>>> -		goto out;
>>> -	}
>>> -
>>> -	*udev_fd = udev_monitor_get_fd(*uevent_monitor);
>>> -	if (*udev_fd < 0) {
>>> -		igt_info("failed to get udev_fd on uevent monitor\n");
>>> -		ret = *udev_fd;
>>> -		goto out;
>>> -	}
>>> -
>>> -	return ret;
>>> -
>>> -out:
>>> -	hdcp_udev_fini(*uevent_monitor, *udev);
>>> -	return ret;
>>> -}
>>> -
>>> -#define MAX_EVENTS	10
>>> -static bool wait_for_hdcp_event(uint32_t conn_id, uint32_t prop_id,
>>> -				uint32_t timeout_mSec)
>>> -{
>>> -
>>> -	struct udev_monitor *uevent_monitor = NULL;
>>> -	struct udev *udev = NULL;
>>> -	int udev_fd, epoll_fd;
>>> -	struct epoll_event event, events[MAX_EVENTS];
>>> -	bool ret = false;
>>> -
>>> -	if (hdcp_udev_init(&uevent_monitor, &udev, &udev_fd) < 0)
>>> -		return false;
>>> -
>>> -	epoll_fd = epoll_create1(0);
>>> -	if (epoll_fd == -1) {
>>> -		igt_info("Failed to create epoll fd. %d\n", epoll_fd);
>>> -		goto out_ep_create;
>>> -	}
>>> -
>>> -	event.events = EPOLLIN | EPOLLERR;
>>> -	event.data.fd = 0;
>>> -
>>> -	if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, udev_fd, &event)) {
>>> -		igt_info("failed to fd into epoll\n");
>>> -		goto out_ep_ctl;
>>> -	}
>>> -
>>> -	if (epoll_wait(epoll_fd, events, MAX_EVENTS, timeout_mSec))
>>> -		ret = hdcp_event(uevent_monitor, udev, conn_id, prop_id);
>>> -
>>> -out_ep_ctl:
>>> -	if (close(epoll_fd))
>>> -		igt_info("failed to close the epoll fd\n");
>>> -out_ep_create:
>>> -	hdcp_udev_fini(uevent_monitor, udev);
>>> -	return ret;
>>> -}
>>> -
>>>   static bool
>>>   wait_for_prop_value(igt_output_t *output, uint64_t expected,
>>>   		    uint32_t timeout_mSec)
>>> @@ -257,9 +121,9 @@ wait_for_prop_value(igt_output_t *output, uint64_t expected,
>>>   	int i;
>>>   
>>>   	if (data.cp_tests & CP_UEVENT && expected != CP_UNDESIRED) {
>>> -		igt_assert_f(wait_for_hdcp_event(output->id,
>>> +		igt_assert_f(igt_conn_event_detected(data.uevent_monitor, output->id,
>>>   			     output->props[IGT_CONNECTOR_CONTENT_PROTECTION],
>>> -			     timeout_mSec), "uevent is not received");
>>> +			     timeout_mSec / 1000), "uevent is not received");
>>>   
>>>   		val = igt_output_get_prop(output,
>>>   					  IGT_CONNECTOR_CONTENT_PROTECTION);
>>> @@ -702,7 +566,10 @@ igt_main
>>>   	igt_subtest("uevent") {
>>>   		igt_require(data.display.is_atomic);
>>>   		data.cp_tests = CP_UEVENT;
>>> +		data.uevent_monitor = igt_watch_hotplug();
>> Ankit, this is really good.
>>
>> Any benefit with sporadic hdcp event missing issue?
> yes there is absolute benifit wait_for_hdcp_event() every times
> prepare a necessary infrasture before triggering epoll_wait().
> Sometimes due to scheduling delays connector HOTPLUG events get disposed
> even before a call to epoll_wait() here.
> Many thanks to Arek here for debugging inputs by "udev monitor".

The missing hdcp uevent issuse, seems to be quite sporadic, and I was 
not able to reproduce with/without patch.
But this certainly should help in that case, as mentioned by Anshuman.

>> I would prefer to create generic implementations like igt_watch_udev.
>> Similarly for igt_flush_hotplugs and igt_cleanup_hotplug.
> There are two calls from kerenl for HOTPLUG uevent.
> drm_sysfs_hotplug_event -> for HOTPLUG events only with HOTPLUG=1 string
> drm_sysfs_connector_status_event-> for HOTPLUG events with additional
> connector id and prop id string. so i belive in line to that there
> is no need to change existing API name change.
> Probably igt_conn_event_detected can be changed to
> igt_connector_hotplug_detected or igt_connector_event_detected for more
> readability.
> Thanks,
> Anshuman Gupta.

As mentioned by Anshuman, both the calls have HOTPLUG=1 string, so we 
can let the APIs same if we want.
But I am open for suggestions on naming here if it makes sense to have a 
generic name with future requirements in mind.

Regarding the igt_conn_event_detected() I can change the name here as 
well to igt_connector_hotplug_detected().
But I have not added checking for HOTPLUG=1 for hdcp event. Probably I 
should add that as well
along with "CONNECTOR" and "PROPERTY", in line with the current IGT, and 
also as in the weston userspace.

Thanks & Regards,
Ankit

>> -Ram.
>>> +		igt_flush_hotplugs(data.uevent_monitor);
>>>   		test_content_protection(COMMIT_ATOMIC, HDCP_CONTENT_TYPE_0);
>>> +		igt_cleanup_hotplug(data.uevent_monitor);
>>>   	}
>>>   
>>>   	/*
>>> -- 
>>> 2.17.1
>>>

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2020-06-17  6:24 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-16 10:58 [igt-dev] [Patch][i-g-t 0/2] Add support to detect HDCP events Ankit Nautiyal
2020-06-16 10:58 ` [igt-dev] [Patch][i-g-t 1/2] lib/igt_kms: Add support for detecting connector events Ankit Nautiyal
2020-06-16 14:12   ` Ramalingam C
2020-06-17  6:23     ` Nautiyal, Ankit K
2020-06-16 10:58 ` [igt-dev] [Patch][i-g-t 2/2] tests/kms_content_protection: Use library functions for handling uevents Ankit Nautiyal
2020-06-16 14:03   ` Ramalingam C
2020-06-16 14:10     ` Arkadiusz Hiler
2020-06-16 14:17       ` Ramalingam C
2020-06-17  4:18     ` Anshuman Gupta
2020-06-17  6:24       ` Nautiyal, Ankit K
2020-06-16 16:45 ` [igt-dev] ✓ Fi.CI.BAT: success for Add support to detect HDCP events Patchwork
2020-06-16 17:44 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.