Skip to content

Commit

Permalink
hpilo: open/close fix
Browse files Browse the repository at this point in the history
The device can take a while to respond to an open/close request, so
increase the time kernel will wait for response (1 ms to 10ms).

Also, properly clean up a channel on a failed open, by calling the channel
close routine.  Just freeing the memory isn't sufficient, the device needs
to be informed that the channel is no longer open, and the device memory
cleared of references to freed dma buffer.

Signed-off-by: David Altobelli <david.altobelli@hp.com>
Cc: Greg KH <greg@kroah.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
David Altobelli authored and Linus Torvalds committed Feb 5, 2009
1 parent 58763a2 commit c073b2d
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 3 deletions.
6 changes: 3 additions & 3 deletions drivers/misc/hpilo.c
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ static void ilo_ccb_close(struct pci_dev *pdev, struct ccb_data *data)
&device_ccb->recv_ctrl);

/* give iLO some time to process stop request */
for (retries = 1000; retries > 0; retries--) {
for (retries = MAX_WAIT; retries > 0; retries--) {
doorbell_set(driver_ccb);
udelay(1);
if (!(ioread32(&device_ccb->send_ctrl) & (1 << CTRL_BITPOS_A))
Expand Down Expand Up @@ -309,7 +309,7 @@ static int ilo_ccb_open(struct ilo_hwinfo *hw, struct ccb_data *data, int slot)
doorbell_clr(driver_ccb);

/* make sure iLO is really handling requests */
for (i = 1000; i > 0; i--) {
for (i = MAX_WAIT; i > 0; i--) {
if (ilo_pkt_dequeue(hw, driver_ccb, SENDQ, &pkt_id, NULL, NULL))
break;
udelay(1);
Expand All @@ -326,7 +326,7 @@ static int ilo_ccb_open(struct ilo_hwinfo *hw, struct ccb_data *data, int slot)

return 0;
free:
pci_free_consistent(pdev, data->dma_size, data->dma_va, data->dma_pa);
ilo_ccb_close(pdev, data);
out:
return error;
}
Expand Down
2 changes: 2 additions & 0 deletions drivers/misc/hpilo.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
#define MAX_ILO_DEV 1
/* max number of files */
#define MAX_OPEN (MAX_CCB * MAX_ILO_DEV)
/* spin counter for open/close delay */
#define MAX_WAIT 10000

/*
* Per device, used to track global memory allocations.
Expand Down

0 comments on commit c073b2d

Please sign in to comment.