Commit 677f8c0d authored by Stephen Rothwell's avatar Stephen Rothwell Committed by Paul Mackerras

[PATCH] powerpc: remove bitfields from HvLpEvent

Signed-off-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 6814350b
...@@ -147,20 +147,11 @@ static void int_received(struct pci_event *event, struct pt_regs *regs) ...@@ -147,20 +147,11 @@ static void int_received(struct pci_event *event, struct pt_regs *regs)
static void pci_event_handler(struct HvLpEvent *event, struct pt_regs *regs) static void pci_event_handler(struct HvLpEvent *event, struct pt_regs *regs)
{ {
if (event && (event->xType == HvLpEvent_Type_PciIo)) { if (event && (event->xType == HvLpEvent_Type_PciIo)) {
switch (event->xFlags.xFunction) { if (hvlpevent_is_int(event))
case HvLpEvent_Function_Int:
int_received((struct pci_event *)event, regs); int_received((struct pci_event *)event, regs);
break; else
case HvLpEvent_Function_Ack:
printk(KERN_ERR printk(KERN_ERR
"pci_event_handler: unexpected ack received\n"); "pci_event_handler: unexpected ack received\n");
break;
default:
printk(KERN_ERR
"pci_event_handler: unexpected event function %d\n",
(int)event->xFlags.xFunction);
break;
}
} else if (event) } else if (event)
printk(KERN_ERR printk(KERN_ERR
"pci_event_handler: Unrecognized PCI event type 0x%x\n", "pci_event_handler: Unrecognized PCI event type 0x%x\n",
......
...@@ -53,7 +53,7 @@ static struct HvLpEvent * get_next_hvlpevent(void) ...@@ -53,7 +53,7 @@ static struct HvLpEvent * get_next_hvlpevent(void)
struct HvLpEvent * event; struct HvLpEvent * event;
event = (struct HvLpEvent *)hvlpevent_queue.xSlicCurEventPtr; event = (struct HvLpEvent *)hvlpevent_queue.xSlicCurEventPtr;
if (event->xFlags.xValid) { if (hvlpevent_is_valid(event)) {
/* rmb() needed only for weakly consistent machines (regatta) */ /* rmb() needed only for weakly consistent machines (regatta) */
rmb(); rmb();
/* Set pointer to next potential event */ /* Set pointer to next potential event */
...@@ -84,7 +84,7 @@ int hvlpevent_is_pending(void) ...@@ -84,7 +84,7 @@ int hvlpevent_is_pending(void)
next_event = (struct HvLpEvent *)hvlpevent_queue.xSlicCurEventPtr; next_event = (struct HvLpEvent *)hvlpevent_queue.xSlicCurEventPtr;
return next_event->xFlags.xValid | return hvlpevent_is_valid(next_event) ||
hvlpevent_queue.xPlicOverflowIntPending; hvlpevent_queue.xPlicOverflowIntPending;
} }
...@@ -101,18 +101,18 @@ static void hvlpevent_clear_valid(struct HvLpEvent * event) ...@@ -101,18 +101,18 @@ static void hvlpevent_clear_valid(struct HvLpEvent * event)
switch (extra) { switch (extra) {
case 3: case 3:
tmp = (struct HvLpEvent*)((char*)event + 3 * LpEventAlign); tmp = (struct HvLpEvent*)((char*)event + 3 * LpEventAlign);
tmp->xFlags.xValid = 0; hvlpevent_invalidate(tmp);
case 2: case 2:
tmp = (struct HvLpEvent*)((char*)event + 2 * LpEventAlign); tmp = (struct HvLpEvent*)((char*)event + 2 * LpEventAlign);
tmp->xFlags.xValid = 0; hvlpevent_invalidate(tmp);
case 1: case 1:
tmp = (struct HvLpEvent*)((char*)event + 1 * LpEventAlign); tmp = (struct HvLpEvent*)((char*)event + 1 * LpEventAlign);
tmp->xFlags.xValid = 0; hvlpevent_invalidate(tmp);
} }
mb(); mb();
event->xFlags.xValid = 0; hvlpevent_invalidate(event);
} }
void process_hvlpevents(struct pt_regs *regs) void process_hvlpevents(struct pt_regs *regs)
......
...@@ -251,10 +251,7 @@ static struct pending_event *new_pending_event(void) ...@@ -251,10 +251,7 @@ static struct pending_event *new_pending_event(void)
} }
memset(ev, 0, sizeof(struct pending_event)); memset(ev, 0, sizeof(struct pending_event));
hev = &ev->event.hp_lp_event; hev = &ev->event.hp_lp_event;
hev->xFlags.xValid = 1; hev->flags = HV_LP_EVENT_VALID | HV_LP_EVENT_DO_ACK | HV_LP_EVENT_INT;
hev->xFlags.xAckType = HvLpEvent_AckType_ImmediateAck;
hev->xFlags.xAckInd = HvLpEvent_AckInd_DoAck;
hev->xFlags.xFunction = HvLpEvent_Function_Int;
hev->xType = HvLpEvent_Type_MachineFac; hev->xType = HvLpEvent_Type_MachineFac;
hev->xSourceLp = HvLpConfig_getLpIndex(); hev->xSourceLp = HvLpConfig_getLpIndex();
hev->xTargetLp = primary_lp; hev->xTargetLp = primary_lp;
...@@ -518,17 +515,10 @@ static void handle_ack(struct io_mf_lp_event *event) ...@@ -518,17 +515,10 @@ static void handle_ack(struct io_mf_lp_event *event)
static void hv_handler(struct HvLpEvent *event, struct pt_regs *regs) static void hv_handler(struct HvLpEvent *event, struct pt_regs *regs)
{ {
if ((event != NULL) && (event->xType == HvLpEvent_Type_MachineFac)) { if ((event != NULL) && (event->xType == HvLpEvent_Type_MachineFac)) {
switch(event->xFlags.xFunction) { if (hvlpevent_is_ack(event))
case HvLpEvent_Function_Ack:
handle_ack((struct io_mf_lp_event *)event); handle_ack((struct io_mf_lp_event *)event);
break; else
case HvLpEvent_Function_Int:
handle_int((struct io_mf_lp_event *)event); handle_int((struct io_mf_lp_event *)event);
break;
default:
printk(KERN_ERR "mf.c: non ack/int event received\n");
break;
}
} else } else
printk(KERN_ERR "mf.c: alien event received\n"); printk(KERN_ERR "mf.c: alien event received\n");
} }
......
...@@ -270,7 +270,7 @@ static void handleMonitorEvent(struct HvLpEvent *event) ...@@ -270,7 +270,7 @@ static void handleMonitorEvent(struct HvLpEvent *event)
* First see if this is just a normal monitor message from the * First see if this is just a normal monitor message from the
* other partition * other partition
*/ */
if (event->xFlags.xFunction == HvLpEvent_Function_Int) { if (hvlpevent_is_int(event)) {
remoteLp = event->xSourceLp; remoteLp = event->xSourceLp;
if (!viopathStatus[remoteLp].isActive) if (!viopathStatus[remoteLp].isActive)
sendMonMsg(remoteLp); sendMonMsg(remoteLp);
...@@ -331,13 +331,12 @@ static void handleConfig(struct HvLpEvent *event) ...@@ -331,13 +331,12 @@ static void handleConfig(struct HvLpEvent *event)
{ {
if (!event) if (!event)
return; return;
if (event->xFlags.xFunction == HvLpEvent_Function_Int) { if (hvlpevent_is_int(event)) {
printk(VIOPATH_KERN_WARN printk(VIOPATH_KERN_WARN
"unexpected config request from partition %d", "unexpected config request from partition %d",
event->xSourceLp); event->xSourceLp);
if ((event->xFlags.xFunction == HvLpEvent_Function_Int) && if (hvlpevent_need_ack(event)) {
(event->xFlags.xAckInd == HvLpEvent_AckInd_DoAck)) {
event->xRc = HvLpEvent_Rc_InvalidSubtype; event->xRc = HvLpEvent_Rc_InvalidSubtype;
HvCallEvent_ackLpEvent(event); HvCallEvent_ackLpEvent(event);
} }
...@@ -377,7 +376,7 @@ static void vio_handleEvent(struct HvLpEvent *event, struct pt_regs *regs) ...@@ -377,7 +376,7 @@ static void vio_handleEvent(struct HvLpEvent *event, struct pt_regs *regs)
int subtype = (event->xSubtype & VIOMAJOR_SUBTYPE_MASK) int subtype = (event->xSubtype & VIOMAJOR_SUBTYPE_MASK)
>> VIOMAJOR_SUBTYPE_SHIFT; >> VIOMAJOR_SUBTYPE_SHIFT;
if (event->xFlags.xFunction == HvLpEvent_Function_Int) { if (hvlpevent_is_int(event)) {
remoteLp = event->xSourceLp; remoteLp = event->xSourceLp;
/* /*
* The isActive is checked because if the hosting partition * The isActive is checked because if the hosting partition
...@@ -436,8 +435,7 @@ static void vio_handleEvent(struct HvLpEvent *event, struct pt_regs *regs) ...@@ -436,8 +435,7 @@ static void vio_handleEvent(struct HvLpEvent *event, struct pt_regs *regs)
"unexpected virtual io event subtype %d from partition %d\n", "unexpected virtual io event subtype %d from partition %d\n",
event->xSubtype, remoteLp); event->xSubtype, remoteLp);
/* No handler. Ack if necessary */ /* No handler. Ack if necessary */
if ((event->xFlags.xFunction == HvLpEvent_Function_Int) && if (hvlpevent_is_int(event) && hvlpevent_need_ack(event)) {
(event->xFlags.xAckInd == HvLpEvent_AckInd_DoAck)) {
event->xRc = HvLpEvent_Rc_InvalidSubtype; event->xRc = HvLpEvent_Rc_InvalidSubtype;
HvCallEvent_ackLpEvent(event); HvCallEvent_ackLpEvent(event);
} }
......
...@@ -293,6 +293,7 @@ static int send_request(struct request *req) ...@@ -293,6 +293,7 @@ static int send_request(struct request *req)
u16 viocmd; u16 viocmd;
HvLpEvent_Rc hvrc; HvLpEvent_Rc hvrc;
struct vioblocklpevent *bevent; struct vioblocklpevent *bevent;
struct HvLpEvent *hev;
struct scatterlist sg[VIOMAXBLOCKDMA]; struct scatterlist sg[VIOMAXBLOCKDMA];
int sgindex; int sgindex;
int statindex; int statindex;
...@@ -347,22 +348,19 @@ static int send_request(struct request *req) ...@@ -347,22 +348,19 @@ static int send_request(struct request *req)
* token so we can match the response up later * token so we can match the response up later
*/ */
memset(bevent, 0, sizeof(struct vioblocklpevent)); memset(bevent, 0, sizeof(struct vioblocklpevent));
bevent->event.xFlags.xValid = 1; hev = &bevent->event;
bevent->event.xFlags.xFunction = HvLpEvent_Function_Int; hev->flags = HV_LP_EVENT_VALID | HV_LP_EVENT_DO_ACK |
bevent->event.xFlags.xAckInd = HvLpEvent_AckInd_DoAck; HV_LP_EVENT_INT;
bevent->event.xFlags.xAckType = HvLpEvent_AckType_ImmediateAck; hev->xType = HvLpEvent_Type_VirtualIo;
bevent->event.xType = HvLpEvent_Type_VirtualIo; hev->xSubtype = viocmd;
bevent->event.xSubtype = viocmd; hev->xSourceLp = HvLpConfig_getLpIndex();
bevent->event.xSourceLp = HvLpConfig_getLpIndex(); hev->xTargetLp = viopath_hostLp;
bevent->event.xTargetLp = viopath_hostLp; hev->xSizeMinus1 =
bevent->event.xSizeMinus1 =
offsetof(struct vioblocklpevent, u.rw_data.dma_info) + offsetof(struct vioblocklpevent, u.rw_data.dma_info) +
(sizeof(bevent->u.rw_data.dma_info[0]) * nsg) - 1; (sizeof(bevent->u.rw_data.dma_info[0]) * nsg) - 1;
bevent->event.xSourceInstanceId = hev->xSourceInstanceId = viopath_sourceinst(viopath_hostLp);
viopath_sourceinst(viopath_hostLp); hev->xTargetInstanceId = viopath_targetinst(viopath_hostLp);
bevent->event.xTargetInstanceId = hev->xCorrelationToken = (u64)req;
viopath_targetinst(viopath_hostLp);
bevent->event.xCorrelationToken = (u64)req;
bevent->version = VIOVERSION; bevent->version = VIOVERSION;
bevent->disk = DEVICE_NO(d); bevent->disk = DEVICE_NO(d);
bevent->u.rw_data.offset = start; bevent->u.rw_data.offset = start;
...@@ -649,10 +647,10 @@ static void handle_block_event(struct HvLpEvent *event) ...@@ -649,10 +647,10 @@ static void handle_block_event(struct HvLpEvent *event)
/* Notification that a partition went away! */ /* Notification that a partition went away! */
return; return;
/* First, we should NEVER get an int here...only acks */ /* First, we should NEVER get an int here...only acks */
if (event->xFlags.xFunction == HvLpEvent_Function_Int) { if (hvlpevent_is_int(event)) {
printk(VIOD_KERN_WARNING printk(VIOD_KERN_WARNING
"Yikes! got an int in viodasd event handler!\n"); "Yikes! got an int in viodasd event handler!\n");
if (event->xFlags.xAckInd == HvLpEvent_AckInd_DoAck) { if (hvlpevent_need_ack(event)) {
event->xRc = HvLpEvent_Rc_InvalidSubtype; event->xRc = HvLpEvent_Rc_InvalidSubtype;
HvCallEvent_ackLpEvent(event); HvCallEvent_ackLpEvent(event);
} }
...@@ -695,7 +693,7 @@ static void handle_block_event(struct HvLpEvent *event) ...@@ -695,7 +693,7 @@ static void handle_block_event(struct HvLpEvent *event)
default: default:
printk(VIOD_KERN_WARNING "invalid subtype!"); printk(VIOD_KERN_WARNING "invalid subtype!");
if (event->xFlags.xAckInd == HvLpEvent_AckInd_DoAck) { if (hvlpevent_need_ack(event)) {
event->xRc = HvLpEvent_Rc_InvalidSubtype; event->xRc = HvLpEvent_Rc_InvalidSubtype;
HvCallEvent_ackLpEvent(event); HvCallEvent_ackLpEvent(event);
} }
......
...@@ -542,10 +542,10 @@ static void vio_handle_cd_event(struct HvLpEvent *event) ...@@ -542,10 +542,10 @@ static void vio_handle_cd_event(struct HvLpEvent *event)
/* Notification that a partition went away! */ /* Notification that a partition went away! */
return; return;
/* First, we should NEVER get an int here...only acks */ /* First, we should NEVER get an int here...only acks */
if (event->xFlags.xFunction == HvLpEvent_Function_Int) { if (hvlpevent_is_int(event)) {
printk(VIOCD_KERN_WARNING printk(VIOCD_KERN_WARNING
"Yikes! got an int in viocd event handler!\n"); "Yikes! got an int in viocd event handler!\n");
if (event->xFlags.xAckInd == HvLpEvent_AckInd_DoAck) { if (hvlpevent_need_ack(event)) {
event->xRc = HvLpEvent_Rc_InvalidSubtype; event->xRc = HvLpEvent_Rc_InvalidSubtype;
HvCallEvent_ackLpEvent(event); HvCallEvent_ackLpEvent(event);
} }
...@@ -616,7 +616,7 @@ static void vio_handle_cd_event(struct HvLpEvent *event) ...@@ -616,7 +616,7 @@ static void vio_handle_cd_event(struct HvLpEvent *event)
printk(VIOCD_KERN_WARNING printk(VIOCD_KERN_WARNING
"message with invalid subtype %0x04X!\n", "message with invalid subtype %0x04X!\n",
event->xSubtype & VIOMINOR_SUBTYPE_MASK); event->xSubtype & VIOMINOR_SUBTYPE_MASK);
if (event->xFlags.xAckInd == HvLpEvent_AckInd_DoAck) { if (hvlpevent_need_ack(event)) {
event->xRc = HvLpEvent_Rc_InvalidSubtype; event->xRc = HvLpEvent_Rc_InvalidSubtype;
HvCallEvent_ackLpEvent(event); HvCallEvent_ackLpEvent(event);
} }
......
...@@ -476,19 +476,19 @@ static struct port_info *get_port_data(struct tty_struct *tty) ...@@ -476,19 +476,19 @@ static struct port_info *get_port_data(struct tty_struct *tty)
*/ */
static void initDataEvent(struct viocharlpevent *viochar, HvLpIndex lp) static void initDataEvent(struct viocharlpevent *viochar, HvLpIndex lp)
{ {
struct HvLpEvent *hev = &viochar->event;
memset(viochar, 0, sizeof(struct viocharlpevent)); memset(viochar, 0, sizeof(struct viocharlpevent));
viochar->event.xFlags.xValid = 1; hev->flags = HV_LP_EVENT_VALID | HV_LP_EVENT_DEFERRED_ACK |
viochar->event.xFlags.xFunction = HvLpEvent_Function_Int; HV_LP_EVENT_INT;
viochar->event.xFlags.xAckInd = HvLpEvent_AckInd_NoAck; hev->xType = HvLpEvent_Type_VirtualIo;
viochar->event.xFlags.xAckType = HvLpEvent_AckType_DeferredAck; hev->xSubtype = viomajorsubtype_chario | viochardata;
viochar->event.xType = HvLpEvent_Type_VirtualIo; hev->xSourceLp = HvLpConfig_getLpIndex();
viochar->event.xSubtype = viomajorsubtype_chario | viochardata; hev->xTargetLp = lp;
viochar->event.xSourceLp = HvLpConfig_getLpIndex(); hev->xSizeMinus1 = sizeof(struct viocharlpevent);
viochar->event.xTargetLp = lp; hev->xSourceInstanceId = viopath_sourceinst(lp);
viochar->event.xSizeMinus1 = sizeof(struct viocharlpevent); hev->xTargetInstanceId = viopath_targetinst(lp);
viochar->event.xSourceInstanceId = viopath_sourceinst(lp);
viochar->event.xTargetInstanceId = viopath_targetinst(lp);
} }
/* /*
...@@ -752,7 +752,7 @@ static void vioHandleOpenEvent(struct HvLpEvent *event) ...@@ -752,7 +752,7 @@ static void vioHandleOpenEvent(struct HvLpEvent *event)
struct port_info *pi; struct port_info *pi;
int reject = 0; int reject = 0;
if (event->xFlags.xFunction == HvLpEvent_Function_Ack) { if (hvlpevent_is_ack(event)) {
if (port >= VTTY_PORTS) if (port >= VTTY_PORTS)
return; return;
...@@ -788,7 +788,7 @@ static void vioHandleOpenEvent(struct HvLpEvent *event) ...@@ -788,7 +788,7 @@ static void vioHandleOpenEvent(struct HvLpEvent *event)
} }
/* This had better require an ack, otherwise complain */ /* This had better require an ack, otherwise complain */
if (event->xFlags.xAckInd != HvLpEvent_AckInd_DoAck) { if (!hvlpevent_need_ack(event)) {
printk(VIOCONS_KERN_WARN "viocharopen without ack bit!\n"); printk(VIOCONS_KERN_WARN "viocharopen without ack bit!\n");
return; return;
} }
...@@ -856,7 +856,7 @@ static void vioHandleCloseEvent(struct HvLpEvent *event) ...@@ -856,7 +856,7 @@ static void vioHandleCloseEvent(struct HvLpEvent *event)
struct viocharlpevent *cevent = (struct viocharlpevent *)event; struct viocharlpevent *cevent = (struct viocharlpevent *)event;
u8 port = cevent->virtual_device; u8 port = cevent->virtual_device;
if (event->xFlags.xFunction == HvLpEvent_Function_Int) { if (hvlpevent_is_int(event)) {
if (port >= VTTY_PORTS) { if (port >= VTTY_PORTS) {
printk(VIOCONS_KERN_WARN printk(VIOCONS_KERN_WARN
"close message from invalid virtual device.\n"); "close message from invalid virtual device.\n");
...@@ -1056,8 +1056,7 @@ static void vioHandleCharEvent(struct HvLpEvent *event) ...@@ -1056,8 +1056,7 @@ static void vioHandleCharEvent(struct HvLpEvent *event)
vioHandleConfig(event); vioHandleConfig(event);
break; break;
default: default:
if ((event->xFlags.xFunction == HvLpEvent_Function_Int) && if (hvlpevent_is_int(event) && hvlpevent_need_ack(event)) {
(event->xFlags.xAckInd == HvLpEvent_AckInd_DoAck)) {
event->xRc = HvLpEvent_Rc_InvalidSubtype; event->xRc = HvLpEvent_Rc_InvalidSubtype;
HvCallEvent_ackLpEvent(event); HvCallEvent_ackLpEvent(event);
} }
......
...@@ -590,9 +590,9 @@ static void veth_handle_event(struct HvLpEvent *event, struct pt_regs *regs) ...@@ -590,9 +590,9 @@ static void veth_handle_event(struct HvLpEvent *event, struct pt_regs *regs)
{ {
struct veth_lpevent *veth_event = (struct veth_lpevent *)event; struct veth_lpevent *veth_event = (struct veth_lpevent *)event;
if (event->xFlags.xFunction == HvLpEvent_Function_Ack) if (hvlpevent_is_ack(event))
veth_handle_ack(veth_event); veth_handle_ack(veth_event);
else if (event->xFlags.xFunction == HvLpEvent_Function_Int) else
veth_handle_int(veth_event); veth_handle_int(veth_event);
} }
......
...@@ -32,17 +32,8 @@ ...@@ -32,17 +32,8 @@
* partitions through PLIC. * partitions through PLIC.
*/ */
struct HvEventFlags {
u8 xValid:1; /* Indicates a valid request x00-x00 */
u8 xRsvd1:4; /* Reserved ... */
u8 xAckType:1; /* Immediate or deferred ... */
u8 xAckInd:1; /* Indicates if ACK required ... */
u8 xFunction:1; /* Interrupt or Acknowledge ... */
};
struct HvLpEvent { struct HvLpEvent {
struct HvEventFlags xFlags; /* Event flags x00-x00 */ u8 flags; /* Event flags x00-x00 */
u8 xType; /* Type of message x01-x01 */ u8 xType; /* Type of message x01-x01 */
u16 xSubtype; /* Subtype for event x02-x03 */ u16 xSubtype; /* Subtype for event x02-x03 */
u8 xSourceLp; /* Source LP x04-x04 */ u8 xSourceLp; /* Source LP x04-x04 */
...@@ -126,6 +117,11 @@ extern int HvLpEvent_closePath(HvLpEvent_Type eventType, HvLpIndex lpIndex); ...@@ -126,6 +117,11 @@ extern int HvLpEvent_closePath(HvLpEvent_Type eventType, HvLpIndex lpIndex);
#define HvLpEvent_AckType_ImmediateAck 0 #define HvLpEvent_AckType_ImmediateAck 0
#define HvLpEvent_AckType_DeferredAck 1 #define HvLpEvent_AckType_DeferredAck 1
#define HV_LP_EVENT_INT 0x01
#define HV_LP_EVENT_DO_ACK 0x02
#define HV_LP_EVENT_DEFERRED_ACK 0x04
#define HV_LP_EVENT_VALID 0x80
#define HvLpDma_Direction_LocalToRemote 0 #define HvLpDma_Direction_LocalToRemote 0
#define HvLpDma_Direction_RemoteToLocal 1 #define HvLpDma_Direction_RemoteToLocal 1
...@@ -139,4 +135,29 @@ extern int HvLpEvent_closePath(HvLpEvent_Type eventType, HvLpIndex lpIndex); ...@@ -139,4 +135,29 @@ extern int HvLpEvent_closePath(HvLpEvent_Type eventType, HvLpIndex lpIndex);
#define HvLpDma_Rc_InvalidAddress 4 #define HvLpDma_Rc_InvalidAddress 4
#define HvLpDma_Rc_InvalidLength 5 #define HvLpDma_Rc_InvalidLength 5
static inline int hvlpevent_is_valid(struct HvLpEvent *h)
{
return h->flags & HV_LP_EVENT_VALID;
}
static inline void hvlpevent_invalidate(struct HvLpEvent *h)
{
h->flags &= ~ HV_LP_EVENT_VALID;
}
static inline int hvlpevent_is_int(struct HvLpEvent *h)
{
return h->flags & HV_LP_EVENT_INT;
}
static inline int hvlpevent_is_ack(struct HvLpEvent *h)
{
return !hvlpevent_is_int(h);
}
static inline int hvlpevent_need_ack(struct HvLpEvent *h)
{
return h->flags & HV_LP_EVENT_DO_ACK;
}
#endif /* _ASM_POWERPC_ISERIES_HV_LP_EVENT_H */ #endif /* _ASM_POWERPC_ISERIES_HV_LP_EVENT_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment