tech-kern archive

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

Re: agp_nvidia port for review



> Date: Mon, 8 Jun 2026 00:54:14 +0300
> From: Andrius V <vezhlys%gmail.com@localhost>
> 
> +#include <sys/param.h>
> +#include <sys/systm.h>
> ...
> +#include <sys/agpio.h>
> +
> +#include <dev/pci/pcidevs.h>
> ...
> +#include <dev/pci/agpreg.h>

Sort includes lexicographically within each section, as in
/usr/share/misc/style.

If it doesn't build when sorted, insert the necessary forward
declarations or #includes in the included .h files to make it build.
If it still doesn't build because of a cyclic dependency, time to get
out the chainsaw and fix the header ouroboros.

> +	u_int32_t		initial_aperture; /* aperture size at startup */
> [...]
> +	u_int32_t		wbc_mask;

Since this is effectively new code without an upstream (assuming it's
going to be deleted in FreeBSD soon), use the standard C99 uint32_t
types.

> +	error = nvidia_init_iorr(apbase, AGP_GET_APERTURE(sc));
> +	error = 0;
> +	if (error) {

?

> +		pci_conf_write(sc->as_pc, nsc->mc2_tag, AGP_NVIDIA_2_ATTBASE(i),
> +				 (gatt->ag_physical + (i % nsc->num_dirs) * 64 * 1024) | 1);

Four-space additional indentation on continuation lines, per KNF.
Maybe use a temporary to keep the nesting levels down:

		const uint32_t physical =
		    gatt->ag_physical + (i % nsc->num_dirs) * 64 * 1024;
		pci_conf_write(sc->as_pc, nsc->mc2_tag,
		    AGP_NVIDIA_2_ATTBASE(i),
		    physical | 1);

> +	int val;
> +	
> +	val = (int) pci_conf_read(sc->as_pc, sc->as_tag, AGP_NVIDIA_0_APSIZE) & 0xff;
> +	switch (val) {

Why the intermediate val, and the cast?  Why not just:

	switch (pci_conf_read(sc->as_pc, sc->as_tag, AGP_NVIDIA_0_APSIZE) &
	    0xff) {

> +		/* Wait no more than 3 seconds. */
> +		for (i = 0; i < 3000; i++) {
> +			wbc_reg = pci_conf_read(sc->as_pc, nsc->mc1_tag, AGP_NVIDIA_1_WBC);
> +			if ((nsc->wbc_mask & wbc_reg) == 0)
> +				break;
> +			else
> +				DELAY(1000);

Seems like a very long time to wait in a DELAY loop?  Wonder if this
should be a preempt_point.

> +#if 0
> +static int
> +agp_nvidia_detach(struct agp_softc *sc)

Would be nice to test the detach path and not leave it #if 0, so this
could be a loadable _and unloadable_ module in the future.

> +	for(iorr_addr = 0; iorr_addr < AMD_K7_NUM_IORR; iorr_addr++) {

KNF: space between `for' and `('.

> +		base = rdmsr(IORR_BASE0 + 2 * iorr_addr);
> +		mask = rdmsr(IORR_MASK0 + 2 * iorr_addr);

Is this driver x86-specific?


Home | Main Index | Thread Index | Old Index