brcm2708: update against latest rpi-3.10.y branch
[openwrt.git] / target / linux / brcm2708 / patches-3.10 / 0109-vchiq-fix-the-shim-message-release.patch
1 From 6d8dc87966b488c93a365657588690137de13ed1 Mon Sep 17 00:00:00 2001
2 From: Vincent Sanders <vincent.sanders@collabora.co.uk>
3 Date: Mon, 30 Sep 2013 17:04:55 +0100
4 Subject: [PATCH 109/174] vchiq: fix the shim message release
5
6 Signed-off-by: Daniel Stone <daniels@collabora.com>
7 ---
8  .../vc04_services/interface/vchiq_arm/vchiq_shim.c | 47 +++++++++++++---------
9  1 file changed, 29 insertions(+), 18 deletions(-)
10
11 --- a/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_shim.c
12 +++ b/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_shim.c
13 @@ -545,47 +545,58 @@ static VCHIQ_STATUS_T shim_callback(VCHI
14         SHIM_SERVICE_T *service =
15                 (SHIM_SERVICE_T *)VCHIQ_GET_SERVICE_USERDATA(handle);
16  
17 +        if (!service->callback)
18 +               goto release;
19 +
20         switch (reason) {
21         case VCHIQ_MESSAGE_AVAILABLE:
22                 vchiu_queue_push(&service->queue, header);
23  
24 -               if (service->callback)
25 -                       service->callback(service->callback_param,
26 -                               VCHI_CALLBACK_MSG_AVAILABLE, NULL);
27 +               service->callback(service->callback_param,
28 +                                 VCHI_CALLBACK_MSG_AVAILABLE, NULL);
29 +
30 +               goto done;
31                 break;
32 +
33         case VCHIQ_BULK_TRANSMIT_DONE:
34 -               if (service->callback)
35 -                       service->callback(service->callback_param,
36 -                               VCHI_CALLBACK_BULK_SENT, bulk_user);
37 +               service->callback(service->callback_param,
38 +                                 VCHI_CALLBACK_BULK_SENT, bulk_user);
39                 break;
40 +
41         case VCHIQ_BULK_RECEIVE_DONE:
42 -               if (service->callback)
43 -                       service->callback(service->callback_param,
44 -                               VCHI_CALLBACK_BULK_RECEIVED, bulk_user);
45 +               service->callback(service->callback_param,
46 +                                 VCHI_CALLBACK_BULK_RECEIVED, bulk_user);
47                 break;
48 +
49         case VCHIQ_SERVICE_CLOSED:
50 -               if (service->callback)
51 -                       service->callback(service->callback_param,
52 -                               VCHI_CALLBACK_SERVICE_CLOSED, NULL);
53 +               service->callback(service->callback_param,
54 +                                 VCHI_CALLBACK_SERVICE_CLOSED, NULL);
55                 break;
56 +
57         case VCHIQ_SERVICE_OPENED:
58                 /* No equivalent VCHI reason */
59                 break;
60 +
61         case VCHIQ_BULK_TRANSMIT_ABORTED:
62 -               if (service->callback)
63 -                       service->callback(service->callback_param,
64 -                               VCHI_CALLBACK_BULK_TRANSMIT_ABORTED, bulk_user);
65 +               service->callback(service->callback_param,
66 +                                 VCHI_CALLBACK_BULK_TRANSMIT_ABORTED,
67 +                                 bulk_user);
68                 break;
69 +
70         case VCHIQ_BULK_RECEIVE_ABORTED:
71 -               if (service->callback)
72 -                       service->callback(service->callback_param,
73 -                               VCHI_CALLBACK_BULK_RECEIVE_ABORTED, bulk_user);
74 +               service->callback(service->callback_param,
75 +                                 VCHI_CALLBACK_BULK_RECEIVE_ABORTED,
76 +                                 bulk_user);
77                 break;
78 +
79         default:
80                 WARN(1, "not supported\n");
81                 break;
82         }
83  
84 +release:
85 +        vchiq_release_message(service->handle, header);
86 +done:
87         return VCHIQ_SUCCESS;
88  }
89