[edk2] [v4 1/4] UefiCpuPkg/MpService: fix trivial typo in cpu state

2015-03-04 Thread Chen Fan
CpuStateBuzy => CpuStateBusy Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 2 +- UefiCpuPkg/CpuDxe/CpuMp.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/Cpu

[edk2] [v4 0/4] UefiCpuPkg/MpService: Put APs to sleep when not busy

2015-03-04 Thread Chen Fan
months ago. pls see: http://feishare.com/efimail/message/20141126-1910-_edk2_UefiCpuPkg _CpuMp_improvement_idea_-_Put_APs_to_sleep_whennot_busy-Jordan_Justen_.html v2-v4: add volatile qulifier for Parameter and Procedure in CpuData Chen Fan (4): UefiCpuPkg/MpService: fix trivial typo in cpu

Re: [edk2] [v4 2/4] UefiCpuPkg/MpService: put AP to busy state when execution

2015-03-04 Thread Chen Fan
Thanks. Chen On 03/05/2015 02:53 PM, Fan, Jeff wrote: > Chen, > > I am ok with the new serial of patches. I will help to check-in the patches > at next week. > > Reviewed-by: Jeff Fan > > Thanks! > Jeff > -Original Message- > From: Chen Fan [mailto:che

[edk2] [v4 3/4] UefiCpuPkg/MpService: Put APs to sleep when not busy

2015-03-04 Thread Chen Fan
Add a new sleeping state for APs, when no procedure execution, put AP to sleep. when need to execute procedure, only need to wake up this AP by sent SIPI. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 61

[edk2] [v4 2/4] UefiCpuPkg/MpService: put AP to busy state when execution

2015-03-04 Thread Chen Fan
CpuState should follow the process: Idle -> Ready -> Busy -> Finished ^ | | | + - - - - - - - - - - - - + Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/Cp

[edk2] [v4 4/4] UefiCpuPkg/MpSerivce: add volatile qualifiers

2015-03-04 Thread Chen Fan
For avoid the compiler optimizing the code, we let Parameter and Procedure in CpuData volatile. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan Signed-off-by: Jeff Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 4 ++-- UefiCpuPkg/CpuDxe/CpuMp.h | 4 ++-- 2 files changed, 4

Re: [edk2] [v3 4/4] UefiCpuPkg/MpSerivce: add volatile qualifiers

2015-03-04 Thread Chen Fan
atile CPU_STATE State; > > - EFI_AP_PROCEDURE Procedure; > - VOID *Parameter; > + volatile EFI_AP_PROCEDURE Procedure; > + volatile VOID *Parameter; > BOOLEAN*Finished; > INTN

Re: [edk2] [v3 4/4] UefiCpuPkg/MpSerivce: add volatile qualifiers

2015-03-04 Thread Chen Fan
1228:23: error: assignment discards ‘volatile’ qualifier from pointer target type Thanks, Chen > > -Original Message----- > From: Chen Fan [mailto:chen.fan.f...@cn.fujitsu.com] > Sent: Thursday, March 05, 2015 11:55 AM > To: edk2-devel@lists.sourceforge.net > Cc: Fan, Jeff;

[edk2] [v3 4/4] UefiCpuPkg/MpSerivce: add volatile qualifiers

2015-03-04 Thread Chen Fan
For avoid the compiler optimizing the code, we let Parameter and Procedure in CpuData volatile. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/UefiCpuPkg/CpuDxe

[edk2] [v3 2/4] UefiCpuPkg/MpService: put AP to busy state when execution

2015-03-04 Thread Chen Fan
CpuState should follow the process: Idle -> Ready -> Busy -> Finished ^ | | | + - - - - - - - - - - - - + Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/Cp

[edk2] [v3 1/4] UefiCpuPkg/MpService: fix trivial typo in cpu state

2015-03-04 Thread Chen Fan
CpuStateBuzy => CpuStateBusy Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 2 +- UefiCpuPkg/CpuDxe/CpuMp.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/Cpu

[edk2] [v3 3/4] UefiCpuPkg/MpService: Put APs to sleep when not busy

2015-03-04 Thread Chen Fan
Add a new sleeping state for APs, when no procedure execution, put AP to sleep. when need to execute procedure, only need to wake up this AP by sent SIPI. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 61

[edk2] [v3 0/4] UefiCpuPkg/MpService: Put APs to sleep when not busy

2015-03-04 Thread Chen Fan
months ago. pls see: http://feishare.com/efimail/message/20141126-1910-_edk2_UefiCpuPkg _CpuMp_improvement_idea_-_Put_APs_to_sleep_whennot_busy-Jordan_Justen_.html v2-v3: add volatile qulifier for Parameter and Procedure in CpuData Chen Fan (4): UefiCpuPkg/MpService: fix trivial typo in cpu

Re: [edk2] [v2 4/4] UefiCpuPkg/MpSerivce: remove volatile qualifier

2015-03-04 Thread Chen Fan
4, 2015, at 5:34 PM, Chen Fan mailto:chen.fan.f...@cn.fujitsu.com>> wrote: Hi Jeff, Thanks for your explanation, I didn't encounter any issue if leaving it there. I just think if use Volatile qualifier may cause the problem of performance. because acces

Re: [edk2] [v2 4/4] UefiCpuPkg/MpSerivce: remove volatile qualifier

2015-03-04 Thread Chen Fan
gt; > Besides it, I also suggest to add volatile for the following variable. > CpuData->Parameter > CpuData->Procedure > > Thanks! > Jeff > > -Original Message- > From: Chen Fan [mailto:chen.fan.f...@cn.fujitsu.com] > Sent: Tuesday, March 03, 2015 1:06 PM

Re: [edk2] [PATCH 2/4] UefiCpuPkg/MpService: register NMI handler for wake up AP with hlt state

2015-03-02 Thread Chen Fan
wakeup AP. and Sent out the v2 patches. PLS help to review. Thanks, Chen >> -Original Message- >> From: Justen, Jordan L >> Sent: Saturday, January 31, 2015 4:36 AM >> To: Chen Fan; edk2-devel@lists.sourceforge.net >> Cc: Fan, Jeff >> Subject: Re: [PATCH 2/4] Ue

[edk2] [v2 0/4] UefiCpuPkg/MpService: Put APs to sleep when not busy

2015-03-02 Thread Chen Fan
months ago. pls see: http://feishare.com/efimail/message/20141126-1910-_edk2_UefiCpuPkg _CpuMp_improvement_idea_-_Put_APs_to_sleep_whennot_busy-Jordan_Justen_.html Chen Fan (4): UefiCpuPkg/MpService: fix trivial typo in cpu state UefiCpuPkg/MpService: put AP to busy state when execution

[edk2] [v2 3/4] UefiCpuPkg/MpService: Put APs to sleep when not busy

2015-03-02 Thread Chen Fan
Add a new sleeping state for APs, when no procedure execution, put AP to sleep. when need to execute procedure, only need to wake up this AP by sent SIPI. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 61

[edk2] [v2 1/4] UefiCpuPkg/MpService: fix trivial typo in cpu state

2015-03-02 Thread Chen Fan
CpuStateBuzy => CpuStateBusy Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 2 +- UefiCpuPkg/CpuDxe/CpuMp.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/Cpu

[edk2] [v2 4/4] UefiCpuPkg/MpSerivce: remove volatile qualifier

2015-03-02 Thread Chen Fan
because manipulating CpuState always with lock protection. so volatile qualifier is redundant. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UefiCpuPkg/CpuDxe

[edk2] [v2 2/4] UefiCpuPkg/MpService: put AP to busy state when execution

2015-03-02 Thread Chen Fan
CpuState should follow the process: Idle -> Ready -> Busy -> Finished ^ | | | + - - - - - - - - - - - - + Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/Cp

[edk2] [PATCH 3/4] UefiCpuPkg/MpService: update idt table entrance for APs

2015-01-30 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 8 1 file changed, 8 insertions(+) diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/CpuDxe/CpuMp.c index 94b72b7..453dc47 100644 --- a/UefiCpuPkg/CpuDxe/CpuMp.c +++ b

[edk2] [PATCH 1/4] Apic: introduce SendNmiIpi() for trigger NMI IPI interrupt

2015-01-30 Thread Chen Fan
After the HLT instruction stops the execution of AP, an enabled interrupt will resume execution. including including NMI and SMI, here we introduce NMI interrupt to wake up AP with hlt state. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/Include

[edk2] [PATCH 4/4] UefiCpuPkg/MpService: Put APs to sleep when not busy

2015-01-30 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 10 ++ 1 file changed, 10 insertions(+) diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/CpuDxe/CpuMp.c index 453dc47..e328de7 100644 --- a/UefiCpuPkg/CpuDxe/CpuMp.c +++ b

[edk2] [PATCH 2/4] UefiCpuPkg/MpService: register NMI handler for wake up AP with hlt state

2015-01-30 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 31 +++ 1 file changed, 31 insertions(+) diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/CpuDxe/CpuMp.c index 71b62be..94b72b7 100644 --- a/UefiCpuPkg

[edk2] [PATCH 0/4] UefiCpuPkg/MpService: Put APs to sleep when not busy

2015-01-30 Thread Chen Fan
months ago. pls see: http://feishare.com/efimail/message/20141126-1910-_edk2_UefiCpuPkg _CpuMp_improvement_idea_-_Put_APs_to_sleep_whennot_busy-Jordan_Justen_.html Chen Fan (4): Apic: introduce SendNmiIpi() for trigger NMI IPI interrupt UefiCpuPkg/MpService: register NMI handler for wake up AP

Re: [edk2] UefiCpuPkg CpuMp improvement idea - Put APs to sleep when not busy

2014-11-26 Thread Chen, Fan
On Wed, 2014-11-26 at 11:10 -0800, Jordan Justen wrote: > On 2014-11-13 17:34:59, Chen, Fan wrote: > > On Thu, 2014-11-13 at 10:42 -0800, Jordan Justen wrote: > > > On 2014-11-06 17:23:01, Fan, Jeff wrote: > > > > Chen, > > > > > > > > T

Re: [edk2] UefiCpuPkg CpuMp improvement idea - sync MTRRs

2014-11-26 Thread Chen, Fan
On Wed, 2014-11-26 at 13:09 -0800, Andrew Fish wrote: > > > On Nov 26, 2014, at 12:49 PM, Jordan Justen > > wrote: > > > > On 2014-11-26 12:07:53, Laszlo Ersek wrote: > > > On 11/26/14 20:28, Jordan Justen wrote: > > > > On 2014-11-13 17:34:59,

Re: [edk2] [RFC PATCH V7 00/27] Introduce Mp Service protocol to UefiCpuPkg

2014-11-26 Thread Chen, Fan
On Wed, 2014-11-26 at 16:43 +0100, Laszlo Ersek wrote: > On 11/26/14 15:48, Laszlo Ersek wrote: > > Hi, > > > > On 11/13/14 19:42, Jordan Justen wrote: > >> On 2014-11-06 17:23:01, Fan, Jeff wrote: > >>> Chen, > >>> > >>> Thanks your contribution. I will check-in your patch if there is no > >>> f

Re: [edk2] [PATCH v5 1/3] EmulatorPkg/Mpservice: fix wrong unsigned to signed variable transition

2014-11-23 Thread Chen, Fan
On Fri, 2014-11-21 at 15:01 -0800, Jordan Justen wrote: > On 2014-11-20 21:09:03, Chen Fan wrote: > > Because TimeoutInMicrosecsond is a unsigned value, converting it to > > signed value will cause the data region changed. so this patch fix > > that. > > >

Re: [edk2] [PATCH v3 1/3] EmulatorPkg/Mpservice: fix wrong unsigned to signed variable transition

2014-11-20 Thread Chen, Fan
On Sun, 2014-11-16 at 23:00 -0800, Jordan Justen wrote: > On 2014-11-16 21:26:16, Chen, Fan wrote: > > On Sun, 2014-11-16 at 19:59 -0800, Jordan Justen wrote: > > > On 2014-11-16 18:51:15, Chen Fan wrote: > > > > Because TimeoutInMicrosecsond is a unsigned value, c

[edk2] [PATCH v5 1/3] EmulatorPkg/Mpservice: fix wrong unsigned to signed variable transition

2014-11-20 Thread Chen Fan
Because TimeoutInMicrosecsond is a unsigned value, converting it to signed value will cause the data region changed. so this patch fix that. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- EmulatorPkg/CpuRuntimeDxe/MpService.c | 41

[edk2] [PATCH v5 0/3] EmulatorPkg/MpService: fix bugs

2014-11-20 Thread Chen Fan
there were some bugs we should fix. Chen Fan (3): EmulatorPkg/Mpservice: fix wrong unsigned to signed variable transition EmulatorPkg/MpService: StartupAllAPs should verify processor state before setting state EmulatorPkg/Mpservice: add enabled processor check for startupThisAP

[edk2] [PATCH v5 2/3] EmulatorPkg/MpService: StartupAllAPs should verify processor state before setting state

2014-11-20 Thread Chen Fan
if any enabled APs are not in idle state, StartupAllAPs() should return immediately, and must not change the other idled processor state. so we checked the state before changed them. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan Reviewed-by: Jordan Justen

[edk2] [PATCH v5 3/3] EmulatorPkg/Mpservice: add enabled processor check for startupThisAP

2014-11-20 Thread Chen Fan
if processor number is the one of disabled processor, startupThisAP should return invalid prameter. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan Reviewed-by: Jordan Justen --- EmulatorPkg/CpuRuntimeDxe/MpService.c | 4 1 file changed, 4 insertions

Re: [edk2] [PATCH] UefiCpuPkg : Fix CpuDxe build issue with VS2005 tool chain

2014-11-18 Thread Chen, Fan
I had not tested it using other compilers. Thanks for your fix them. Reviewed-by: Chen Fan Chen On Wed, 2014-11-19 at 03:12 +, Fan, Jeff wrote: > !!() cannot pass VS2005 build. > > > > Contributed-under: TianoCore Contribution Agreement 1.0 > > Si

[edk2] [PATCH V2] UefiCpuPkg/CpuDxe: Put APs in wait for SIPI state at ExitBootServices

2014-11-16 Thread Chen Fan
when gBS->ExitBootServices() is called, the APs should avoid to access the unsafed buff datas which were allocated by boot services. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan Tested-by: Gabriel Somlo Reviewed-by: Jordan Justen --- v2-v1: Move creat

Re: [edk2] [PATCH] CpuDxe: change APs to wait for SIPI state

2014-11-16 Thread Chen, Fan
EVT_SIGNAL_EXIT_BOOT_SERVICES, > + TPL_CALLBACK, > + ExitBootServicesCallback, > + NULL, > + &mExitBootServicesEvent > + ); > + ASSERT_EFI_ERROR (Status); Yes, I will send V2 soon. Thanks, Chen > > Tha

