return 0;
 }
 
+/**
+ * rdt_cdp_peer_get - Retrieve CDP peer if it exists
+ * @r: RDT resource to which RDT domain @d belongs
+ * @d: Cache instance for which a CDP peer is requested
+ * @r_cdp: RDT resource that shares hardware with @r (RDT resource peer)
+ *         Used to return the result.
+ * @d_cdp: RDT domain that shares hardware with @d (RDT domain peer)
+ *         Used to return the result.
+ *
+ * RDT resources are managed independently and by extension the RDT domains
+ * (RDT resource instances) are managed independently also. The Code and
+ * Data Prioritization (CDP) RDT resources, while managed independently,
+ * could refer to the same underlying hardware. For example,
+ * RDT_RESOURCE_L2CODE and RDT_RESOURCE_L2DATA both refer to the L2 cache.
+ *
+ * When provided with an RDT resource @r and an instance of that RDT
+ * resource @d rdt_cdp_peer_get() will return if there is a peer RDT
+ * resource and the exact instance that shares the same hardware.
+ *
+ * Return: 0 if a CDP peer was found, <0 on error or if no CDP peer exists.
+ *         If a CDP peer was found, @r_cdp will point to the peer RDT resource
+ *         and @d_cdp will point to the peer RDT domain.
+ */
+static int __attribute__((unused)) rdt_cdp_peer_get(struct rdt_resource *r,
+                                                   struct rdt_domain *d,
+                                                   struct rdt_resource **r_cdp,
+                                                   struct rdt_domain **d_cdp)
+{
+       struct rdt_resource *_r_cdp = NULL;
+       struct rdt_domain *_d_cdp = NULL;
+       int ret = 0;
+
+       switch (r->rid) {
+       case RDT_RESOURCE_L3DATA:
+               _r_cdp = &rdt_resources_all[RDT_RESOURCE_L3CODE];
+               break;
+       case RDT_RESOURCE_L3CODE:
+               _r_cdp =  &rdt_resources_all[RDT_RESOURCE_L3DATA];
+               break;
+       case RDT_RESOURCE_L2DATA:
+               _r_cdp =  &rdt_resources_all[RDT_RESOURCE_L2CODE];
+               break;
+       case RDT_RESOURCE_L2CODE:
+               _r_cdp =  &rdt_resources_all[RDT_RESOURCE_L2DATA];
+               break;
+       default:
+               ret = -ENOENT;
+               goto out;
+       }
+
+       /*
+        * When a new CPU comes online and CDP is enabled then the new
+        * RDT domains (if any) associated with both CDP RDT resources
+        * are added in the same CPU online routine while the
+        * rdtgroup_mutex is held. It should thus not happen for one
+        * RDT domain to exist and be associated with its RDT CDP
+        * resource but there is no RDT domain associated with the
+        * peer RDT CDP resource. Hence the WARN.
+        */
+       _d_cdp = rdt_find_domain(_r_cdp, d->id, NULL);
+       if (WARN_ON(!_d_cdp)) {
+               _r_cdp = NULL;
+               ret = -EINVAL;
+       }
+
+out:
+       *r_cdp = _r_cdp;
+       *d_cdp = _d_cdp;
+
+       return ret;
+}
+
 /**
  * rdtgroup_cbm_overlaps - Does CBM for intended closid overlap with other
  * @r: Resource to which domain instance @d belongs.