tech-net archive

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

Re: pluggable pktq_rps_hash()



Hi,

Thank you for your comments.

Thanks!  One tiny nit left: why pktq_rps_hash(&pktq_rps_hash_default,
...) in dev/pci/xmm7360.c while all the others get their own sysctl?
Otherwise, LGTM.

(A legitimate answer is `I don't have the hardware to test changes to
xmm7360.c, so someone else will have to do it.')

Exactly.  Moreover, I am not sure which sysctl entry should be used
"net.wwan.rps_hash", "hw.xmm7360.rps_hash", or something else.


(Maybe wg(4) should also have the pktq_rps_hash sysctl treatment too;
for some reason I don't remember I (or maybe Ozaki-san?) just wrote
curcpu()->ci_index with a comment `// pktq_rps_hash(m)'.)

Ozaki-san says he don't know the comment and the subsequent pktq_enqueue().
Hmm, I think wg(4) may require more than one pktq_rps_hash sysctl.


Thanks,

On 2021/10/08 18:33, Taylor R Campbell wrote:
Date: Fri, 8 Oct 2021 14:56:03 +0900
From: Kengo NAKAHARA <k-nakahara%iij.ad.jp@localhost>

On 2021/10/07 18:26, Taylor R Campbell wrote:
- In the sysctl definitions, no need for explicit (void *) cast.

Yes, however, that causes following build failure.
====================
[...]
/disk2/home/k-nakahara/repos/netbsd-src/sys/sys/sysctl.h:1152:42: note: expected 'char *' but argument is of type 'uint32_t (**)(const struct mbuf *)' {aka 'unsigned int (**)(const struct mbuf *)'}
   1152 | __sysctl_verify_##ctl_type##_arg(c_type *arg) \
====================

https://nxr.netbsd.org/xref/src/sys/sys/sysctl.h#1159
I think the above verifying macro is wrong, hmm, it should be fixed
another time...

I see -- it's because you defined it with CTLTYPE_STRING, but the
object stored in the kernel and passed to sysctl_pktq_rps_hash_handler
isn't actually a string.  So the (void *) cast is correct after all.

    (Is it necessary to pass PKTQ_RPS_HASH_NAME_LEN, anyway?  A lot of
    sysctl_createv calls just pass zero here.  I can't tell from the man
    page what it does.)

Yes, because the "flags" of sysctl_createv is CTLFLAG_READWRITE.  "newlen"
argument is used to set buffer size from userland.  A lot of sysctl which
calls pass zero would have CTLFLAG_READONLY "flags".

OK, thanks.  This sysctl(9) API sure is difficult to understand...

- pktqueue.c, sysctl_pktq_rps_hash_handler, lines 320 and 325: no need
    for a stack buffer to copy the type name into; can just do

	const char *type;
	...
	type = pktq_get_rps_hash_type(*func);

I think that is required by sysctl_lookup() to pass old value to userland.
Sorry if I am wrong.

I guess so!

I rebase and update patch, here is the update diff,
      https://github.com/knakahara/netbsd-src/commit/7ce7c9293782916c8a2e486ca6605911f4b4fea1
and here is unified diff with a little update,
      https://github.com/knakahara/netbsd-src/pull/8

Thanks!  One tiny nit left: why pktq_rps_hash(&pktq_rps_hash_default,
...) in dev/pci/xmm7360.c while all the others get their own sysctl?
Otherwise, LGTM.

(A legitimate answer is `I don't have the hardware to test changes to
xmm7360.c, so someone else will have to do it.')

(Maybe wg(4) should also have the pktq_rps_hash sysctl treatment too;
for some reason I don't remember I (or maybe Ozaki-san?) just wrote
curcpu()->ci_index with a comment `// pktq_rps_hash(m)'.)


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

Device Engineering Section,
Product Division,
Technology Unit

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




Home | Main Index | Thread Index | Old Index