res = &pdev->resource[0];
vinst->hvwc_bar_start = res->start;
res = &pdev->resource[1];
vinst->uwc_bar_start = res->start;
res = &pdev->resource[2];
vinst->paste_base_addr = res->start;
res = &pdev->resource[3]; if (res->end > 62) {
pr_err("Bad 'paste_win_id_shift' in DT, %llx\n", res->end); goto free_vinst;
}
vinst->paste_win_id_shift = 63 - res->end;
hwirq = xive_native_alloc_irq_on_chip(chipid); if (!hwirq) {
pr_err("Inst%d: Unable to allocate global irq for chip %d\n",
vinst->vas_id, chipid); return -ENOENT;
}
vinst->virq = irq_create_mapping(NULL, hwirq); if (!vinst->virq) {
pr_err("Inst%d: Unable to map global irq %d\n",
vinst->vas_id, hwirq); return -EINVAL;
}
spin_lock_init(&vinst->fault_lock); /* * IRQ and fault handling setup is needed only for user space * send windows.
*/ if (vinst->virq) {
rc = vas_irq_fault_window_setup(vinst); /* * Fault window is used only for user space send windows. * So if vinst->virq is NULL, tx_win_open returns -ENODEV * for user space.
*/ if (rc)
vinst->virq = 0;
}
/* * Although this is read/used multiple times, it is written to only * during initialization.
*/ struct vas_instance *find_vas_instance(int vasid)
{ struct list_head *ent; struct vas_instance *vinst;
mutex_lock(&vas_mutex);
if (vasid == -1)
vasid = per_cpu(cpu_vas_id, smp_processor_id());
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.