Skip to content

Commit

Permalink
[SPARC64]: Handle reset events in vio_link_state_change().
Browse files Browse the repository at this point in the history
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Jul 18, 2007
1 parent 8a2950c commit a4cd184
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions arch/sparc64/kernel/viohs.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,23 @@ static int start_handshake(struct vio_driver_state *vio)
return 0;
}

static void flush_rx_dring(struct vio_driver_state *vio)
{
struct vio_dring_state *dr;
u64 ident;

BUG_ON(!(vio->dr_state & VIO_DR_STATE_RXREG));

dr = &vio->drings[VIO_DRIVER_RX_RING];
ident = dr->ident;

BUG_ON(!vio->desc_buf);
kfree(vio->desc_buf);

memset(dr, 0, sizeof(*dr));
dr->ident = ident;
}

void vio_link_state_change(struct vio_driver_state *vio, int event)
{
if (event == LDC_EVENT_UP) {
Expand All @@ -98,6 +115,16 @@ void vio_link_state_change(struct vio_driver_state *vio, int event)
break;
}
start_handshake(vio);
} else if (event == LDC_EVENT_RESET) {
vio->hs_state = VIO_HS_INVALID;

if (vio->dr_state & VIO_DR_STATE_RXREG)
flush_rx_dring(vio);

vio->dr_state = 0x00;
memset(&vio->ver, 0, sizeof(vio->ver));

ldc_disconnect(vio->lp);
}
}
EXPORT_SYMBOL(vio_link_state_change);
Expand Down Expand Up @@ -396,6 +423,8 @@ static int process_dreg_info(struct vio_driver_state *vio,
if (vio->dr_state & VIO_DR_STATE_RXREG)
goto send_nack;

BUG_ON(vio->desc_buf);

vio->desc_buf = kzalloc(pkt->descr_size, GFP_ATOMIC);
if (!vio->desc_buf)
goto send_nack;
Expand Down

0 comments on commit a4cd184

Please sign in to comment.