[edk2] [PATCH v4 2/3] EmulatorPkg/MpService: StartupAllAPs should verify processor state before setting state

2014-11-16 Thread Chen Fan
if any enabled APs are not in idle state, StartupAllAPs() should return immediately, and must not change the other idled processor state. so we checked the state before changed them. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan Reviewed-by: Jordan Justen

[edk2] [PATCH v4 0/3] EmulatorPkg/MpService: fix bugs

2014-11-16 Thread Chen Fan
there were some bugs we should fix. Chen Fan (3): EmulatorPkg/Mpservice: fix wrong unsigned to signed variable transition EmulatorPkg/MpService: StartupAllAPs should verify processor state before setting state EmulatorPkg/Mpservice: add enabled processor check for startupThisAP

Re: [edk2] [PATCH v3 1/3] EmulatorPkg/Mpservice: fix wrong unsigned to signed variable transition

2014-11-16 Thread Chen, Fan
On Sun, 2014-11-16 at 19:59 -0800, Jordan Justen wrote: > On 2014-11-16 18:51:15, Chen Fan wrote: > > Because TimeoutInMicrosecsond is a unsigned value, converting it to > > signed value will cause the data region changed. so this patch fix > > that. > > >

[edk2] [PATCH v4 1/3] EmulatorPkg/Mpservice: fix wrong unsigned to signed variable transition

