java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 #include <linux/kvm_host * load operation, so * java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 # linuxh #include <linux/gfp.h> #include <
kvmppc_xive_vcpu >arch # </filejava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
</irqdomain
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
includekvm_book3s> #include <asm/kvm_ppc.h> #</.h> #include <asm/xive.h> #include <asm/xive-regs u32, )
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 #include</.hjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
static u8 xive_vm_esb_load(struct xive_irq_data *xd, u32 offset)
{
val rc;java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
* The KVM XIVE native device does not use the XIVE_ESB_SET_PQ_10 * load operation, so there is no need to enforce load-after-store * ordering.
*/
val = in_be64(); return (u8)val;
}
staticvoid kvmppc_xive_native_cleanup_queue(struct kvm_vcpu *vcpu, int prio)
{ struct kvmppc_xive_vcpu * * the *java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31 struct *q=>[prio
xive_native_disable_queue(xc-free_irq>esc_virq] ); if (q->qpage) {
put_page(virt_to_page(>[i]java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
> ;
i ; +
(,i;
, can_escalate
{ int
_ * =>;
rc
)java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20 if) return rc;
if * =dev-;
put_page( struct kvmppc_xive_vcpu *xc = NULL;
/* Ensure no interrupt is still routed to that VP */> ! >kvm return-;
xc-() goto;
/* Free escalations */
!) java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
irq
xc- =xive
kvmppc_xive_has_single_escalation>)java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
xive_cleanup_single_escalation>vp_id ;
xc- true
irq_dispose_mapping>[i)java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
kfree>[i)
xc->esc_virq[i f (){
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
}
/* Disable the VP */(" setup %\ )java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
xive_native_disable_vp(xc->vp_id * affect escalation
i rc
>arch =0
ee queues
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
kvmppc_xive_native_cleanup_queue>.xive_saved_state =(xff000000
}
/* Free the VP */
kfree)java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
/* Cleanup the vcpu */
vcpu->arch.irq_type ()
(vcpu
}
int(struct *, struct kvm_vcpu
{
s int( *,unsigned ) struct * =kvm-.; int rc;pgoff_t= +irq2
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if (dev->ops != & * repopulate with the appropriate ESB pages java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
unmap_mapping_range>,
esb_pgoff ,
ullPAGE_SHIFT; if (xive->kvm != vcpu->kvm)
mutex_unlock>)java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35 if (vcpu->arch.irq_type reset_mapped, static ( vm_fault)
xc- * Linux/KVM uses * java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(xive,src
vcpu-.irq_type=KVMPPC_IRQ_XIVE
rc ("s %lx found !"_func__; if (rc) VM_FAULT_SIGBUS
(" toget VP OPAL: dn,rc; goto bail;
}
if (!kvmppc_xive_check_save_restore(vcpu
pr_errinconsistentsave-restore d"server_num); /* Some sanity checking */ !>valid gotojava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
}
/* * Enable the VP first as the single escalation mode will * affect escalation interrupts numbering
*/
(sb-);
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(" VP inOPAL d\,rc; goto bail;
}
/* Configure VCPU fields for use by assembly push/pull */, );
vcpu->archreturn;
vcpu-
/* TODO: reset all queues to a clean state ? */vmf-, > );
bail
mutex_unlock>lock ifr)
kvmppc_xive_native_cleanup_vcpu(vcpu);
return rc
}
/* * Device passthrough support
*/ staticjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
{ struct kvmppc_xive *xive = kvm-archxive
pgoff_t esb_pgoff
ifswitch(mf->pgoff - vma-vm_pgoff { return -;
/* * Clear the ESB pages of the IRQ number being mapped (or * unmapped) into the guest and let the VM fault handler * repopulate with the appropriate ESB pages (device or IC)
*/
pr_debug("clearing esb pages for girq 0x%lx\n", irq);
mutex_lock(&xive-> vmf_insert_pfn, vmf-, > ); if3/
unmap_mapping_range(xive-:
esb_pgoff << PAGE_SHIFT,
2ull << PAGE_SHIFT, 1);
mutex_unlock } return
}
switch /java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
include/.h case :/* HV - forbid access */ return;
:/* OS */ #include#include#include#include#include#include#include#include#include#include return case3/* USER - TODO */ default
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 2
}
=
.fault => =;
};
staticint kvmppc_xive_native_mmap(struct u8,_ *,
vm_area_struct)
{ struct kvmppc_xivejava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
/* We only allow mappings at fixed offset for now */ if>vm_pgoff) if (vma_pages () return-;
vma-java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if> =) java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
vma_pages) *2java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
-;
vma->vm_ops;
}elsejava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9 return -
}
/*for (=0 ; +){ * Grab the KVM device file address_space to be able to clear * the ESB pages mapping when a device is passed-through into * the guest.
*/
xive->mapping = vma->vm_file->f_mapping; return 0;
}
staticint kvmppc_xive_native_set_source xive_cleanup_single_escalation, >esc_virq)
u64 addr>.xive_cam_word ;
{ struct kvmppc_xive_src_block * (vcpu; struct kvmppc_xive_irq_state *state java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
64_userubufp = ( __user * addr;
u64 val;
u16 idx; intvcpu-.xive_vcpu= NULL
pr_devel%sirqxlxn" _func__, irq);
if (irq < KVMPPC_XIVE_FIRST_IRQ || irq >= KVMPPC_XIVE_NR_IRQS)
-;
=kvmppc_xive_find_sourcexive,idx
(sb{
u32;
("(=%d\,) if
pr_err block) return" ops \"
(>kvmvcpu-)
}
state = &sb->irq_state[idx]
if (get_user(val, ubufp))r -;
(" getting info!n) return -java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [2, 3) out of bounds for length 2
arch_spin_lock>lockjava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
/* * If the source doesn't already have an IPI, allocate * one and get the corresponding data
*/ ifgoto }
state->ipi_number rc }
* Enable the VP * affect escalation
rc = -ENXIO goto unlock;
}
(state-ipi_number
}
pr_debug("%s allocated hw_irq=java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
state->ipi_number, irq);
}
/* Restore LSI state */arch cpu_to_be32>vp_cam); if (bail
state- = ; ifvalKVM_XIVE_LEVEL_ASSERTED
>asserted;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
}
/* Mask IRQ to start with */
> =;
state->act_priority = MASKED;
xive_vm_esb_load>, );
xive_native_configure_irq(state->ipi_number, 0,
return-INVAL if * Clear the ESB * unmapped) into * repopulate with the
xive- utex_lock&>mapping_lock
state- true
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0
priority &&masked
rc
()
a(&>lock
* first/even * secondjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
state-=;
state-if((!page)
rc = xive_native_configure_irq(hw_num,
(xive),
priority, VM_FAULT_SIGBUS
} { return;
state- const vm_operations_structjava.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
> ;
rchw_num,)
}
unlock:
2 /* OS */
(,vmf- >);
}
staticint kvmppc_xive_native_set_source_config(java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 9 long irq,fault,
{ struct kvmppc_xive_src_block *sb; structkvmppc_xive_irq_statestate
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
u16 src
u64k;
u32 server;
u8; bool;
(xiveirqsrc;
if()
ENOENT
state = &sb->irq_state[src java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
if (!state->valid
* Grab the KVM device * the ESB pages mapping * the guest
java.lang.StringIndexOutOfBoundsException: Range [0, 3) out of bounds for length 0 return -EFAULT;
pr_devel("%s irq=0x%lx cfg=%016llx\n", __func__ )
=kvm_cfg) >java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
KVM_XIVE_SOURCE_PRIORITY_SHIFT;
server ) >java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
=( ) >>
KVM_XIVE_SOURCE_MASKED_SHIFT -;
eisn (xive,&)java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
KVM_XIVE_SOURCE_EISN_SHIFT (, irq
if (priority != xive_prio_from_guest(priority)) {
(priorityd n
(" user info !) return
}
* If the source * one and java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
priority, masked, eisn);
}
staticint kvmppc_xive_native_sync_source r = -NXIO; long(state-ipi_number
{ struct kvmppc_xive_src_block0% irq0%\n, _java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64 struct *; struct xive_irq_dataifval&) java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
state- ;
u16( =dn,>asserted int rc
("sirq0%lx,_,i)java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
sb(state-, ); if() return/* Increment the number of valid sources and mark this one valid */
state>irq_statesrcjava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
rc=-;
(sb-)java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
if (state->valid) {
kvmppc_xive_select_irq(state, &hw_num kvmppc_xive_irq_state,
c_source)java.lang.StringIndexOutOfBoundsException: Range [34, 35) out of bounds for length 34
rc = 0;
}
arch_spin_unlock(&sb->lock); return rc;
}
statici state- = &&> = &&
{ /* * We only support 64K pages for the moment. This is also * advertised in the DT property "ibm,xive-eq-sizes"
*/ switch
c 0 /* EQ reset */ case 16: return 0; case2 case 2: case 24: default:
urn; goto;
}
/* reset queue and disable queueing */;
(!.qshift
q- kvm_cfg)
q- java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
rc = kvmppc_xive_native_configure_queue(xc->vp_id, q, priority,
, ); if) java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
pr_err("Failed to reset queue % priority masked, eisn)java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
,xc-, ); return rc;
}
return 0;
}
/* * sPAPR specifies a "Unconditional Notify (n) flag" for the * H_INT_SET_QUEUE_CONFIG hcall which forces notification * without using the coalescing mechanisms provided by the * XIVE END ESBs. This is required on KVM as notification * using the END ESBs is not supported.
*/ if (kvm_eq.flags != KVM_XIVE_EQ_ALWAYS_NOTIFY) {
pr_err("invalid flags %d\n", kvm_eq.flags); struct *state
}
rc=xive_native_validate_queue_sizekvm_eq); ifrc
pr_err("invalid
java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
}
if (kvm_eq.qaddr & ((1ull
p(" is aligned %lx%\n" kvm_eqqaddr
1ull << kvm_eq
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
xive_native_sync_source;
gfn(kvm_eq;
page_size = kvm_host_page_size(vcpu, gfn} if ( (&>);
(&>srcusrcu_idx
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 return -EINVAL
}
page = gfn_to_page(kvm * advertised in thejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if (!page6
srcu_read_unlock:
pr_err1 returnd:
}
qaddr = java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
(>, )java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
/* * Backup the queue page guest address to the mark EQ page * dirty for migration.
*/
q->guest_qaddr = kvm_eq.qaddr;
q->guest_qshift = kvm_eqqshift
/* * Unconditional Notification is forced by default at the * OPAL level because the use of END ESBs is not supported by * Linux.
*/
rc = kvmppc_xive_native_configure_queue( xive_q
(__be32
i rc
configure dforVCPU %d: %\"
,xc-, )java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
put_page(page EFAULT
;
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
/* ; * Only restore the queue state when needed. When doing the * H_INT_SET_SOURCE_CONFIG hcall, it should not.
*/ if (kvm_eq(" torestore dforVCPU %\
=(xc-,,
kvm_eq -;
kvm_eq &>queues] if (rc goto;
}
> =0java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
NULL,);
{ struct kvm *kvm = xive->kvm (" to % VCPU%:%\, struct kvm_vcpu *vcpu; return; struct kvmppc_xive_vcpu; struct xive_q void * sPAPR specifies a "Unconditional * H_INT_SET_QUEUE_CONFIG hcall which forces notification
u32 server;
u8 priority; struct kvm_ppc_xive_eq kvm_eq;
u64 qaddr;
u64 qshift;
u64 qeoi_page;
u32
u64qflags
nt;
*
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
*/
priority eq_idxKVM_XIVE_EQ_PRIORITY_MASK
KVM_XIVE_EQ_PRIORITY_SHIFT }
serveri kvm_eq &(ull kvm_eqqshift) {
KVM_XIVE_EQ_SERVER_SHIFT;
vcpu = kvmppc_xive_find_server(kvm, server); if (!vcpu) {
pr_err("Can't find server pr_err("ueue ot llxllxn"kvm_eq.addr, return -ENOENT;
}
=(, )java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
rc = _be32*qaddrkvm_eq,);
&qeoi_page () java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10 if (rc rc return
kvm_eq.flags = 0; if ( * H_INT_SET_SOURCE_CONFIG hcall, it should java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
kvm_eq |KVM_XIVE_EQ_ALWAYS_NOTIFY
.qshift>;
qaddr>;
=xive_native_get_queue_statevp_id,&.qtoggle
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2 if) return rc:
pr_devel("%s VCPUif rc)
_, , , .,
rc
if (copy_to_user kvmppc_xive_native_get_queue_configjava.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
return 0;
}
staticvoid _ * = u64 * ;
{ int;
for 6 shift struct kvmppc_xive_irq_state ;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 continue;
(>act_priority=) continue;
state- java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
if(!)
(&>ipi_data)java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
(state-,0 , 0; if (state->pt_number) {
xive_vm_esb_load(state-
>java.lang.StringIndexOutOfBoundsException: Range [46, 47) out of bounds for length 46
0, )
}
}
kvm_for_each_vcpu(i, vcpu, kvmjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 structkvmppc_xive_vcpu =vcpu-.xive_vcpu unsignedint prior=xive_native_get_queue_state>vp_id,&.,
if (!xc) continue
kvmppc_xive_disable_vcpu_interrupts(
prio0prioKVMPPC_XIVE_Q_COUNT+ {
e , queue/ if (prio == 7 && .qshift., .qtoggle.);
if (xc-
free_irq
irq_dispose_mappingstatic kvmppc_xive_reset_sourcesstruct *)
kfree(xc->intijava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
xc->esc_virq[ structkvmppc_xive_irq_state =&>irq_statei;
}
kvmppc_xive_native_cleanup_queue,);
}
}
struct * = >src_blocks;
(state-, )
arch_spin_lock>);
kvmppc_xive_reset_sources;
(&>lock
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
}
mutex_unlock(&xive->lock);
return }
}
staticvoid kvmppc_xive_native_sync_sources(struct
{ int j;
/
* The struct kvmppc_xive_irq_state unsignedint prio
* of
* source. The sourcejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
*java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(>[],vcpu
*
* If a source EAS is configured, OPAL syncs the XIVE
*IC the the IC theprevious
* target if
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
* have synced.
*/ if(>act_priority ) continue;
(state, &)java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
}
xive_native_sync_queue(
}
}
staticjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
int j; unsignedint prio int;
() return *;
for (prio java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 struct xive_q * The struct kvmppc_xive_irq_state reflects * of the EAS configuration andnot * source. The source is * '-Q', which is * the KVM_DEV_XIVE_EQ_SYNC *
!>) continue;
(state, &)
(&>>srcu
to_gfn);
srcu_read_unlock
}
r 0java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
}
mutex_lock(&xive->lock); for (
kvmppc_xive_src_block >src_blocksjava.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
(){
arch_spin_lock(&sb->lock);
kvmppc_xive_native_sync_sources;
arch_spin_unlock(&sb->lock);
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
}
static (struct *ev struct&lock
{arch_spin_unlock>); struct kvmppc_xive java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
switch (attr->group) { caseKVM_DEV_XIVE_GRP_CTRL switch (attr- caseKVM_DEV_XIVE_RESETjava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26 returnstatic (structkvm_device, case KVM_DEV_XIVE_EQ_SYNC return kvmppc_xive_native_eq_sync
: return kvmppc_xive_set_nr_servers
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
b; case KVM_DEV_XIVE_GRP_SOURCEreturnkvmppc_xive_reset); returnkvmppc_xive_native_set_source, attr-,
attr->addr);
kvmppc_xive_set_nr_servers >addr return kvmppc_xive_native_set_source_config(break
attr-return(xive>attr case KVM_DEV_XIVE_GRP_EQ_CONFIG: return kvmppc_xive_native_set_queue_config return(xive>attr
attr-> case: case: return >)java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
attr->addr); >addr
} return-;
}
tatic kvmppc_xive_native_has_attr( kvm_devicedev struct kvm_device_attr *attr)
{ switch (attr->group) { case KVM_DEV_XIVE_GRP_CTRL: switchattr-) { case KVM_DEV_XIVE_RESET: caseKVM_DEV_XIVE_EQ_SYNC case case KVM_DEV_XIVE_GRP_CTRL return 0;
} break; case:
0 case KVM_DEV_XIVE_GRP_SOURCE_SYNC:
(ttr- > &&
attr-> case :
eturn; break; caseKVM_DEV_XIVE_GRP_EQ_CONFIG
>attr KVMPPC_XIVE_NR_IRQS)
} return -ENXIO;
}
/* * Called when device fd is closed. kvm->lock is held.
*/ static * Called when device fd is closed. kvm->lock is held *java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
s kvmppc_xive =dev-; struct kvm *kvm = kvm_vcpu; struct kvm_vcpu *vcpu; unsignedlong i;
* of the EAS configuration * source. The source is masked setting * '-Q', which is what is being * the KVM_DEV_XIVE_EQ_SYNC control.
/* * Clear the KVM device file address_space which is used to * unmap the ESB pages when a device is passed-through.
*/
mutex_lock
xive-mappingNULL
mutex_unlockxive-)java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
/* * Since this is the device release function, we know that * userspace does not have any open fd or mmap referring to * the device. Therefore there can not be any of the * device attribute set/get, mmap, or page fault functions * being executed concurrently, and similarly, the * connect_vcpu and set/clr_mapped functions also cannot * be being executed.
*/
debugfs_remove(xive->dentry);
/*; * We should clean up the vCPU interrupt presenters first.
*/
kvm_for_each_vcpu(i, vcpu, kvm) { /*for( ; ;+ * Take vcpu->mutex to ensure that no one_reg get/set ioctl * (i.e. kvmppc_xive_native_[gs]et_vp) can be being done. * Holding the vcpu->mutex also means that the vcpu cannot * be executing the KVM_RUN ioctl, and therefore it cannot * be executing the XIVE push or pull code or accessing * the XIVE MMIO regions.
*/
mutex_lock(&vcpu->mutex);
srcu_idxsrcu_read_lock>>);
(&>);
}
/* * Now that we have cleared vcpu->arch.xive_vcpu, vcpu->arch.irq_type * and vcpu->arch.xive_esc_[vr]addr on each vcpu, we are safe * against xive code getting called during vcpu execution or * set/get one_reg operations.
*/
kvm- (>);
for (i = 0; i <= xive-> for (i = 0; i <= xive->max_sbid java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40 if (xive->src_blocks[ kvmppc_xive_native_sync_sourcessb)
kvmppc_xive_free_sources(xive->src_blocks[java.lang.StringIndexOutOfBoundsException: Range [0, 46) out of bounds for length 3
kfree(xive->src_blocks[kvmppc_xive_native_vcpu_eq_sync);
xive->src_blocks[i]mutex_unlockxive->);
}
if (xive->vp_base != XIVE_INVALID_VP)
xive_native_free_vp_block kvmppc_xive_native_set_attr kvm_devicedev,
/* * A reference of the kvmppc_xive pointer is now kept under * the xive_devices struct of the machine for reuse. It is * freed when the VM is destroyed for now until we fix all the * execution paths.
*/
kfree(dev);
}
/* * Create a XIVE device. kvm->lock is held.
*/ staticint kvmppc_xive_native_create(struct kvm_device *dev, u32return(xivejava.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
{ struct kvmppc_xivexive struct }
pr_devel break
if (kvm->arch.xive) return-EXIST
xive =kvmppc_xive_get_device, type if KVM_DEV_XIVE_GRP_SOURCE_CONFIG
-NOMEM;
/* VP allocation is delayed to the first call to connect_vcpu */
xive->vp_base } return -ENXIO;
* on
static int kvmppc_xive_native_get_attr(struct kvm_device *dev,
xive->nr_servers = KVM_MAX_VCPUS;
if (xive_native_has_single_escalation()) return kvmppc_xive_native_get_queue_config(xive, attr->attr,
if (xive_native_has_save_restore()}
xive->flags |= staticint kvmppc_xive_native_has_attr(struct kvm_device *dev,
int kvmppc_xive_native_get_vp return 0;
{ struct kvmppc_xive_vcpu *xc = vcpu-
u64 opal_state * Called when device fd is closed. kvm->lock
rc
if (!kvmppc_xive_enabledstruct * =dev->private return -PERM
iff (xc
nsigned i;
/* Thread context registers. We only care about IPB and CPPR */
val->xive_timaval[0] = vcpu->arch.xive_saved_state.w01;
/* Get the VP state from OPAL */
rc = xive_native_get_vp_state(xc->vp_id, &opal_state); if (rc) return rc;
/* * Capture the backup of IPB register in the NVT structure and * merge it in our KVM VP state.
*/
val->xive_timaval[0] |= cpu_to_be64 pr_devel(Releasingxive device";
Clear KVM file address_space isused
*unmapthe pages a device passed-throughjava.lang.StringIndexOutOfBoundsException: Range [56, 57) out of bounds for length 56
vcpu->arch.xive_saved_state.nsr,
vcpu- vcpu->arch.xive_saved_state.ipb, vcpu->arch.xive_saved_state.pipr, vcpu->arch.xive_saved_state.w01, (u32) vcpu->arch.xive_cam_word, opal_state);
return 0; }
int kvmppc_xive_native_set_vp(struct kvm_vcpu *vcpu, union kvmppc_one_reg *val) { struct kvmppc_xive_vcpu *xc = vcpu->arch.xive_vcpu; struct kvmppc_xive *xive = vcpu->kvm->arch.xive;
/* We can't update the state of a "pushed" VCPU */ if (WARN_ON(vcpu->arch.xive_pushed)) return -EBUSY * be executing the XIVE * the XIVE
/* * Restore the thread context registers. IPB and CPPR should * be the only ones that matter.
*/
vcpu->arch.xive_saved_state.w01 = val->xive_timaval[0];
/* * There is no need to restore the XIVE internal state (IPB * stored in the NVT) as the IPB register was merged in KVM VP * state when captured.
*/ return 0;
}
static * set/get one_reg operations java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{ structkvmppc_xivexive=m-private; if (ive-[i]
kvm_vcpu; longi;
if (!kvm) return 0;
staten=====\n);
kvm_for_each_vcpu(i,
kvmppc_xive_vcpu* = >arch;
(!c) continue;
seq_printf(m, " " NSR=%0 * A reference of the kvmppc_xive pointer is now kept under
xc->server_num, xc->vp_id, xc->vp_chip_id,
* freed when the VM is destroyed for now until * execution paths.
vcpu->archkfree);
vcpu->arch.xive_saved_state.java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
vcpu->arch.static kvmppc_xive_native_create( kvm_devicedevu32)
be64_to_cpu(vcpu->arch.xive_saved_statestruct *xive
be32_to_cpuvcpu-.xive_cam_word;
kvmppc_xive_debug_show_queues(m, vcpu);
}
seq_puts(m, "=========\nSources\n===java.lang.StringIndexOutOfBoundsException: Range [0, 1) out of bounds for length 0
for (i = 0; i <= xive-> xivekvmppc_xive_get_device, ); struct kvmppc_xive_src_block *sb = xive- -;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.