Source-Changes-D archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src/sys



Hi,

On 2015/08/24 16:18, Nick Hudson wrote:
> On 08/17/15 07:16, Kengo NAKAHARA wrote:
>> Module Name:    src
>> Committed By:    knakahara
>> Date:        Mon Aug 17 06:16:03 UTC 2015
>>
>>
> 
> Hi,
> 
> Unfortunately, the following doesn't work for platforms that don't define
> interrupt_construct_intrids. Should a new stub that returns NULL be created?
> Maybe RUN_ONCE is required here?
> 
>> Index: src/sys/kern/subr_interrupt.c
>> diff -u /dev/null src/sys/kern/subr_interrupt.c:1.1
>> --- /dev/null    Mon Aug 17 06:16:03 2015
>> +++ src/sys/kern/subr_interrupt.c    Mon Aug 17 06:16:03 2015
> ...
> 
>> +/*
>> + * Return the size of interrupts list data on success.
>> + * Reterun 0 on failed.
>> + */
>> +static size_t
>> +interrupt_intrio_list_size(void)
>> +{
> ...
>> +    /* il_line body */
>> +    ii_handler = interrupt_construct_intrids(kcpuset_running);
>> +    if (ii_handler == NULL)
>> +        return 0;
> 
> ...
>> Index: src/sys/kern/kern_stub.c
>> diff -u src/sys/kern/kern_stub.c:1.39 src/sys/kern/kern_stub.c:1.40
>> --- src/sys/kern/kern_stub.c:1.39    Mon Apr 27 06:42:53 2015
>> +++ src/sys/kern/kern_stub.c    Mon Aug 17 06:16:03 2015
> ...
>> +__weak_alias(interrupt_construct_intrids, eopnotsupp);
> 
> I found this by running sysctl -A on an evbarm platform

Sorry, some interrupt_* stub functions are incorrect.
Could you try below patch?
====================
diff --git a/sys/kern/kern_stub.c b/sys/kern/kern_stub.c
index da6377f..f7f638c 100644
--- a/sys/kern/kern_stub.c
+++ b/sys/kern/kern_stub.c
@@ -147,12 +147,12 @@ __weak_alias(userconf_prompt, voidop);
 
 __weak_alias(kobj_renamespace, nullop);
 
-__weak_alias(interrupt_get_count, eopnotsupp);
-__weak_alias(interrupt_get_assigned, eopnotsupp);
-__weak_alias(interrupt_get_available, eopnotsupp);
-__weak_alias(interrupt_get_devname, eopnotsupp);
-__weak_alias(interrupt_construct_intrids, eopnotsupp);
-__weak_alias(interrupt_destruct_intrids, eopnotsupp);
+__weak_alias(interrupt_get_count, nullop);
+__weak_alias(interrupt_get_assigned, voidop);
+__weak_alias(interrupt_get_available, voidop);
+__weak_alias(interrupt_get_devname, voidop);
+__weak_alias(interrupt_construct_intrids, enomem);
+__weak_alias(interrupt_destruct_intrids, voidop);
 __weak_alias(interrupt_distribute, eopnotsupp);
 __weak_alias(interrupt_distribute_handler, eopnotsupp);
 
@@ -267,6 +267,17 @@ eopnotsupp(void)
 }
 
 /*
+ * Return error for operation not supported
+ * on a specific allocate operation.
+ */
+void *
+enomem(void)
+{
+
+	return (NULL);
+}
+
+/*
  * Generic null operation, void return value.
  */
 void
diff --git a/sys/sys/systm.h b/sys/sys/systm.h
index 1778af6..d4b16ce 100644
--- a/sys/sys/systm.h
+++ b/sys/sys/systm.h
@@ -169,6 +169,7 @@ int	enosys(void);
 int	enoioctl(void);
 int	enxio(void);
 int	eopnotsupp(void);
+void*	enomem(void);
 
 enum hashtype {
 	HASH_LIST,
====================


Thanks,

-- 
//////////////////////////////////////////////////////////////////////
Internet Initiative Japan Inc.

Device Engineering Section,
Core Product Development Department,
Product Division,
Technology Unit

Kengo NAKAHARA <k-nakahara%iij.ad.jp@localhost>


Home | Main Index | Thread Index | Old Index