brcm2708: update against latest rpi-3.10.y branch
[openwrt.git] / target / linux / brcm2708 / patches-3.10 / 0030-Avoid-dynamic-memory-allocation-for-channel-lock-in-.patch
1 From f56b0b76fdd4b17bd359536ae926c4cb04706e54 Mon Sep 17 00:00:00 2001
2 From: popcornmix <popcornmix@gmail.com>
3 Date: Sat, 8 Sep 2012 15:17:53 +0100
4 Subject: [PATCH 030/174] Avoid dynamic memory allocation for channel lock in
5  USB driver. Thanks ddv2005.
6
7 ---
8  drivers/usb/host/dwc_otg/dwc_otg_hcd.c      | 6 +++---
9  drivers/usb/host/dwc_otg/dwc_otg_hcd.h      | 2 +-
10  drivers/usb/host/dwc_otg/dwc_otg_hcd_ddma.c | 3 +--
11  drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c | 3 +--
12  4 files changed, 6 insertions(+), 8 deletions(-)
13
14 --- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c
15 +++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c
16 @@ -822,6 +822,7 @@ static void dwc_otg_hcd_free(dwc_otg_hcd
17         } else if (dwc_otg_hcd->status_buf != NULL) {
18                 DWC_FREE(dwc_otg_hcd->status_buf);
19         }
20 +       DWC_SPINLOCK_FREE(dwc_otg_hcd->channel_lock);
21         DWC_SPINLOCK_FREE(dwc_otg_hcd->lock);
22         /* Set core_if's lock pointer to NULL */
23         dwc_otg_hcd->core_if->lock = NULL;
24 @@ -848,6 +849,7 @@ int dwc_otg_hcd_init(dwc_otg_hcd_t * hcd
25         dwc_hc_t *channel;
26  
27         hcd->lock = DWC_SPINLOCK_ALLOC();
28 +       hcd->channel_lock = DWC_SPINLOCK_ALLOC();
29          DWC_DEBUGPL(DBG_HCDV, "init of HCD %p given core_if %p\n",
30                      hcd, core_if);
31         if (!hcd->lock) {
32 @@ -1248,7 +1250,7 @@ dwc_otg_transaction_type_e dwc_otg_hcd_s
33         dwc_otg_qh_t *qh;
34         int num_channels;
35         dwc_irqflags_t flags;
36 -       dwc_spinlock_t *channel_lock = DWC_SPINLOCK_ALLOC();
37 +       dwc_spinlock_t *channel_lock = hcd->channel_lock;
38         dwc_otg_transaction_type_e ret_val = DWC_OTG_TRANSACTION_NONE;
39  
40  #ifdef DEBUG_SOF
41 @@ -1348,8 +1350,6 @@ dwc_otg_transaction_type_e dwc_otg_hcd_s
42  #ifdef DEBUG_HOST_CHANNELS
43         last_sel_trans_num_avail_hc_at_end = hcd->available_host_channels;
44  #endif /* DEBUG_HOST_CHANNELS */
45 -
46 -       DWC_SPINLOCK_FREE(channel_lock);
47         return ret_val;
48  }
49  
50 --- a/drivers/usb/host/dwc_otg/dwc_otg_hcd.h
51 +++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.h
52 @@ -548,7 +548,7 @@ struct dwc_otg_hcd {
53  
54         /*  */
55         dwc_spinlock_t *lock;
56 -
57 +       dwc_spinlock_t *channel_lock;
58         /**
59          * Private data that could be used by OS wrapper.
60          */
61 --- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_ddma.c
62 +++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_ddma.c
63 @@ -276,7 +276,7 @@ void dump_frame_list(dwc_otg_hcd_t * hcd
64  static void release_channel_ddma(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh)
65  {
66         dwc_irqflags_t flags;
67 -       dwc_spinlock_t *channel_lock = DWC_SPINLOCK_ALLOC();
68 +       dwc_spinlock_t *channel_lock = hcd->channel_lock;
69  
70         dwc_hc_t *hc = qh->channel;
71         if (dwc_qh_is_non_per(qh)) {
72 @@ -306,7 +306,6 @@ static void release_channel_ddma(dwc_otg
73                 dwc_memset(qh->desc_list, 0x00,
74                            sizeof(dwc_otg_host_dma_desc_t) * max_desc_num(qh));
75         }
76 -       DWC_SPINLOCK_FREE(channel_lock);
77  }
78  
79  /** 
80 --- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c
81 +++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c
82 @@ -922,7 +922,7 @@ static void release_channel(dwc_otg_hcd_
83         dwc_otg_transaction_type_e tr_type;
84         int free_qtd;
85         dwc_irqflags_t flags;
86 -       dwc_spinlock_t *channel_lock = DWC_SPINLOCK_ALLOC();
87 +       dwc_spinlock_t *channel_lock = hcd->channel_lock;
88  
89         DWC_DEBUGPL(DBG_HCDV, "  %s: channel %d, halt_status %d, xfer_len %d\n",
90                     __func__, hc->hc_num, halt_status, hc->xfer_len);
91 @@ -1009,7 +1009,6 @@ cleanup:
92         if (tr_type != DWC_OTG_TRANSACTION_NONE) {
93                 dwc_otg_hcd_queue_transactions(hcd, tr_type);
94         }
95 -       DWC_SPINLOCK_FREE(channel_lock);
96  }
97  
98  /**