mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc-merge
Fix up delete/modify conflict of arch/ppc/kernel/process.c by hand (it's gone, gone, gone). Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
commit
45bfe98bd7
55 files changed
+298
-1155
No files matched your search
@@ -11,7 +11,8 @@ CFLAGS_btext.o += -fPIC
|
||||
endif
|
||||
|
||||
obj-y := semaphore.o cputable.o ptrace.o syscalls.o \
|
||||
irq.o align.o signal_32.o pmc.o vdso.o
|
||||
irq.o align.o signal_32.o pmc.o vdso.o \
|
||||
init_task.o process.o
|
||||
obj-y += vdso32/
|
||||
obj-$(CONFIG_PPC64) += setup_64.o binfmt_elf32.o sys_ppc32.o \
|
||||
signal_64.o ptrace32.o systbl.o \
|
||||
@@ -44,8 +45,7 @@ extra-$(CONFIG_FSL_BOOKE) := head_fsl_booke.o
|
||||
extra-$(CONFIG_8xx) := head_8xx.o
|
||||
extra-y += vmlinux.lds
|
||||
|
||||
obj-y += process.o init_task.o time.o \
|
||||
prom.o traps.o setup-common.o udbg.o
|
||||
obj-y += time.o prom.o traps.o setup-common.o udbg.o
|
||||
obj-$(CONFIG_PPC32) += entry_32.o setup_32.o misc_32.o systbl.o
|
||||
obj-$(CONFIG_PPC64) += misc_64.o dma_64.o iommu.o
|
||||
obj-$(CONFIG_PPC_MULTIPLATFORM) += prom_init.o
|
||||
|
||||
@@ -53,6 +53,7 @@ EXPORT_SYMBOL(io_page_mask);
|
||||
#ifdef CONFIG_PPC_MULTIPLATFORM
|
||||
static void fixup_resource(struct resource *res, struct pci_dev *dev);
|
||||
static void do_bus_setup(struct pci_bus *bus);
|
||||
static void phbs_remap_io(void);
|
||||
#endif
|
||||
|
||||
/* pci_io_base -- the base address from which io bars are offsets.
|
||||
@@ -251,6 +252,7 @@ void pcibios_free_controller(struct pci_controller *phb)
|
||||
kfree(phb);
|
||||
}
|
||||
|
||||
#ifndef CONFIG_PPC_ISERIES
|
||||
void __devinit pcibios_claim_one_bus(struct pci_bus *b)
|
||||
{
|
||||
struct pci_dev *dev;
|
||||
@@ -275,7 +277,6 @@ void __devinit pcibios_claim_one_bus(struct pci_bus *b)
|
||||
EXPORT_SYMBOL_GPL(pcibios_claim_one_bus);
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_PPC_ISERIES
|
||||
static void __init pcibios_claim_of_setup(void)
|
||||
{
|
||||
struct pci_bus *b;
|
||||
@@ -1218,7 +1219,7 @@ int remap_bus_range(struct pci_bus *bus)
|
||||
}
|
||||
EXPORT_SYMBOL(remap_bus_range);
|
||||
|
||||
void phbs_remap_io(void)
|
||||
static void phbs_remap_io(void)
|
||||
{
|
||||
struct pci_controller *hose, *tmp;
|
||||
|
||||
|
||||
@@ -201,13 +201,13 @@ int dump_spe(struct pt_regs *regs, elf_vrregset_t *evrregs)
|
||||
}
|
||||
#endif /* CONFIG_SPE */
|
||||
|
||||
#ifndef CONFIG_SMP
|
||||
/*
|
||||
* If we are doing lazy switching of CPU state (FP, altivec or SPE),
|
||||
* and the current task has some state, discard it.
|
||||
*/
|
||||
static inline void discard_lazy_cpu_state(void)
|
||||
void discard_lazy_cpu_state(void)
|
||||
{
|
||||
#ifndef CONFIG_SMP
|
||||
preempt_disable();
|
||||
if (last_task_used_math == current)
|
||||
last_task_used_math = NULL;
|
||||
@@ -220,9 +220,10 @@ static inline void discard_lazy_cpu_state(void)
|
||||
last_task_used_spe = NULL;
|
||||
#endif
|
||||
preempt_enable();
|
||||
#endif /* CONFIG_SMP */
|
||||
}
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
#ifdef CONFIG_PPC_MERGE /* XXX for now */
|
||||
int set_dabr(unsigned long dabr)
|
||||
{
|
||||
if (ppc_md.set_dabr)
|
||||
@@ -231,6 +232,7 @@ int set_dabr(unsigned long dabr)
|
||||
mtspr(SPRN_DABR, dabr);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
DEFINE_PER_CPU(struct cpu_usage, cpu_usage_array);
|
||||
|
||||
@@ -1100,17 +1100,37 @@ static int __init early_init_dt_scan_memory(unsigned long node,
|
||||
|
||||
static void __init early_reserve_mem(void)
|
||||
{
|
||||
unsigned long base, size;
|
||||
unsigned long *reserve_map;
|
||||
u64 base, size;
|
||||
u64 *reserve_map;
|
||||
|
||||
reserve_map = (unsigned long *)(((unsigned long)initial_boot_params) +
|
||||
reserve_map = (u64 *)(((unsigned long)initial_boot_params) +
|
||||
initial_boot_params->off_mem_rsvmap);
|
||||
#ifdef CONFIG_PPC32
|
||||
/*
|
||||
* Handle the case where we might be booting from an old kexec
|
||||
* image that setup the mem_rsvmap as pairs of 32-bit values
|
||||
*/
|
||||
if (*reserve_map > 0xffffffffull) {
|
||||
u32 base_32, size_32;
|
||||
u32 *reserve_map_32 = (u32 *)reserve_map;
|
||||
|
||||
while (1) {
|
||||
base_32 = *(reserve_map_32++);
|
||||
size_32 = *(reserve_map_32++);
|
||||
if (size_32 == 0)
|
||||
break;
|
||||
DBG("reserving: %lx -> %lx\n", base_32, size_32);
|
||||
lmb_reserve(base_32, size_32);
|
||||
}
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
while (1) {
|
||||
base = *(reserve_map++);
|
||||
size = *(reserve_map++);
|
||||
if (size == 0)
|
||||
break;
|
||||
DBG("reserving: %lx -> %lx\n", base, size);
|
||||
DBG("reserving: %llx -> %llx\n", base, size);
|
||||
lmb_reserve(base, size);
|
||||
}
|
||||
|
||||
|
||||
@@ -137,8 +137,8 @@ struct prom_t {
|
||||
};
|
||||
|
||||
struct mem_map_entry {
|
||||
unsigned long base;
|
||||
unsigned long size;
|
||||
u64 base;
|
||||
u64 size;
|
||||
};
|
||||
|
||||
typedef u32 cell_t;
|
||||
@@ -897,9 +897,9 @@ static unsigned long __init prom_next_cell(int s, cell_t **cellp)
|
||||
* If problems seem to show up, it would be a good start to track
|
||||
* them down.
|
||||
*/
|
||||
static void reserve_mem(unsigned long base, unsigned long size)
|
||||
static void reserve_mem(u64 base, u64 size)
|
||||
{
|
||||
unsigned long top = base + size;
|
||||
u64 top = base + size;
|
||||
unsigned long cnt = RELOC(mem_reserve_cnt);
|
||||
|
||||
if (size == 0)
|
||||
|
||||
@@ -497,6 +497,15 @@ static long restore_user_regs(struct pt_regs *regs,
|
||||
if (err)
|
||||
return 1;
|
||||
|
||||
/*
|
||||
* Do this before updating the thread state in
|
||||
* current->thread.fpr/vr/evr. That way, if we get preempted
|
||||
* and another task grabs the FPU/Altivec/SPE, it won't be
|
||||
* tempted to save the current CPU state into the thread_struct
|
||||
* and corrupt what we are writing there.
|
||||
*/
|
||||
discard_lazy_cpu_state();
|
||||
|
||||
/* force the process to reload the FP registers from
|
||||
current->thread when it next does FP instructions */
|
||||
regs->msr &= ~(MSR_FP | MSR_FE0 | MSR_FE1);
|
||||
@@ -538,18 +547,6 @@ static long restore_user_regs(struct pt_regs *regs,
|
||||
return 1;
|
||||
#endif /* CONFIG_SPE */
|
||||
|
||||
#ifndef CONFIG_SMP
|
||||
preempt_disable();
|
||||
if (last_task_used_math == current)
|
||||
last_task_used_math = NULL;
|
||||
if (last_task_used_altivec == current)
|
||||
last_task_used_altivec = NULL;
|
||||
#ifdef CONFIG_SPE
|
||||
if (last_task_used_spe == current)
|
||||
last_task_used_spe = NULL;
|
||||
#endif
|
||||
preempt_enable();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -207,10 +207,20 @@ static long restore_sigcontext(struct pt_regs *regs, sigset_t *set, int sig,
|
||||
|
||||
if (!sig)
|
||||
regs->gpr[13] = save_r13;
|
||||
err |= __copy_from_user(¤t->thread.fpr, &sc->fp_regs, FP_REGS_SIZE);
|
||||
if (set != NULL)
|
||||
err |= __get_user(set->sig[0], &sc->oldmask);
|
||||
|
||||
/*
|
||||
* Do this before updating the thread state in
|
||||
* current->thread.fpr/vr. That way, if we get preempted
|
||||
* and another task grabs the FPU/Altivec, it won't be
|
||||
* tempted to save the current CPU state into the thread_struct
|
||||
* and corrupt what we are writing there.
|
||||
*/
|
||||
discard_lazy_cpu_state();
|
||||
|
||||
err |= __copy_from_user(¤t->thread.fpr, &sc->fp_regs, FP_REGS_SIZE);
|
||||
|
||||
#ifdef CONFIG_ALTIVEC
|
||||
err |= __get_user(v_regs, &sc->v_regs);
|
||||
err |= __get_user(msr, &sc->gp_regs[PT_MSR]);
|
||||
@@ -229,14 +239,6 @@ static long restore_sigcontext(struct pt_regs *regs, sigset_t *set, int sig,
|
||||
current->thread.vrsave = 0;
|
||||
#endif /* CONFIG_ALTIVEC */
|
||||
|
||||
#ifndef CONFIG_SMP
|
||||
preempt_disable();
|
||||
if (last_task_used_math == current)
|
||||
last_task_used_math = NULL;
|
||||
if (last_task_used_altivec == current)
|
||||
last_task_used_altivec = NULL;
|
||||
preempt_enable();
|
||||
#endif
|
||||
/* Force reload of FP/VEC */
|
||||
regs->msr &= ~(MSR_FP | MSR_FE0 | MSR_FE1 | MSR_VEC);
|
||||
|
||||
|
||||
@@ -142,7 +142,7 @@ static void cbe_idle(void)
|
||||
}
|
||||
}
|
||||
|
||||
int cbe_system_reset_exception(struct pt_regs *regs)
|
||||
static int cbe_system_reset_exception(struct pt_regs *regs)
|
||||
{
|
||||
switch (regs->msr & SRR1_WAKEMASK) {
|
||||
case SRR1_WAKEEE:
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
#define DBG(fmt...)
|
||||
#endif
|
||||
|
||||
void cell_show_cpuinfo(struct seq_file *m)
|
||||
static void cell_show_cpuinfo(struct seq_file *m)
|
||||
{
|
||||
struct device_node *root;
|
||||
const char *model = "";
|
||||
|
||||
@@ -29,7 +29,9 @@
|
||||
* value of the spu_status register after the SPU has stopped.
|
||||
*
|
||||
*/
|
||||
long do_spu_run(struct file *filp, __u32 __user *unpc, __u32 __user *ustatus)
|
||||
static long do_spu_run(struct file *filp,
|
||||
__u32 __user *unpc,
|
||||
__u32 __user *ustatus)
|
||||
{
|
||||
long ret;
|
||||
struct spufs_inode_info *i;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
EXTRA_CFLAGS += -mno-minimal-toc
|
||||
|
||||
obj-y += hvlog.o hvlpconfig.o lpardata.o setup.o mf.o lpevents.o \
|
||||
hvcall.o proc.o htab.o iommu.o misc.o
|
||||
obj-$(CONFIG_PCI) += pci.o irq.o vpdinfo.o
|
||||
hvcall.o proc.o htab.o iommu.o misc.o irq.o
|
||||
obj-$(CONFIG_PCI) += pci.o vpdinfo.o
|
||||
obj-$(CONFIG_IBMVIO) += vio.o
|
||||
obj-$(CONFIG_SMP) += smp.o
|
||||
obj-$(CONFIG_VIOPATH) += viopath.o
|
||||
|
||||
@@ -34,6 +34,8 @@
|
||||
#include <asm/pci-bridge.h>
|
||||
#include <asm/iseries/hv_call_xm.h>
|
||||
|
||||
#include "iommu.h"
|
||||
|
||||
extern struct list_head iSeries_Global_Device_List;
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
#ifndef _PLATFORMS_ISERIES_IOMMU_H
|
||||
#define _PLATFORMS_ISERIES_IOMMU_H
|
||||
|
||||
/*
|
||||
* Copyright (C) 2005 Stephen Rothwell, IBM Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the:
|
||||
* Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
struct device_node;
|
||||
struct iommu_table;
|
||||
|
||||
/* Creates table for an individual device node */
|
||||
extern void iommu_devnode_init_iSeries(struct device_node *dn);
|
||||
|
||||
/* Get table parameters from HV */
|
||||
extern void iommu_table_getparms_iSeries(unsigned long busno,
|
||||
unsigned char slotno, unsigned char virtbus,
|
||||
struct iommu_table *tbl);
|
||||
|
||||
#endif /* _PLATFORMS_ISERIES_IOMMU_H */
|
||||
@@ -48,6 +48,8 @@
|
||||
extern void iSeries_smp_message_recv(struct pt_regs *);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
|
||||
enum pci_event_type {
|
||||
pe_bus_created = 0, /* PHB has been created */
|
||||
pe_bus_error = 1, /* PHB has failed */
|
||||
@@ -147,20 +149,11 @@ static void int_received(struct pci_event *event, struct pt_regs *regs)
|
||||
static void pci_event_handler(struct HvLpEvent *event, struct pt_regs *regs)
|
||||
{
|
||||
if (event && (event->xType == HvLpEvent_Type_PciIo)) {
|
||||
switch (event->xFlags.xFunction) {
|
||||
case HvLpEvent_Function_Int:
|
||||
if (hvlpevent_is_int(event))
|
||||
int_received((struct pci_event *)event, regs);
|
||||
break;
|
||||
case HvLpEvent_Function_Ack:
|
||||
else
|
||||
printk(KERN_ERR
|
||||
"pci_event_handler: unexpected ack received\n");
|
||||
break;
|
||||
default:
|
||||
printk(KERN_ERR
|
||||
"pci_event_handler: unexpected event function %d\n",
|
||||
(int)event->xFlags.xFunction);
|
||||
break;
|
||||
}
|
||||
} else if (event)
|
||||
printk(KERN_ERR
|
||||
"pci_event_handler: Unrecognized PCI event type 0x%x\n",
|
||||
@@ -334,6 +327,8 @@ int __init iSeries_allocate_IRQ(HvBusNumber bus,
|
||||
return virtirq;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_PCI */
|
||||
|
||||
/*
|
||||
* Get the next pending IRQ.
|
||||
*/
|
||||
@@ -353,6 +348,7 @@ int iSeries_get_irq(struct pt_regs *regs)
|
||||
if (hvlpevent_is_pending())
|
||||
process_hvlpevents(regs);
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
if (num_pending_irqs) {
|
||||
spin_lock(&pending_irqs_lock);
|
||||
for (irq = 0; irq < NR_IRQS; irq++) {
|
||||
@@ -366,6 +362,7 @@ int iSeries_get_irq(struct pt_regs *regs)
|
||||
if (irq >= NR_IRQS)
|
||||
irq = -2;
|
||||
}
|
||||
#endif
|
||||
|
||||
return irq;
|
||||
}
|
||||
@@ -93,10 +93,7 @@ struct ItLpNaca itLpNaca = {
|
||||
.xPirEnvironMode = 0, /* Piranha stuff */
|
||||
.xPirConsoleMode = 0,
|
||||
.xPirDasdMode = 0,
|
||||
.xLparInstalled = 0,
|
||||
.xSysPartitioned = 0,
|
||||
.xHwSyncedTBs = 0,
|
||||
.xIntProcUtilHmt = 0,
|
||||
.flags = 0,
|
||||
.xSpVpdFormat = 0,
|
||||
.xIntProcRatio = 0,
|
||||
.xPlicVrmIndex = 0, /* VRM index of PLIC */
|
||||
|
||||
@@ -53,7 +53,7 @@ static struct HvLpEvent * get_next_hvlpevent(void)
|
||||
struct HvLpEvent * event;
|
||||
event = (struct HvLpEvent *)hvlpevent_queue.xSlicCurEventPtr;
|
||||
|
||||
if (event->xFlags.xValid) {
|
||||
if (hvlpevent_is_valid(event)) {
|
||||
/* rmb() needed only for weakly consistent machines (regatta) */
|
||||
rmb();
|
||||
/* Set pointer to next potential event */
|
||||
@@ -84,7 +84,7 @@ int hvlpevent_is_pending(void)
|
||||
|
||||
next_event = (struct HvLpEvent *)hvlpevent_queue.xSlicCurEventPtr;
|
||||
|
||||
return next_event->xFlags.xValid |
|
||||
return hvlpevent_is_valid(next_event) ||
|
||||
hvlpevent_queue.xPlicOverflowIntPending;
|
||||
}
|
||||
|
||||
@@ -101,18 +101,18 @@ static void hvlpevent_clear_valid(struct HvLpEvent * event)
|
||||
switch (extra) {
|
||||
case 3:
|
||||
tmp = (struct HvLpEvent*)((char*)event + 3 * LpEventAlign);
|
||||
tmp->xFlags.xValid = 0;
|
||||
hvlpevent_invalidate(tmp);
|
||||
case 2:
|
||||
tmp = (struct HvLpEvent*)((char*)event + 2 * LpEventAlign);
|
||||
tmp->xFlags.xValid = 0;
|
||||
hvlpevent_invalidate(tmp);
|
||||
case 1:
|
||||
tmp = (struct HvLpEvent*)((char*)event + 1 * LpEventAlign);
|
||||
tmp->xFlags.xValid = 0;
|
||||
hvlpevent_invalidate(tmp);
|
||||
}
|
||||
|
||||
mb();
|
||||
|
||||
event->xFlags.xValid = 0;
|
||||
hvlpevent_invalidate(event);
|
||||
}
|
||||
|
||||
void process_hvlpevents(struct pt_regs *regs)
|
||||
|
||||
@@ -251,10 +251,7 @@ static struct pending_event *new_pending_event(void)
|
||||
}
|
||||
memset(ev, 0, sizeof(struct pending_event));
|
||||
hev = &ev->event.hp_lp_event;
|
||||
hev->xFlags.xValid = 1;
|
||||
hev->xFlags.xAckType = HvLpEvent_AckType_ImmediateAck;
|
||||
hev->xFlags.xAckInd = HvLpEvent_AckInd_DoAck;
|
||||
hev->xFlags.xFunction = HvLpEvent_Function_Int;
|
||||
hev->flags = HV_LP_EVENT_VALID | HV_LP_EVENT_DO_ACK | HV_LP_EVENT_INT;
|
||||
hev->xType = HvLpEvent_Type_MachineFac;
|
||||
hev->xSourceLp = HvLpConfig_getLpIndex();
|
||||
hev->xTargetLp = primary_lp;
|
||||
@@ -518,17 +515,10 @@ static void handle_ack(struct io_mf_lp_event *event)
|
||||
static void hv_handler(struct HvLpEvent *event, struct pt_regs *regs)
|
||||
{
|
||||
if ((event != NULL) && (event->xType == HvLpEvent_Type_MachineFac)) {
|
||||
switch(event->xFlags.xFunction) {
|
||||
case HvLpEvent_Function_Ack:
|
||||
if (hvlpevent_is_ack(event))
|
||||
handle_ack((struct io_mf_lp_event *)event);
|
||||
break;
|
||||
case HvLpEvent_Function_Int:
|
||||
else
|
||||
handle_int((struct io_mf_lp_event *)event);
|
||||
break;
|
||||
default:
|
||||
printk(KERN_ERR "mf.c: non ack/int event received\n");
|
||||
break;
|
||||
}
|
||||
} else
|
||||
printk(KERN_ERR "mf.c: alien event received\n");
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
#include "irq.h"
|
||||
#include "pci.h"
|
||||
#include "call_pci.h"
|
||||
#include "iommu.h"
|
||||
|
||||
extern unsigned long io_page_mask;
|
||||
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
#include <asm/iseries/hv_lp_config.h>
|
||||
#include <asm/iseries/hv_call_xm.h>
|
||||
|
||||
#include "iommu.h"
|
||||
|
||||
struct device *iSeries_vio_dev = &vio_bus_device.dev;
|
||||
EXPORT_SYMBOL(iSeries_vio_dev);
|
||||
|
||||
|
||||
@@ -270,7 +270,7 @@ static void handleMonitorEvent(struct HvLpEvent *event)
|
||||
* First see if this is just a normal monitor message from the
|
||||
* other partition
|
||||
*/
|
||||
if (event->xFlags.xFunction == HvLpEvent_Function_Int) {
|
||||
if (hvlpevent_is_int(event)) {
|
||||
remoteLp = event->xSourceLp;
|
||||
if (!viopathStatus[remoteLp].isActive)
|
||||
sendMonMsg(remoteLp);
|
||||
@@ -331,13 +331,12 @@ static void handleConfig(struct HvLpEvent *event)
|
||||
{
|
||||
if (!event)
|
||||
return;
|
||||
if (event->xFlags.xFunction == HvLpEvent_Function_Int) {
|
||||
if (hvlpevent_is_int(event)) {
|
||||
printk(VIOPATH_KERN_WARN
|
||||
"unexpected config request from partition %d",
|
||||
event->xSourceLp);
|
||||
|
||||
if ((event->xFlags.xFunction == HvLpEvent_Function_Int) &&
|
||||
(event->xFlags.xAckInd == HvLpEvent_AckInd_DoAck)) {
|
||||
if (hvlpevent_need_ack(event)) {
|
||||
event->xRc = HvLpEvent_Rc_InvalidSubtype;
|
||||
HvCallEvent_ackLpEvent(event);
|
||||
}
|
||||
@@ -377,7 +376,7 @@ static void vio_handleEvent(struct HvLpEvent *event, struct pt_regs *regs)
|
||||
int subtype = (event->xSubtype & VIOMAJOR_SUBTYPE_MASK)
|
||||
>> VIOMAJOR_SUBTYPE_SHIFT;
|
||||
|
||||
if (event->xFlags.xFunction == HvLpEvent_Function_Int) {
|
||||
if (hvlpevent_is_int(event)) {
|
||||
remoteLp = event->xSourceLp;
|
||||
/*
|
||||
* The isActive is checked because if the hosting partition
|
||||
@@ -436,8 +435,7 @@ static void vio_handleEvent(struct HvLpEvent *event, struct pt_regs *regs)
|
||||
"unexpected virtual io event subtype %d from partition %d\n",
|
||||
event->xSubtype, remoteLp);
|
||||
/* No handler. Ack if necessary */
|
||||
if ((event->xFlags.xFunction == HvLpEvent_Function_Int) &&
|
||||
(event->xFlags.xAckInd == HvLpEvent_AckInd_DoAck)) {
|
||||
if (hvlpevent_is_int(event) && hvlpevent_need_ack(event)) {
|
||||
event->xRc = HvLpEvent_Rc_InvalidSubtype;
|
||||
HvCallEvent_ackLpEvent(event);
|
||||
}
|
||||
|
||||
Loaded 20 of 55 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user