if (cost_limit <= 0) ereport(ERROR, (errmsg("cost limit must be a positive value")));
Is there a reason not to allow -1 (no limit), just like for vacuum_cost?
Eh. vaccum_cost_limit cannot be set to -1 (1 is the lowest). Neither can vacuum_cost_delay -- it is set to *0* to disable it (which is how the cost_delay parameter is handled here as well).
Are you thinking autovacuum_vacuum_cost_limit where -1 means "use vacuum_cost_limit"?
The reason to disallow cost_limit=0 is to avoid divide-by-zero. We could allow -1 and have it mean "use vacuum_cost_limit", but I'm not sure how relevant that really would be in this context?