2014-11-16 Thread Chen Fan
Because TimeoutInMicrosecsond is a unsigned value, converting it to signed value will cause the data region changed. so this patch fix that. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- EmulatorPkg/CpuRuntimeDxe/MpService.c | 25

[edk2] [PATCH v4 3/3] EmulatorPkg/Mpservice: add enabled processor check for startupThisAP

2014-11-16 Thread Chen Fan
if processor number is the one of disabled processor, startupThisAP should return invalid prameter. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan Reviewed-by: Jordan Justen --- EmulatorPkg/CpuRuntimeDxe/MpService.c | 4 1 file changed, 4 insertions

Re: [edk2] [PATCH] CpuDxe: change APs to wait for SIPI state

2014-11-16 Thread Chen, Fan
s in wait for SIPI state at ExitBootServices Looks good to me. Thanks, Chen > > -Jordan > > > On 2014-11-16 18:18:39, Chen Fan wrote: > > > when gBS->ExitBootServices() is called, the APs should avoid > > > to access the unsafed buff datas which wer

Re: [edk2] [PATCH v2 1/3] EmulatorPkg/Mpservice: fix wrong unsigned to signed variable transition

2014-11-16 Thread Chen, Fan
On Fri, 2014-11-14 at 10:46 -0800, Jordan Justen wrote: > On 2014-11-03 00:17:17, Chen Fan wrote: > > Because TimeoutInMicrosecsond is a unsigned value, converting it to > > signed value will cause the data region changed. so this patch fix > > that. > > >

