msm: event_timer: Fix potential race condition

There is a possible race condition which could happen in the following
scenario:

Core 0 PC: lock_hrtimer_base

 lock_hrtimer_base
 hrtimer_get_remaining
 get_next_event_time
 msm_pm_idle_prepare
 msm_cpuidle_enter

Core 1 PC: generic_exec_single

 generic_exec_single
 smp_call_function_single
 setup_event_timer
 mdp_update_pm

If core0 idle thread runs before core1 has had the chance to make the
smp_call_function_single, then idle thread could end up spinning on
lock_hrtimer_base() since setup_event_timer adds an event to the event
queue but the smp cross call is the one that initializes the event timer.
So Core0 could spin on lock_hrtimer_base() since CPU1's SMP call won't be
handled as idle thread runs in noirq context.

To prevent this scenario make a change to the code flow to do the queue
operations and the timer operations on the same CPU. Meaning
setup_event_timer will only make an SMP cross call to re-organize the event
queue and reset the event timer all of which will be run on CPU0.

(cherry picked from commit e73869cb18ee79bd0b951fd7effd6565ce7ccfb4)

Change-Id: I78e1c481b9b06c6c1b039436c4d9005a948d9d91
CRs-fixed: 425587
Signed-off-by: Girish Mahadevan <girishm@codeaurora.org>
d2: Increase size of ION AUDIO carveout to 5MB

 * Needed for proper playback on LPA

Change-Id: I6222e7616fc68d30522f89c4b583743b475175a8
Merge branch 'cm-10.1' of https://github.com/CyanogenMod/android_kernel_samsung_d2 into android-linux-3.0-v4