Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F111030000
D29500.id92869.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D29500.id92869.diff
View Options
diff --git a/sys/x86/xen/xen_intr.c b/sys/x86/xen/xen_intr.c
--- a/sys/x86/xen/xen_intr.c
+++ b/sys/x86/xen/xen_intr.c
@@ -168,6 +168,38 @@
static struct xenisrc *xen_intr_port_to_isrc[NR_EVENT_CHANNELS];
/*------------------------- Private Functions --------------------------------*/
+
+/**
+ * Retrieve a handle for a Xen interrupt source.
+ *
+ * \param isrc A valid Xen interrupt source structure.
+ *
+ * \returns A handle suitable for use with xen_intr_isrc_from_handle()
+ * to retrieve the original Xen interrupt source structure.
+ */
+
+static inline xen_intr_handle_t
+xen_intr_handle_from_isrc(struct xenisrc *isrc)
+{
+ return (isrc);
+}
+
+/**
+ * Lookup a Xen interrupt source object given an interrupt binding handle.
+ *
+ * \param handle A handle initialized by a previous call to
+ * xen_intr_bind_isrc().
+ *
+ * \returns A pointer to the Xen interrupt source object associated
+ * with the given interrupt handle. NULL if no association
+ * currently exists.
+ */
+static inline struct xenisrc *
+xen_intr_isrc_from_handle(xen_intr_handle_t handle)
+{
+ return ((struct xenisrc *)handle);
+}
+
/**
* Disable signal delivery for an event channel port on the
* specified CPU.
@@ -393,8 +425,8 @@
refcount_init(&isrc->xi_refcount, 1);
mtx_unlock(&xen_intr_isrc_lock);
- /* Assign the opaque handler (the event channel port) */
- *port_handlep = &isrc->xi_vector;
+ /* Assign the opaque handler */
+ *port_handlep = xen_intr_handle_from_isrc(isrc);
#ifdef SMP
if (type == EVTCHN_TYPE_PORT) {
@@ -427,32 +459,6 @@
return (0);
}
-/**
- * Lookup a Xen interrupt source object given an interrupt binding handle.
- *
- * \param handle A handle initialized by a previous call to
- * xen_intr_bind_isrc().
- *
- * \returns A pointer to the Xen interrupt source object associated
- * with the given interrupt handle. NULL if no association
- * currently exists.
- */
-static struct xenisrc *
-xen_intr_isrc(xen_intr_handle_t handle)
-{
- int vector;
-
- if (handle == NULL)
- return (NULL);
-
- vector = *(int *)handle;
- KASSERT(vector >= first_evtchn_irq &&
- vector < (first_evtchn_irq + xen_intr_auto_vector_count),
- ("Xen interrupt vector is out of range"));
-
- return ((struct xenisrc *)intr_lookup_source(vector));
-}
-
/**
* Determine the event channel ports at the given section of the
* event port bitmap which have pending events for the given cpu.
@@ -1195,7 +1201,7 @@
struct xenisrc *isrc;
va_list ap;
- isrc = xen_intr_isrc(port_handle);
+ isrc = xen_intr_isrc_from_handle(port_handle);
if (isrc == NULL)
return (EINVAL);
@@ -1213,7 +1219,7 @@
KASSERT(port_handlep != NULL,
("NULL xen_intr_handle_t passed to xen_intr_unbind"));
- isrc = xen_intr_isrc(*port_handlep);
+ isrc = xen_intr_isrc_from_handle(*port_handlep);
*port_handlep = NULL;
if (isrc == NULL)
return;
@@ -1235,7 +1241,7 @@
{
struct xenisrc *isrc;
- isrc = xen_intr_isrc(handle);
+ isrc = xen_intr_isrc_from_handle(handle);
if (isrc != NULL) {
KASSERT(isrc->xi_type == EVTCHN_TYPE_PORT ||
isrc->xi_type == EVTCHN_TYPE_IPI,
@@ -1250,7 +1256,7 @@
{
struct xenisrc *isrc;
- isrc = xen_intr_isrc(handle);
+ isrc = xen_intr_isrc_from_handle(handle);
if (isrc == NULL)
return (0);
@@ -1265,7 +1271,7 @@
struct xenisrc *isrc;
int error;
- isrc = xen_intr_isrc(handle);
+ isrc = xen_intr_isrc_from_handle(handle);
if (isrc == NULL || isrc->xi_cookie != NULL)
return (EINVAL);
@@ -1299,8 +1305,8 @@
refcount_acquire(&xen_intr_port_to_isrc[port]->xi_refcount);
mtx_unlock(&xen_intr_isrc_lock);
- /* Assign the opaque handler (the event channel port) */
- *handlep = &xen_intr_port_to_isrc[port]->xi_vector;
+ /* Assign the opaque handler */
+ *handlep = xen_intr_handle_from_isrc(xen_intr_port_to_isrc[port]);
return (0);
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Feb 27, 10:50 AM (18 h, 26 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16867257
Default Alt Text
D29500.id92869.diff (3 KB)
Attached To
Mode
D29500: xen/intr: use struct xenisrc * as xen_intr_handle_t
Attached
Detach File
Event Timeline
Log In to Comment