Re: [edk2] qemu + osx + smp vs. dee9376ffc6e5522bb5e50512b521952a5421fa5

2014-11-16 Thread Chen, Fan
On Sun, 2014-11-16 at 18:51 -0800, Jordan Justen wrote: > On 2014-11-16 18:24:54, Chen, Fan wrote: > > On Fri, 2014-11-14 at 09:34 -0800, Jordan Justen wrote: > > > On 2014-11-14 05:52:47, Gabriel Somlo wrote: > > > > On Fri, Nov 14, 2014 at 08:30:35AM +, Che

[edk2] [PATCH] CpuDxe: change APs to wait for SIPI state

2014-11-16 Thread Chen Fan
when gBS->ExitBootServices() is called, the APs should avoid to access the unsafed buff datas which were allocated by boot services. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan Tested-by: Gabriel Somlo --- UefiCpuPkg/CpuDxe/CpuDxe.c |

[edk2] [PATCH v3 2/3] EmulatorPkg/MpService: StartupAllAPs should verify processor state before setting state

2014-11-16 Thread Chen Fan
if any enabled APs are not in idle state, StartupAllAPs() should return immediately, and must not change the other idled processor state. so we checked the state before changed them. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- EmulatorPkg/CpuRuntimeDxe

[edk2] [PATCH v3 1/3] EmulatorPkg/Mpservice: fix wrong unsigned to signed variable transition

2014-11-16 Thread Chen Fan
Because TimeoutInMicrosecsond is a unsigned value, converting it to signed value will cause the data region changed. so this patch fix that. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- EmulatorPkg/CpuRuntimeDxe/MpService.c | 20 ++-- 1

[edk2] [PATCH v3 0/3] EmulatorPkg/MpService: fix bugs

