Skip to content

Commit aaa4941

Browse files
committed
usb: hub: FDO: Fix PnP handling issues.
There is many cases where we should forward IRP instead of complete it. svn path=/branches/GSoC_2016/USB/; revision=72375
1 parent 1462b6d commit aaa4941

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

drivers/usb/usbhub/fdo.c

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2028,7 +2028,10 @@ USBHUB_FdoHandlePnp(
20282028
{
20292029
Status = USBHUB_ParentFDOStartDevice(DeviceObject, Irp);
20302030
}
2031-
break;
2031+
2032+
Irp->IoStatus.Status = Status;
2033+
IoCompleteRequest(Irp, IO_NO_INCREMENT);
2034+
return Status;
20322035
}
20332036

20342037
case IRP_MN_QUERY_DEVICE_RELATIONS:
@@ -2059,17 +2062,17 @@ USBHUB_FdoHandlePnp(
20592062

20602063
Irp->IoStatus.Information = (ULONG_PTR)DeviceRelations;
20612064
Irp->IoStatus.Status = Status;
2062-
return ForwardIrpAndForget(DeviceObject, Irp);
2065+
break;
20632066
}
20642067
case RemovalRelations:
20652068
{
20662069
DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / RemovalRelations\n");
2067-
return ForwardIrpAndForget(DeviceObject, Irp);
2070+
break;
20682071
}
20692072
default:
20702073
DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / Unknown type 0x%lx\n",
20712074
Stack->Parameters.QueryDeviceRelations.Type);
2072-
return ForwardIrpAndForget(DeviceObject, Irp);
2075+
break;
20732076
}
20742077
break;
20752078
}
@@ -2078,10 +2081,11 @@ USBHUB_FdoHandlePnp(
20782081
{
20792082
DPRINT("IRP_MN_QUERY_STOP_DEVICE\n");
20802083
Irp->IoStatus.Status = STATUS_SUCCESS;
2081-
return ForwardIrpAndForget(DeviceObject, Irp);
2084+
break;
20822085
}
20832086
case IRP_MN_REMOVE_DEVICE:
20842087
{
2088+
// Should be reworked later in this commits set
20852089
DPRINT("IRP_MN_REMOVE_DEVICE\n");
20862090
Irp->IoStatus.Status = STATUS_SUCCESS;
20872091
IoCompleteRequest(Irp, IO_NO_INCREMENT);
@@ -2093,29 +2097,33 @@ USBHUB_FdoHandlePnp(
20932097
}
20942098
case IRP_MN_QUERY_BUS_INFORMATION:
20952099
{
2100+
// Function drivers and filter drivers do not handle this IRP.
20962101
DPRINT("IRP_MN_QUERY_BUS_INFORMATION\n");
20972102
break;
20982103
}
20992104
case IRP_MN_QUERY_ID:
21002105
{
21012106
DPRINT("IRP_MN_QUERY_ID\n");
2107+
// Function drivers and filter drivers do not handle this IRP.
21022108
break;
21032109
}
21042110
case IRP_MN_QUERY_CAPABILITIES:
21052111
{
2112+
//
2113+
// If a function or filter driver does not handle this IRP, it
2114+
// should pass that down.
2115+
//
21062116
DPRINT("IRP_MN_QUERY_CAPABILITIES\n");
21072117
break;
21082118
}
21092119
default:
21102120
{
21112121
DPRINT(" IRP_MJ_PNP / unknown minor function 0x%lx\n", Stack->MinorFunction);
2112-
return ForwardIrpAndForget(DeviceObject, Irp);
2122+
break;
21132123
}
21142124
}
21152125

2116-
Irp->IoStatus.Status = Status;
2117-
IoCompleteRequest(Irp, IO_NO_INCREMENT);
2118-
return Status;
2126+
return ForwardIrpAndForget(DeviceObject, Irp);
21192127
}
21202128

21212129
NTSTATUS

0 commit comments

Comments
 (0)