Skip to content

Commit e47ef16

Browse files
committed
[USBDRIVER]
- Register the device with the device manager only after it has been successfully allocated to avoid a crash - A device that failed in xhci_alloc would never get deregistered from the device manager so it would crash when it entered xhci_start with a partially set up device extension - Define release_adapter to HalPutDmaAdapter to fix a DMA adapter leak [HAL] - Export HalPutDmaAdapter svn path=/trunk/; revision=47139
1 parent 428dff1 commit e47ef16

File tree

3 files changed

+20
-33
lines changed

3 files changed

+20
-33
lines changed

reactos/drivers/usb/nt4compat/usbdriver/ehci.c

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,7 @@
5858

5959
#define endp_mult_count( endp ) ( ( ( endp->pusb_endp_desc->wMaxPacketSize & 0x1800 ) >> 11 ) + 1 )
6060

61-
#if 0
62-
/* WTF?! */
63-
#define release_adapter( padapTER ) \
64-
{\
65-
( ( padapTER ) ); \
66-
}
67-
#else
68-
#define release_adapter( padapTER ) (void)(padapTER)
69-
#endif
61+
#define release_adapter( padapTER ) HalPutDmaAdapter(padapTER)
7062

7163
#define get_int_idx( _urb, _idx ) \
7264
{\
@@ -3538,6 +3530,7 @@ ehci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
35383530
CM_PARTIAL_RESOURCE_DESCRIPTOR *pprd;
35393531
PCI_SLOT_NUMBER slot_num;
35403532
NTSTATUS status;
3533+
UCHAR hcd_id;
35413534

35423535

35433536
pdev = ehci_create_device(drvr_obj, dev_mgr);
@@ -3704,6 +3697,13 @@ ehci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
37043697
return NULL;
37053698
}
37063699

3700+
//register with dev_mgr
3701+
ehci_init_hcd_interface(pdev_ext->ehci);
3702+
hcd_id = dev_mgr_register_hcd(dev_mgr, &pdev_ext->ehci->hcd_interf);
3703+
3704+
pdev_ext->ehci->hcd_interf.hcd_set_id(&pdev_ext->ehci->hcd_interf, hcd_id);
3705+
pdev_ext->ehci->hcd_interf.hcd_set_dev_mgr(&pdev_ext->ehci->hcd_interf, dev_mgr);
3706+
37073707
return pdev;
37083708
}
37093709

@@ -3719,7 +3719,6 @@ ehci_create_device(PDRIVER_OBJECT drvr_obj, PUSB_DEV_MANAGER dev_mgr)
37193719

37203720
STRING string, another_string;
37213721
CHAR str_dev_name[64], str_symb_name[64];
3722-
UCHAR hcd_id;
37233722

37243723
if (drvr_obj == NULL)
37253724
return NULL;
@@ -3769,13 +3768,6 @@ ehci_create_device(PDRIVER_OBJECT drvr_obj, PUSB_DEV_MANAGER dev_mgr)
37693768
RtlFreeUnicodeString(&dev_name);
37703769
RtlFreeUnicodeString(&symb_name);
37713770

3772-
//register with dev_mgr though it is not initilized
3773-
ehci_init_hcd_interface(pdev_ext->ehci);
3774-
hcd_id = dev_mgr_register_hcd(dev_mgr, &pdev_ext->ehci->hcd_interf);
3775-
3776-
pdev_ext->ehci->hcd_interf.hcd_set_id(&pdev_ext->ehci->hcd_interf, hcd_id);
3777-
pdev_ext->ehci->hcd_interf.hcd_set_dev_mgr(&pdev_ext->ehci->hcd_interf, dev_mgr);
3778-
37793771
return pdev;
37803772

37813773
}

reactos/drivers/usb/nt4compat/usbdriver/uhci.c

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,8 @@ extern PDEVICE_OBJECT ehci_probe(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_pa
6565
: enDP->pusb_endp_desc->wMaxPacketSize )
6666

6767

68-
#if 0
69-
/* WTF?! */
70-
#define release_adapter( padapTER ) \
71-
{\
72-
( ( padapTER ) ); \
73-
}
74-
#else
75-
#define release_adapter( padapTER ) (void)(padapTER)
76-
#endif
68+
#define release_adapter( padapTER ) HalPutDmaAdapter(padapTER)
69+
7770

7871
#define get_int_idx( _urb, _idx ) \
7972
{\
@@ -413,7 +406,6 @@ uhci_create_device(PDRIVER_OBJECT drvr_obj, PUSB_DEV_MANAGER dev_mgr)
413406

414407
STRING string, another_string;
415408
CHAR str_dev_name[64], str_symb_name[64];
416-
UCHAR hcd_id;
417409

418410
if (drvr_obj == NULL)
419411
return NULL;
@@ -463,12 +455,6 @@ uhci_create_device(PDRIVER_OBJECT drvr_obj, PUSB_DEV_MANAGER dev_mgr)
463455
RtlFreeUnicodeString(&dev_name);
464456
RtlFreeUnicodeString(&symb_name);
465457

466-
//register with dev_mgr though it is not initilized
467-
uhci_init_hcd_interface(pdev_ext->uhci);
468-
hcd_id = dev_mgr_register_hcd(dev_mgr, &pdev_ext->uhci->hcd_interf);
469-
470-
pdev_ext->uhci->hcd_interf.hcd_set_id(&pdev_ext->uhci->hcd_interf, hcd_id);
471-
pdev_ext->uhci->hcd_interf.hcd_set_dev_mgr(&pdev_ext->uhci->hcd_interf, dev_mgr);
472458
return pdev;
473459
}
474460

@@ -695,6 +681,7 @@ uhci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
695681
CM_PARTIAL_RESOURCE_DESCRIPTOR *pprd;
696682
PCI_SLOT_NUMBER slot_num;
697683
NTSTATUS status;
684+
UCHAR hcd_id;
698685

699686

700687
pdev = uhci_create_device(drvr_obj, dev_mgr);
@@ -860,6 +847,13 @@ uhci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
860847
return NULL;
861848
}
862849

850+
//register with dev_mgr
851+
uhci_init_hcd_interface(pdev_ext->uhci);
852+
hcd_id = dev_mgr_register_hcd(dev_mgr, &pdev_ext->uhci->hcd_interf);
853+
854+
pdev_ext->uhci->hcd_interf.hcd_set_id(&pdev_ext->uhci->hcd_interf, hcd_id);
855+
pdev_ext->uhci->hcd_interf.hcd_set_dev_mgr(&pdev_ext->uhci->hcd_interf, dev_mgr);
856+
863857
return pdev;
864858
}
865859

reactos/hal/hal.pspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
@ stdcall HalInitializeProcessor(long ptr)
5252
@ stdcall HalMakeBeep(long)
5353
@ stdcall HalProcessorIdle()
54+
@ stdcall HalPutDmaAdapter(ptr)
5455
@ stdcall HalQueryDisplayParameters(ptr ptr ptr ptr)
5556
@ stdcall HalQueryRealTimeClock(ptr)
5657
@ stdcall HalReadDmaCounter(ptr)

0 commit comments

Comments
 (0)