powerpc/smp: Support more IPI messages
This patch increases the number of demuxed messages for a controller with a single ipi to 8 for 64-bit systems. This is required because we want to use the IPI mechanism to send messages from a CPU running in KVM real mode in a guest to a CPU in the host to take some action. Currently, we only support 4 messages and all 4 are already taken. Define a fifth message PPC_MSG_RM_HOST_ACTION for this purpose. Signed-off-by: Suresh Warrier <warrier@linux.vnet.ibm.com> Acked-by: Michael Ellerman <mpe@ellerman.id.au> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
		
							parent
							
								
									d3695aa4f4
								
							
						
					
					
						commit
						bd7f561f76
					
				| @ -114,6 +114,9 @@ extern int cpu_to_core_id(int cpu); | ||||
| #define PPC_MSG_TICK_BROADCAST	2 | ||||
| #define PPC_MSG_DEBUGGER_BREAK  3 | ||||
| 
 | ||||
| /* This is only used by the powernv kernel */ | ||||
| #define PPC_MSG_RM_HOST_ACTION	4 | ||||
| 
 | ||||
| /* for irq controllers that have dedicated ipis per message (4) */ | ||||
| extern int smp_request_message_ipi(int virq, int message); | ||||
| extern const char *smp_ipi_name[]; | ||||
|  | ||||
| @ -206,7 +206,7 @@ int smp_request_message_ipi(int virq, int msg) | ||||
| 
 | ||||
| #ifdef CONFIG_PPC_SMP_MUXED_IPI | ||||
| struct cpu_messages { | ||||
| 	int messages;			/* current messages */ | ||||
| 	long messages;			/* current messages */ | ||||
| 	unsigned long data;		/* data for cause ipi */ | ||||
| }; | ||||
| static DEFINE_PER_CPU_SHARED_ALIGNED(struct cpu_messages, ipi_message); | ||||
| @ -236,15 +236,15 @@ void smp_muxed_ipi_message_pass(int cpu, int msg) | ||||
| } | ||||
| 
 | ||||
| #ifdef __BIG_ENDIAN__ | ||||
| #define IPI_MESSAGE(A) (1 << (24 - 8 * (A))) | ||||
| #define IPI_MESSAGE(A) (1uL << ((BITS_PER_LONG - 8) - 8 * (A))) | ||||
| #else | ||||
| #define IPI_MESSAGE(A) (1 << (8 * (A))) | ||||
| #define IPI_MESSAGE(A) (1uL << (8 * (A))) | ||||
| #endif | ||||
| 
 | ||||
| irqreturn_t smp_ipi_demux(void) | ||||
| { | ||||
| 	struct cpu_messages *info = this_cpu_ptr(&ipi_message); | ||||
| 	unsigned int all; | ||||
| 	unsigned long all; | ||||
| 
 | ||||
| 	mb();	/* order any irq clear */ | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user