2014-11-16 Thread Chen Fan
there were some bugs we should fix. Chen Fan (3): EmulatorPkg/Mpservice: fix wrong unsigned to signed variable transition EmulatorPkg/MpService: StartupAllAPs should verify processor state before setting state EmulatorPkg/Mpservice: add enabled processor check for startupThisAP

[edk2] [PATCH v3 3/3] EmulatorPkg/Mpservice: add enabled processor check for startupThisAP

2014-11-16 Thread Chen Fan
if processor number is the one of disabled processor, startupThisAP should return invalid prameter. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- EmulatorPkg/CpuRuntimeDxe/MpService.c | 4 1 file changed, 4 insertions(+) diff --git a/EmulatorPkg

Re: [edk2] qemu + osx + smp vs. dee9376ffc6e5522bb5e50512b521952a5421fa5

2014-11-16 Thread Chen, Fan
On Fri, 2014-11-14 at 09:34 -0800, Jordan Justen wrote: > On 2014-11-14 05:52:47, Gabriel Somlo wrote: > > On Fri, Nov 14, 2014 at 08:30:35AM +0000, Chen, Fan wrote: > > > On Fri, 2014-11-14 at 08:11 +, Fan, Jeff wrote: > > > > Sounds good idea to send INIT IP

Re: [edk2] [RFC PATCH V7 00/27] Introduce Mp Service protocol to UefiCpuPkg

2014-11-13 Thread Chen, Fan
ove the MP. BTW, thanks for your push. Chen > > Jeff, > > Thanks for your review of this big series! > > -Jordan > > > -Original Message- > > From: Chen, Fan [mailto:chen.fan.f...@cn.fujitsu.com] > > Sent: Thursday, November 06, 2014 5:13 PM

Re: [edk2] [RFC PATCH V7 00/27] Introduce Mp Service protocol to UefiCpuPkg

2014-11-06 Thread Chen, Fan
ApStartup.asm. Thanks, Chen > > Thanks! > Jeff > -Original Message- > From: Chen Fan [mailto:chen.fan.f...@cn.fujitsu.com] > Sent: Tuesday, November 04, 2014 5:59 PM > To: edk2-devel@lists.sourceforge.net > Cc: Jordan Justen; Fan, Jeff; izumi.t...@jp.fujitsu.c

[edk2] [RFC PATCH V7 18/27] UefiCpuPkg/MpService: move settimer out to InitMpSystemData

2014-11-04 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 128 -- 1 file changed, 78 insertions(+), 50 deletions(-) diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/CpuDxe/CpuMp.c index f5de832

[edk2] [RFC PATCH V7 08/27] UefiCpuPkg/CpuDxe: introduce EFI_MP_SERVICES_PROTOCOL

2014-11-04 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuDxe.inf | 1 + UefiCpuPkg/CpuDxe/CpuMp.c| 10 ++ UefiCpuPkg/CpuDxe/CpuMp.h| 2 ++ 3 files changed, 13 insertions(+) diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.inf b/UefiCpuPkg

[edk2] [RFC PATCH V7 20/27] UefiCpuPkg/MpService: avoid next timer getting into CheckAllAPsStatus()

2014-11-04 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 23 ++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/CpuDxe/CpuMp.c index 950db38..ba62aea 100644 --- a

[edk2] [RFC PATCH V7 16/27] UefiCpuPkg/CpuDxe: implement Mp Services:SwitchBSP()

2014-11-04 Thread Chen Fan
by now, SwitchBSP() always return UNSUPPORTED Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 51 ++- UefiCpuPkg/CpuDxe/CpuMp.h | 43 +++ 2 files

[edk2] [RFC PATCH V7 03/27] UefiCpuPkg/CpuDxe: Add stackless assembly AP entry points

2014-11-04 Thread Chen Fan
From: Jordan Justen The AP startup code simply jumps into this code with the CpuDxe driver without setting up a stack for the processor. Therefore, this code must setup the stack before calling into C code. This is the basic flow: * AP enters CpuDxe driver code (AsmApEntryPoint) without stack

[edk2] [RFC PATCH V7 27/27] UefiCpuPkg/CpuDxe: install Mp Service protocol

2014-11-04 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 10 ++ 1 file changed, 10 insertions(+) diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/CpuDxe/CpuMp.c index 1eaf7b3..2692ebc 100644 --- a/UefiCpuPkg/CpuDxe/CpuMp.c +++ b

[edk2] [RFC PATCH V7 17/27] UefiCpuPkg/CpuDxe: Ap do loop routine to execute procedure

2014-11-04 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 33 - 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/CpuDxe/CpuMp.c index ee25eac..f5de832 100644

[edk2] [RFC PATCH V7 25/27] UefiCpuPkg/MpService: avoid dead lock caused by CheckAllAPsStatus

2014-11-04 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 55 ++- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/CpuDxe/CpuMp.c index 183a27d

[edk2] [RFC PATCH V7 26/27] UefiCpuPkg/CpuDxe: Startup APs

