Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/arm/pic Add support for setting and getting interru...
details: https://anonhg.NetBSD.org/src/rev/5117d4d94274
branches: trunk
changeset: 833856:5117d4d94274
user: jmcneill <jmcneill%NetBSD.org@localhost>
date: Sun Jul 15 16:03:24 2018 +0000
description:
Add support for setting and getting interrupt affinity.
diffstat:
sys/arch/arm/pic/pic.c | 28 ++++++++++++++++++++++++++--
sys/arch/arm/pic/picvar.h | 11 ++++++++++-
2 files changed, 36 insertions(+), 3 deletions(-)
diffs (92 lines):
diff -r b2e663bfc0e9 -r 5117d4d94274 sys/arch/arm/pic/pic.c
--- a/sys/arch/arm/pic/pic.c Sun Jul 15 13:34:43 2018 +0000
+++ b/sys/arch/arm/pic/pic.c Sun Jul 15 16:03:24 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: pic.c,v 1.43 2018/07/09 06:08:42 ryo Exp $ */
+/* $NetBSD: pic.c,v 1.44 2018/07/15 16:03:24 jmcneill Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -33,7 +33,7 @@
#include "opt_multiprocessor.h"
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pic.c,v 1.43 2018/07/09 06:08:42 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pic.c,v 1.44 2018/07/15 16:03:24 jmcneill Exp $");
#include <sys/param.h>
#include <sys/atomic.h>
@@ -44,6 +44,7 @@
#include <sys/kmem.h>
#include <sys/mutex.h>
#include <sys/once.h>
+#include <sys/interrupt.h>
#include <sys/xcall.h>
#include <sys/ipi.h>
@@ -881,3 +882,26 @@
pic_disestablish_source(is);
}
+
+#ifdef MULTIPROCESSOR
+int
+interrupt_distribute(void *ih, const kcpuset_t *newset, kcpuset_t *oldset)
+{
+ struct intrsource * const is = ih;
+ struct pic_softc * const pic = is->is_pic;
+
+ if (pic == NULL)
+ return EOPNOTSUPP;
+ if (pic->pic_ops->pic_set_affinity == NULL ||
+ pic->pic_ops->pic_get_affinity == NULL)
+ return EOPNOTSUPP;
+
+ if (!is->is_mpsafe)
+ return EINVAL;
+
+ if (oldset != NULL)
+ pic->pic_ops->pic_get_affinity(pic, is->is_irq, oldset);
+
+ return pic->pic_ops->pic_set_affinity(pic, is->is_irq, newset);
+}
+#endif
diff -r b2e663bfc0e9 -r 5117d4d94274 sys/arch/arm/pic/picvar.h
--- a/sys/arch/arm/pic/picvar.h Sun Jul 15 13:34:43 2018 +0000
+++ b/sys/arch/arm/pic/picvar.h Sun Jul 15 16:03:24 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: picvar.h,v 1.16 2015/07/07 21:43:46 matt Exp $ */
+/* $NetBSD: picvar.h,v 1.17 2018/07/15 16:03:24 jmcneill Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -76,6 +76,10 @@
int (*func)(void *), void *arg);
int pic_alloc_irq(struct pic_softc *pic);
void pic_disestablish_source(struct intrsource *is);
+#ifdef MULTIPROCESSOR
+void pic_distribute_source(struct intrsource *is, const kcpuset_t *,
+ kcpuset_t *);
+#endif
void pic_do_pending_ints(register_t psw, int newipl, void *frame);
void pic_dispatch(struct intrsource *is, void *frame);
@@ -114,6 +118,9 @@
uint8_t is_iplidx;
bool is_mpsafe;
char is_source[16];
+#ifdef MULTIPROCESSOR
+ kcpuset_t *is_affinity;
+#endif
};
struct pic_percpu {
@@ -156,6 +163,8 @@
#ifdef MULTIPROCESSOR
void (*pic_cpu_init)(struct pic_softc *, struct cpu_info *);
void (*pic_ipi_send)(struct pic_softc *, const kcpuset_t *, u_long);
+ int (*pic_set_affinity)(struct pic_softc *, size_t, const kcpuset_t *);
+ void (*pic_get_affinity)(struct pic_softc *, size_t, kcpuset_t *);
#endif
};
Home |
Main Index |
Thread Index |
Old Index