2014-11-04 Thread Chen Fan
Contribution Agreement 1.0 Signed-off-by: Jordan Justen Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/CpuDxe/CpuMp.c index dc19bb9..1eaf7b3 100644 --- a/UefiCpuPkg/CpuDxe/CpuMp.c +++ b/UefiCpuPkg

[edk2] [RFC PATCH V7 24/27] UefiCpuPkg/MpService: avoid reset AP still hold a lock

2014-11-04 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 9 + UefiCpuPkg/CpuDxe/CpuMp.h | 1 + 2 files changed, 10 insertions(+) diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/CpuDxe/CpuMp.c index d657152..183a27d 100644 --- a

[edk2] [RFC PATCH V7 14/27] UefiCpuPkg/CpuDxe: implement Mp Protocol:StartupThisAP()

2014-11-04 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 345 +- UefiCpuPkg/CpuDxe/CpuMp.h | 117 2 files changed, 461 insertions(+), 1 deletion(-) diff --git a/UefiCpuPkg/CpuDxe

[edk2] [RFC PATCH V7 15/27] UefiCpuPkg/CpuDxe: implement Mp Services:StartupAllAPs()

2014-11-04 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 436 +- UefiCpuPkg/CpuDxe/CpuMp.h | 160 + 2 files changed, 595 insertions(+), 1 deletion(-) diff --git a/UefiCpuPkg/CpuDxe

[edk2] [RFC PATCH V7 13/27] UefiCpuPkg/CpuDxe: implement Mp Protocol:EnableDisableAP()

2014-11-04 Thread Chen Fan
Due to the implementation of AcquireSpinLock() is not MP safe, so we should use AcquireSpinLockOrFail directly instead. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 186 +- UefiCpuPkg

[edk2] [RFC PATCH V7 21/27] UefiCpuPkg/CpuDxe: split out StartupCode from StartApsStackless()

2014-11-04 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/ApStartup.c | 54 --- UefiCpuPkg/CpuDxe/CpuMp.c | 3 +++ UefiCpuPkg/CpuDxe/CpuMp.h | 27 ++ 3 files changed, 66 insertions

[edk2] [RFC PATCH V7 23/27] UefiCpuPkg/MpService: free the unused cpu data buffer

2014-11-04 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 15 --- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/CpuDxe/CpuMp.c index 96513e8..d657152 100644 --- a/UefiCpuPkg

[edk2] [RFC PATCH V7 22/27] UefiCpuPkg/CpuDxe: introduce ResetApStackless()

2014-11-04 Thread Chen Fan
If timeout expires before AP returns from Procedure, the AP should be terminated, we introduce ResetApStackLess() to send init IPI to let AP exit Procedurce and re-available. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/ApStartup.c | 19

[edk2] [RFC PATCH V7 07/27] UefiCpuPkg/CpuDxe: Switch Ap Stack to NewStack

2014-11-04 Thread Chen Fan
All APs use the same common stack to initialization. after initialization, APs should switch to the stack of its own. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 29 + 1 file changed, 29 insertions

[edk2] [RFC PATCH V7 11/27] UefiCpuPkg/CpuDxe: implement Mp Protocol:GetNumberOfProcessors()

2014-11-04 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 82 ++- UefiCpuPkg/CpuDxe/CpuMp.h | 44 + 2 files changed, 125 insertions(+), 1 deletion(-) diff --git a/UefiCpuPkg

[edk2] [RFC PATCH V7 12/27] UefiCpuPkg/CpuDxe: implement Mp Services:GetProcessorInfo()

2014-11-04 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 52 ++- UefiCpuPkg/CpuDxe/CpuMp.h | 34 +++ 2 files changed, 85 insertions(+), 1 deletion(-) diff --git a

[edk2] [RFC PATCH V7 06/27] UefiCpuPkg/CpuDxe: introduce two PCD value

2014-11-04 Thread Chen Fan
introduce PCD value: PcdCpuMaxLogicalProcessorNumber and PcdCpuApStackSize, used for initialize APs stacks. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuDxe.inf | 4 UefiCpuPkg/CpuDxe/CpuMp.c| 42

[edk2] [RFC PATCH V7 19/27] UefiCpuPkg/MpService: Simply Lock usage

2014-11-04 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 89 +-- 1 file changed, 47 insertions(+), 42 deletions(-) diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/CpuDxe/CpuMp.c index baab253

[edk2] [RFC PATCH V7 10/27] UefiCpuPkg/CpuDxe: implement Mp Protocol: WhoAmI()

2014-11-04 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 51 ++- UefiCpuPkg/CpuDxe/CpuMp.h | 31 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a

[edk2] [RFC PATCH V7 02/27] UefiCpuPkg/CpuDxe: Add ApEntryPointInC

2014-11-04 Thread Chen Fan
From: Jordan Justen This is the function the AP assembly code will expect to call after getting a lock and setting up the stack. Only one AP will enter this routine at a time. If ApEntryPointInC exits, then the assembly code will loop around to grab the lock, setup the stack, and call ApEntryPo

[edk2] [RFC PATCH V7 05/27] UefiCpuPkg/CpuDxe: Add StartApsStackless routine

2014-11-04 Thread Chen Fan
From: Jordan Justen This routine starts the APs and directs them to run the specified code. The specified code is entered without a stack being available. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen --- UefiCpuPkg/CpuDxe/ApStartup.asm | 111 +++

[edk2] [RFC PATCH V7 00/27] Introduce Mp Service protocol to UefiCpuPkg

2014-11-04 Thread Chen Fan
1. do not call anything EFI API from APs. 2. add AP busy-wait for task assignment from BSP and get rid of IPI sent mechanism. Chen Fan (22): UefiCpuPkg/CpuDxe: introduce two PCD value UefiCpuPkg/CpuDxe: Switch Ap Stack to NewStack UefiCpuPkg/CpuDxe: introduce EFI_MP_SERVICES_PROTOCOL Ue

[edk2] [RFC PATCH V7 09/27] UefiCpuPkg/CpuDxe: introduce MP_SYSTEM_DATA for Mp Service Protocol

2014-11-04 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuDxe.inf | 1 + UefiCpuPkg/CpuDxe/CpuMp.c| 89 +++- UefiCpuPkg/CpuDxe/CpuMp.h| 47 +++ UefiCpuPkg/UefiCpuPkg.dsc| 1

[edk2] [RFC PATCH V7 04/27] UefiCpuPkg/CpuDxe: Move GDT structures into CpuGdt.h

2014-11-04 Thread Chen Fan
From: Jordan Justen We'll want to use the structures for AP startup. Note: It seems previously we were not using '#pragma pack ()' in CpuGdt.c. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen --- UefiCpuPkg/CpuDxe/CpuGdt.c | 52 +-

[edk2] [RFC PATCH V7 01/27] UefiCpuPkg/CpuDxe: Add no-op InitializeMpSupport

2014-11-04 Thread Chen Fan
From: Jordan Justen Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuDxe.c | 3 +++ UefiCpuPkg/CpuDxe/CpuDxe.inf | 2 ++ UefiCpuPkg/CpuDxe/CpuMp.c| 28 UefiCpuPkg/CpuDxe

Re: [edk2] [RFC PATCH v6 06/27] UefiCpuPkg/CpuDxe: introduce two PCD value

2014-11-03 Thread Chen, Fan
e (UINT8 *) > for mApStackStart. > mTopOfApCommonStack = mApStackStart + gApStackSize; > TopOfApStack = mApStackStart + gApStackSize; > > Thanks! > Jeff > > -Original Message- > From: Chen Fan [mailto:chen.fan.f...@cn.fujitsu.com] > Sent: Mond

[edk2] [PATCH] MdePkg: fix comments typo about EFIAPI for X64

2014-11-03 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- MdePkg/Include/X64/ProcessorBind.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MdePkg/Include/X64/ProcessorBind.h b/MdePkg/Include/X64/ProcessorBind.h index dae0683..842c9a6 100644

Re: [edk2] [RFC PATCH v6 08/27] UefiCpuPkg/CpuDxe: introduce EFI_MP_SERVICES_PROTOCOL

2014-11-03 Thread Chen, Fan
riginal Message- > From: Chen Fan [mailto:chen.fan.f...@cn.fujitsu.com] > Sent: Monday, October 27, 2014 5:30 PM > To: edk2-devel@lists.sourceforge.net > Cc: Fan, Jeff; Jordan Justen > Subject: [RFC PATCH v6 08/27] UefiCpuPkg/CpuDxe: introduce > EFI_MP_SERVICES_PROTOCOL &

Re: [edk2] [RFC PATCH v6 01/27] UefiCpuPkg/CpuDxe: Add no-op InitializeMpSupport

2014-11-03 Thread Chen, Fan
it. Thanks, Chen > Thanks! > Jeff > > -Original Message- > From: Chen Fan [mailto:chen.fan.f...@cn.fujitsu.com] > Sent: Monday, October 27, 2014 5:30 PM > To: edk2-devel@lists.sourceforge.net > Cc: Fan, Jeff; Jordan Justen; Justen, Jordan L > Subject: [RFC PATCH v6 01

Re: [edk2] [RFC PATCH v6 09/27] UefiCpuPkg/CpuDxe: introduce MP_SYSTEM_DATA for Mp Service Protocol

2014-11-03 Thread Chen, Fan
Lock (),ReleaseMpSpinLock (),CheckAndUpdateAllAPsToIdleState (). Got it. Thanks, Chen > > Thanks! > Jeff > > -Original Message- > From: Chen Fan [mailto:chen.fan.f...@cn.fujitsu.com] > Sent: Monday, October 27, 2014 5:30 PM > To: edk2-devel@lists.sou

Re: [edk2] [RFC PATCH v6 07/27] UefiCpuPkg/CpuDxe: Switch Ap Stack to NewStack

2014-11-03 Thread Chen, Fan
On Mon, 2014-11-03 at 08:37 +, Fan, Jeff wrote: > Chen, > > Missing parameter description block in function header of > ProcessorToIdleState(). Got it. Thanks, Chen > > Thanks! > Jeff > > -Original Message- > From: Chen Fan [mailto:chen.fan.f...@c

Re: [edk2] [RFC PATCH v6 06/27] UefiCpuPkg/CpuDxe: introduce two PCD value

2014-11-03 Thread Chen, Fan
NSUMES > > 4. The following 2 lines cannot pass VS2008, please add type case (UINT8 *) > for mApStackStart. > mTopOfApCommonStack = mApStackStart + gApStackSize; > TopOfApStack = mApStackStart + gApStackSize; Thanks for your review. I will fix them soon. Thanks, Chen

[edk2] [PATCH v2 1/3] EmulatorPkg/Mpservice: fix wrong unsigned to signed variable transition

2014-11-03 Thread Chen Fan
Because TimeoutInMicrosecsond is a unsigned value, converting it to signed value will cause the data region changed. so this patch fix that. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- EmulatorPkg/CpuRuntimeDxe/MpService.c | 10 +- 1 file changed

[edk2] [PATCH v2 3/3] EmulatorPkg/Mpservice: add enabled processor check for startupThisAP

2014-11-03 Thread Chen Fan
if processor number is the one of disabled processor, startupThisAP should return invalid prameter. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- EmulatorPkg/CpuRuntimeDxe/MpService.c | 4 1 file changed, 4 insertions(+) diff --git a/EmulatorPkg

[edk2] [PATCH v2 0/3] EmulatorPkg/MpService: fix bugs

2014-11-03 Thread Chen Fan
there were some bugs we should fix. Chen Fan (3): EmulatorPkg/Mpservice: fix wrong unsigned to signed variable transition EmulatorPkg/MpService: StartupAllAPs should verify processor state before setting state EmulatorPkg/Mpservice: add enabled processor check for startupThisAP

[edk2] [PATCH v2 2/3] EmulatorPkg/MpService: StartupAllAPs should verify processor state before setting state

2014-11-03 Thread Chen Fan
if any enabled APs are not in idle state, StartupAllAPs() should return immediately, and must not change the other idled processor state. so we checked the state before changed them. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- EmulatorPkg/CpuRuntimeDxe

Re: [edk2] [RFC PATCH v6 00/27] Introduce Mp Service protocol to UefiCpuPkg

2014-10-28 Thread Chen, Fan
On Mon, 2014-10-27 at 17:29 +0800, Chen Fan wrote: > This series patchset try to implement Mp Service protocol in UefiCpuPkg, > Jordan had implemented the startup APs code, and I try to add more > initialization code to let all APs work up, this Mp Service protocol's > im

[edk2] [RFC PATCH v6 22/27] UefiCpuPkg/CpuDxe: introduce ResetApStackless()

2014-10-27 Thread Chen Fan
If timeout expires before AP returns from Procedure, the AP should be terminated, we introduce ResetApStackLess() to send init IPI to let AP exit Procedurce and re-available. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/ApStartup.c | 19

[edk2] [RFC PATCH v6 15/27] UefiCpuPkg/CpuDxe: implement Mp Services:StartupAllAPs()

2014-10-27 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 436 +- UefiCpuPkg/CpuDxe/CpuMp.h | 160 + 2 files changed, 595 insertions(+), 1 deletion(-) diff --git a/UefiCpuPkg/CpuDxe

[edk2] [RFC PATCH v6 17/27] UefiCpuPkg/CpuDxe: Ap do loop routine to execute procedure

2014-10-27 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 33 - 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/CpuDxe/CpuMp.c index 3ea6ff0..8482cdf 100644

[edk2] [RFC PATCH v6 14/27] UefiCpuPkg/CpuDxe: implement Mp Protocol:StartupThisAP()

2014-10-27 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 344 +- UefiCpuPkg/CpuDxe/CpuMp.h | 117 2 files changed, 460 insertions(+), 1 deletion(-) diff --git a/UefiCpuPkg/CpuDxe

[edk2] [RFC PATCH v6 21/27] UefiCpuPkg/CpuDxe: split out StartupCode from StartApsStackless()

2014-10-27 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/ApStartup.c | 54 --- UefiCpuPkg/CpuDxe/CpuMp.c | 3 +++ UefiCpuPkg/CpuDxe/CpuMp.h | 27 ++ 3 files changed, 66 insertions

[edk2] [RFC PATCH v6 12/27] UefiCpuPkg/CpuDxe: implement Mp Services:GetProcessorInfo()

2014-10-27 Thread Chen Fan
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan --- UefiCpuPkg/CpuDxe/CpuMp.c | 52 ++- UefiCpuPkg/CpuDxe/CpuMp.h | 34 +++ 2 files changed, 85 insertions(+), 1 deletion(-) diff --git a

  1   2   3   >